2011-05-10 268 views
1

我有两个网站A和B都用ASP.NET MVC 3编写。在网站A中有一个表单,需要通过POST方法提交给网站B.用户可以选择直接发布或在加密值后进行发布。从一个网站到另一个网站的数据传输

当我提交没有加密的表单时,它很简单form.submit(),我能够使用FormCollection对象获取网站B中的值。但是,当用户在加密后选择提交时,我将重定向到网站A上的另一个操作,在该网站上进行加密,然后将此加密数据放置在相应视图的隐藏文本框中,然后使用jQuery将网页自动提交到网站B.但现在我无法在网站B上的FormCollection对象中获得任何值。

问题是什么?这是否因为任何安全功能而发生,以防止XSS或类似的东西?

+0

数据如何被加密/解密?你真的需要提交数据客户端,因此重定向用户,或者你可以使用Web服务并将其称为服务器端? – roryf 2011-05-10 20:38:48

+0

@ roryf使用非对称加密。它需要提交给一个网页,而不是一个web服务。 – 2011-05-10 20:40:51

回答

2

其可疑它来自XSS的保护 - 在这种情况下,你会看到一个例外。 加载提琴手,并确保您在表单中的某个元素中看到此数据,该元素将发布到网站b。如果它以提交的形式出现 - 应该可用。

+0

谢谢,使用Fiddler我发现数据没有到达网站B.然后我发现我使用id作为我的输入控件。改名为解决问题。 – 2011-05-11 13:25:55

1

不使用HTTPS并直接将表单提交到站点B的任何原因?

<form action="https://siteb/someaction" method="POST"> 
    <input type="text" name="key1" value="value1" /> 
    <input type="text" name="key2" value="value2" /> 
    <input type="text" name="key3" value="value3" /> 
    <input type="submit" value="Go ahead" /> 
</form> 

如果有任何理由在您要加密的值到一个单一隐藏的输入并提交包含使用JavaScript这个隐藏字段形式的情况下,唯一的隐藏字段的值将被发送到网站B.因此,举例来说,如果你有以下形式:

<form action="http://siteb/someaction" method="POST"> 
    <input type="hidden" name="encrypted" value="some encrypted value" /> 
</form> 

在站点B,你会取这样的加密值(不使用的FormCollection,相比视图模型它有点丑陋):

[HttpPost] 
public ActionResult SomeAction(string encrypted) 
{ 
    // TODO: decrypt the encrypted value here to get the orginal string 
    ... 
} 

而且一个更优雅的方式将是对站点B和这种模式,会做解密的自定义模型绑定定义的视图模式,使动作看起来简直像这样:

[HttpPost] 
public ActionResult SomeAction(SomeViewModel model) 
{ 
    // Directly use the model with all the fields in it. 
    // The custom model binder will take care of the creating it 
    // from the encrypted request string 
    ... 
} 
+0

我也在使用HTTPS,但用户有一个使用加密的附加选项。在加密场景中,我有两个隐藏字段,即用户的加密值和电子邮件ID。需要电子邮件ID才能获取用户的私钥进行解密。 – 2011-05-10 20:54:35

+0

@achinth,好的,但我还是不太明白你想要解决这个HTTPS尚未解决的*自定义加密场景的安全问题? – 2011-05-10 20:58:29

+0

表格包含支付细节,如果用户偏好使用浏览器插件进行篡改,如果用户更喜欢加密格式化,那么网页上的只读字段的支付细节将从数据库中再次读取,然后进行加密以确保任何篡改 – 2011-05-10 21:01:46

相关问题