XHR2 允许来源 - 这可以伪造吗?

Posted

技术标签:

【中文标题】XHR2 允许来源 - 这可以伪造吗?【英文标题】:XHR2 allow origin - can this be faked? 【发布时间】:2012-12-08 19:25:21 【问题描述】:

关于通过 XHR2/CORS 访问的资源可以阻止请求的方式,除非它来自白名单域:

读取哪个标头以确定引荐来源域 - 是标准 HTTP_REFERRER 吗? 有人能以某种方式假装来自另一个域的请求吗?

我知道 CORS 不是保护数据的可靠方法 - 我只是出于好奇而问。

【问题讨论】:

【参考方案1】:

读取的标头是Origin。与任何 HTTP 标头一样,它可以被伪造。 COSR 背后的想法是启用发送数据,同时仍然保护用户/防止滥用用户会话。禁止跨域请求是为了保护用户,而不是服务器。

攻击者应该假装这是另一个域发送请求并发送用户拥有的 cookie。这不是您可以通过XSS 单独实现的 - 您必须窃取 cookie 并自行发送请求。但是您不能从站点 B 窃取站点 A 的 cookie。但是,如果 A 接受来自任何域的请求,通过 B 上的 XSS,您可以欺骗用户的浏览器向 A 发送请求,浏览器将发送 cookie,您可以读取响应返回。

【讨论】:

【参考方案2】:

Origin 标头包含请求域。

此浏览器完全控制此标头,不能伪造。浏览器代表用户控制这个header,用户不能覆盖JS代码中的值。

注意我说的是“浏览器”;与任何 HTTP 请求一样,用户可以使用任何 Origin 标头制作 curl 请求。但这作为攻击媒介的用途有限,因为黑客必须欺骗有效用户发出正确的 curl 请求,而这不太可能。

【讨论】:

以上是关于XHR2 允许来源 - 这可以伪造吗?的主要内容,如果未能解决你的问题,请参考以下文章

php curl 伪造IP来源的实例代码

如何使用访问控制允许来源?它只是在html头标签之间吗?

php 伪造HTTP_REFERER页面URL来源的三种方法

HTTP请求源IP伪造

php curl 伪造IP来源的实例代码

检查推荐人是不是足以防止 CSRF 攻击?