数据从一个网站转移到另一个网站

时间:2011-05-10 20:35:53

标签: c# .net html asp.net-mvc-3 xss

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

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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
    ...
}