我已经看到了这个话题遍布文章和帖子(包括SO),和当时的评论是同源策略阻止跨域表单POST。 我见过有人认为,同源策略并不适用于形成职位唯一的地方, 就在这里 。
我想有从一个更“官方”或正式源的答案。 例如,没有人知道,解决同源怎么做或不影响表单POST的RFC?
澄清 :我不是问GET或POST可以构造和发送到任何域。 我问:
- 如果铬,IE,或Firefox将允许来自域“Y”内容到POST发送到域“X”
- 如果服务器收到的POST将真正看到在所有的任何形式的值。 我这样说是因为大多数网上讨论记录测试者说服务器接收到请求,但形式值均为空/剥离出来。
- 什么官方文件(即RFC)解释了预期的行为是什么(不管是什么浏览器目前已经实现的)。
顺便说一句,如果同样的原产地不影响表单提交 - 那么它使得有些更为什么防伪标记是必要的明显。 我说的“有点”,因为它似乎太容易相信攻击者可以简单地发出HTTP GET来检索包含防伪令牌的形式,然后让其中包含同样的非法POST。 评论?
同源策略仅适用于浏览器端编程语言。 所以,如果你尝试发布到不同的服务器使用JavaScript源服务器,那么同一产地的政策开始发挥作用,但如果你直接从形式即行动点到不同的服务器杆状:
<form action="http://someotherserver.com">
并没有涉及张贴形式JavaScript,然后同源策略是不适用的。
参见维基百科了解更多信息
它可以建立一个任意GET或POST请求,并将其发送到一个受害者浏览器访问任何服务器 。 这包括你的本地网络上的设备,如打印机和路由器。
有建设CSRF攻击的方法很多。 一个简单的POST基于跨站请求伪造攻击可以利用被发送.submit()
方法。 更复杂的攻击,如跨站点文件上传CSRF攻击会利用CORS使用xhr.withCredentals行为 。
CSRF不违反同源策略对于的javascrip计算负担,因为SOP涉及的JavaScript 读取服务器对客户请求响应。 CSRF攻击不关心的响应,他们关心的副作用 ,或由该请求所产生,例如添加一个管理用户或服务器上执行的任意代码状态改变。
确保您的请求使用中介绍的方法之一保护OWASP CSRF预防小抄 。 有关CSRF更多信息,请查询上CSRF OWASP页面 。
同源策略无关,与发送请求到另一个URL(不同的协议或域或端口)。
这是所有从另一个URL限制访问(读取)响应数据。 因此,一个页面中的JavaScript代码可以发布到任意域或页面内提交表单的任何地方(除非形式是用不同的URL的iframe)。
但是,是什么让这些POST请求的低效,这些请求缺乏防伪标记,所以通过其他网址都将被忽略。 此外,如果JavaScript尝试来获取安全令牌,通过发送AJAX请求到受害者的URL,防止通过同源策略来访问这些数据。
一个很好的例子: 在这里
而从Mozilla的一个很好的文档: 这里