C# 从一个网站到另一个网站的数据传输
我有两个网站A和B都是用ASP.NETMVC3编写的。在网站A中,有一份表格需要通过POST方式提交给网站B。用户可以选择直接发布或在加密值后发布 当我在没有加密的情况下提交表单时,它是简单的form.submit(),我可以使用FormCollection对象获取网站B中的值。但当用户选择加密后提交时,我重定向到网站A本身的另一个操作,在该操作中进行加密,然后将加密数据放在相应视图中的隐藏文本框中,然后使用jQuery在页面加载时自动提交到网站B。但现在我无法在网站B上的FormCollection对象中获取任何值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
有什么问题吗?发生这种情况是因为任何防止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
...
}