我在这个主题上看过各地的文章和帖子(包括SO),而流行的评论是同源政策阻止了跨域的表单POST。我见过的唯一一个人认为同源政策不适用于表格帖子,is here。
我想从更“官方”或正式来源获得答案。例如,是否有人知道RFC解决了同源来源对表单POST的影响?或者不影响表单POST?
澄清:我不是在询问是否可以构建GET或POST并将其发送到任何域。我在问:
顺便提一下,如果同源不会影响表单POST,那么它会更清楚地说明为什么需要使用防伪令牌。我说“有些”因为似乎很容易相信攻击者可以简单地发出HTTP GET来检索包含防伪令牌的表单,然后进行包含相同令牌的非法POST。评论
答案 0 :(得分:152)
相同的原始策略仅适用于浏览器端编程语言。因此,如果您尝试使用JavaScript发布到与源服务器不同的服务器,则相同的源策略将起作用,但如果您直接从表单发布,即操作指向不同的服务器,如:
<form action="http://someotherserver.com">
并且在发布表单时没有涉及javascript,因此相同的原始策略不适用。
有关详细信息,请参阅wikipedia
答案 1 :(得分:39)
可以构建任意GET或POST请求,并将其发送到受害者浏览器可访问的任何服务器。这包括本地网络上的设备,例如打印机和路由器。
构建CSRF漏洞的方法有很多种。 A simple POST based CSRF attack可以使用.submit()
方法发送。更复杂的攻击,例如cross-site file upload CSRF attacks,将利用CORS use of the xhr.withCredentals behavior。
CSRF没有违反Same-Origin Policy For JavaScrip t,因为SOP涉及JavaScript 读取 服务器对客户端请求的响应。 CSRF攻击不关心响应,它们关心副作用,或者请求产生的状态更改,例如添加管理用户或在服务器上执行任意代码。
确保使用OWASP CSRF Prevention Cheat Sheet中描述的方法之一保护您的请求。有关CSRF的更多信息,请参阅OWASP page on CSRF。
答案 2 :(得分:14)