当我使用“document.forms [0] .submit();”使用javascript POST到跨域时,我会得到一致的行为吗?

时间:2013-11-24 03:37:38

标签: javascript jquery ajax same-origin-policy post-redirect-get

我理解使用JAX和使用AJAX的跨站点请求存在安全问题(SOP,CORS等),但是我从一个域提交表单并将其发布到另一个域。我不认为SOP适用,但如果我错了,请纠正我。

我正在进行跨域POST的主要原因是因为Base64对GET字符串中的数据进行编码会导致可能包含敏感数据的大型URL。

  • 使用以下脚本通常是否可以接受(在移动和桌面浏览器中)?
  • 如果我遵循此重定向模式,移动浏览器或任何其他浏览器是否会感到不安?

<form action="https://MyotherDomain.com" method="post">
    <input type="hidden" name="UIDPName" value="@Model.UIDPName">
    <input type="submit" value="Redirect"  />
</form>

<script>
window.onload = function(){
    document.forms[0].submit();
}
</script>

1 个答案:

答案 0 :(得分:0)

我在生产级企业网站上看到并使用了这个确切的模式。我们使用它将通过POST发送的数据传输到面向用户的站点的页面,再转移到通过iframe嵌入的另一个页面。

以下是我们的确切实施,其中example.com是第二个网站的域名:

<form class="js-forwarding-form" target="forwarding-frame" action="http://example.com" method="post">
    <input type="hidden" name="example" value="example">
</form>

<iframe name="forwarding-frame" src=""></iframe>

$(document).ready(function() {
    $('.js-forwarding-form').submit();
});

<body onload="document.forms[0].submit()">版本的工作方式相同。

没有理由不使用它,因为CORS和SOP仅适用于在JavaScript(XMLHttpRequest等)中启动的请求,而这里只是触发HTML表单的提交。它已经过测试,适用于所有主流桌面浏览器(未在IE8下测试)以及移动浏览器。

至于这是否可以接受,嗯,你只需要提醒自己,这个数据传输是在浏览器上完成的。以这种方式发送的所有值都应该被清理/验证,就像它是用户输入一样。