Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从一个网站到另一个网站的数据传输_C#_.net_Html_Asp.net Mvc 3_Xss - Fatal编程技术网

C# 从一个网站到另一个网站的数据传输

C# 从一个网站到另一个网站的数据传输,c#,.net,html,asp.net-mvc-3,xss,C#,.net,Html,Asp.net Mvc 3,Xss,我有两个网站A和B都是用ASP.NETMVC3编写的。在网站A中,有一份表格需要通过POST方式提交给网站B。用户可以选择直接发布或在加密值后发布 当我在没有加密的情况下提交表单时,它是简单的form.submit(),我可以使用FormCollection对象获取网站B中的值。但当用户选择加密后提交时,我重定向到网站A本身的另一个操作,在该操作中进行加密,然后将加密数据放在相应视图中的隐藏文本框中,然后使用jQuery在页面加载时自动提交到网站B。但现在我无法在网站B上的FormCollect

我有两个网站A和B都是用ASP.NETMVC3编写的。在网站A中,有一份表格需要通过POST方式提交给网站B。用户可以选择直接发布或在加密值后发布

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


有什么问题吗?发生这种情况是因为任何防止XSS或类似的安全功能吗?

不使用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>
更优雅的方法是在站点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
    ...
}

这是可疑的,它从XSS的保护-在这种情况下,你会看到一个例外。
加载fiddler并确保您在表单中的一个元素中看到这些数据,该元素将发布到网站b。如果以提交的形式存在,则应可用。

数据是如何加密/解密的?您真的需要在客户端提交数据,从而重定向用户,还是可以使用web服务并将其称为服务器端?@roryf使用非对称加密。它需要提交到一个网页,而不是一个Web服务。我也使用HTTPS,但用户有一个额外的选项来使用加密。在加密场景中,我有两个隐藏字段:加密值和用户的电子邮件id。需要电子邮件id才能获取用户的私钥进行解密。@Achth,好的,但我仍然不太明白您试图通过HTTPS尚未解决的自定义加密方案解决哪些安全问题?表单包含可以使用浏览器插件篡改的付款详细信息,如果用户更喜欢加密格式,则网页上的支付详细信息(只读字段)将从数据库中再次读取,然后进行加密,以确保该页面上的任何篡改(更不用说反射的xss攻击)都可以获取plantext数据-尽管有人可能认为这也可以注入站点A中,但至少在这里,我们将攻击面减少到一个应用程序而不是两个。谢谢,使用Fiddler,我发现数据没有到达网站B。然后我发现我使用id作为输入控件。将其更改为name解决了该问题。
[HttpPost]
public ActionResult SomeAction(string encrypted)
{
    // TODO: decrypt the encrypted value here to get the orginal string
    ...
}
[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
    ...
}