跨域表单发布

问题描述 投票:0回答:3

我已经看过有关此主题的所有文章和帖子(包括 SO),普遍的评论是同源策略会阻止跨域的表单 POST。 我唯一看到有人建议同源政策不适用于表单帖子的地方,在这里

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

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

  1. 如果 Chrome、IE 或 Firefox 允许域“Y”中的内容向域“X”发送 POST
  2. 如果接收 POST 的服务器实际上会看到任何表单值。 我这么说是因为大多数在线讨论记录测试人员说服务器收到了帖子,但表单值都是空的/被删除了。
  3. 官方文档(即 RFC)解释了预期的行为是什么(无论浏览器当前实现了什么)。

顺便说一句,如果同源不影响表单 POST - 那么它使得防伪令牌的必要性变得更加明显。 我说“某种程度上”是因为似乎很容易相信攻击者可以简单地发出 HTTP GET 来检索包含防伪令牌的表单,然后发出包含相同令牌的非法 POST。 评论?

html security http csrf same-origin-policy
3个回答
210
投票

同源策略仅适用于浏览器端编程语言。因此,如果您尝试使用 JavaScript 发布到与原始服务器不同的服务器,那么相同的原始策略就会发挥作用,但如果您直接从表单发布,即操作指向不同的服务器,例如:

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

并且发布表单时不涉及 javascript,则同源策略不适用。

请参阅维基百科了解更多信息


54
投票

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

构建 CSRF 漏洞的方法有很多种。 可以使用.submit()

方法发送基于POST的简单CSRF攻击
。 更复杂的攻击,例如跨站点文件上传 CSRF 攻击,将利用 CORS 使用 xhr.withCredentals 行为

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

OWASP CSRF 预防备忘单

中描述的方法之一保护您的请求。 有关 CSRF 的更多信息,请参阅CSRF 上的 OWASP 页面


22
投票

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

但是这些 POST 请求效率低下的原因是这些请求缺乏防伪令牌,因此会被其他 url 忽略。此外,如果 JavaScript 尝试通过向受害者 URL 发送 AJAX 请求来获取该安全令牌,则同源策略将阻止访问该数据。

一个很好的例子:

这里

Mozilla 提供了一份很好的文档:

这里

© www.soinside.com 2019 - 2024. All rights reserved.