跨域表单过帐


145

我已经看过有关该主题的文章和帖子(包括SO),并且普遍的评论是,同源策略阻止跨域的POST形式。我见过有人建议将同源政策不适用于表单帖子的唯一位置是此处

我想从一个更“官方”或正式的来源获得答案。例如,是否有人知道解决同源性如何影响表单POST的RFC?

澄清:我不是在问是否可以构造GET或POST并将其发送到任何域。我在问:

  1. 如果Chrome,IE或Firefox允许域“ Y”中的内容将POST发送到域“ X”
  2. 如果接收POST的服务器实际上将看到所有表单值。我之所以这样说,是因为大多数在线讨论记录的测试人员都说服务器收到了该帖子,但是表单值全部为空/已剥离。
  3. 哪个正式文档(即RFC)说明了预期的行为(无论浏览器当前已实现了什么)。

顺便说一句,如果同源源不影响表单POST,那么这使得为什么需要使用防伪令牌更加明显。我之所以说“有点”,是因为很难相信攻击者可以简单地发出HTTP GET来检索包含反伪造令牌的表单,然后进行包含相同令牌的非法POST。注释?


是的,攻击者可以使用普通的Web浏览器来做到这一点。
迈克尔·汉普顿

出于相同的原因,也许没有RFC,为什么没有RFC却说:“不要在您的网站上发布密码”。仅当多个方面必须共同努力才能实现目标时才需要Web标准:同一原始策略更多地是一组复杂的“安全最佳做法”,可以防止用户被黑客入侵。
西罗Santilli郝海东冠状病六四事件法轮功

@Ciro请明确地说。交叉发布到其他站点的规则不影响多方。无需有雾的说法。
小外星人

Answers:


175

相同的来源策略仅适用于浏览器端编程语言。因此,如果您尝试使用JavaScript将消息发布到与原始服务器不同的服务器上,则将使用相同的原始策略,但是如果您直接从表单中进行发布,即操作指向不同的服务器,例如:

<form action="http://someotherserver.com">

并且发布表单时不涉及任何JavaScript,因此相同的来源政策不适用。

有关更多信息,请参见Wikipedia


18
很抱歉提出一个老问题,如果使用JS更改了操作但使用按钮发布了表单,将会发生什么?这样可以成功发布跨域帖子吗?
克里斯,

AFAIK这应该不是问题,但我自己还没有尝试过。找出来会很有趣。
Suresh Kumar

2
我有同样的想法。我实际上对安全性感到担心,一些第三方JS /病毒更改了将表单投递到恶意位置的动作,但是意识到这可以在跨域接受或不接受跨域的任何付款中完成,并且结果是相同的。真正的教训是:检查任何第三方JS文件;)
克里斯(Chris

20
简而言之:是,允许跨域POST。
ChristianDavén2014年

17
-1表示:相同的来源策略与向另一个url(不同的协议,域或端口)发送请求无关,它只不过是限制访问(读取)来自另一个url的响应数据(从而防止javascript用以下方式更新文档)具有来自其他网址的安全令牌的表单)。
Mohsenme,2015年

43

可以构建任意的GET或POST请求,并将其发送到受害浏览器可访问的任何服务器。这包括本地网络上的设备,例如打印机和路由器。

有许多构建CSRF利用的方法。 可以使用方法发送基于POST的简单CSRF攻击.submit()。更复杂的攻击,例如跨站点文件上传,CSRF攻击将利用xhr.withCredentals行为的CORS使用

CSRF不会违反JavaScrip的“同源策略”,因为SOP与JavaScript有关,它正在读取服务器对客户端请求的响应。CSRF攻击并不关心响应,它们关心的是副作用或请求产生的状态更改,例如添加管理用户或在服务器上执行任意代码。

确保使用OWASP CSRF预防备忘单中介绍的方法之一保护您的请求。有关CSRF的更多信息,请参阅CSRF上的OWASP页面


我已更新我的问题以澄清。此外,您提供的WordPress链接涉及从同源X内发起的漏洞利用,而不是从跨域Y内发起的攻击……所以从我的角度来看这不是正确的情况。
布伦特阿里亚斯

@Brent Arias是的,您在1和2中描述的内容与CSRF攻击所执行的功能完全相同,也许您应该尝试执行所提供的CSRF攻击之一并嗅探流量。我已经更新了我的帖子,您应该阅读提供的每个链接,因为它可以准确回答这些问题。“跨站点请求伪造”(CSRF)攻击的重点是该请求源自另一个域,所提供的所有利用都完全满足此基本要求。
Mikey 2012年

16

相同的原始策略与将请求发送到另一个url(不同的协议,域或端口)无关。

这一切都是为了限制对另一个URL的访问(读取)响应数据。因此,页面内的JavaScript代码可以发布到任意域,也可以将该页面内的表单提交到任何地方(除非表单位于具有不同url的iframe中)。

但是导致这些POST请求效率低下的原因是这些请求缺少防伪令牌,因此其他url会将其忽略。此外,如果JavaScript试图通过向受害者url发送AJAX请求来获取该安全性令牌,则它会被Same Origin Policy阻止访问该数据。

一个很好的例子:这里

还有Mozilla的出色文档:此处

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.