是否真的可以使用自定义 HTTP 标头来防止 CSRF,因为浏览器会阻止网站将自定义 HTTP 标头发送到另一个网站?

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

今天在研究CSRF,发现了下面这句话:

自定义 HTTP 标头可用于防止 CSRF,因为浏览器 阻止网站将自定义 HTTP 标头发送到另一个网站,但 允许网站向自己发送自定义 HTTP 标头

本文内:https://www.invicti.com/web-vulnerability-scanner/vulnerability/cross-site-request-forgery-in-login-form-invicti/

有人可以向我更好地解释这个概念并告诉我这句话是否正确吗?

我是否可以假设,如果我在自定义 HTTP 标头内发送 CSRF 令牌,攻击者就无法做到这一点?

http security http-headers csrf
1个回答
1
投票

有人可以向我更好地解释这个概念并告诉我这句话是否正确吗?

这句话是正确的,因为实现 CORS 协议的现代浏览器将拒绝发出由外部(“跨源”)网页发起的请求,并且这些请求超出了简单单击超链接或提交一个HTML表单就可以实现。例如,如果此类请求包含

X-Requested-With: XMLHttpRequest
标头,他们就会拒绝此类请求。如果服务器只接受带有这样的
X-Requested-With
标头(或其他非标准标头)的请求,这可以用来防御 CSRF。那么就可以确定它们不是由不同的产地制成的。

如果请求的目标声明外部网页值得信赖(通过

preflight
响应中的 Access-Control-Allow-* 标头),仍然会发出此类跨源请求。

但是“简单”请求仍然需要 CSRF 令牌,例如通过提交 HTML 表单发起的请求。这些请求不能包含非标准标头,因此必须在(隐藏)表单字段中传输 CSRF 令牌。

我是否可以假设,如果我在自定义 HTTP 标头内发送 CSRF 令牌,攻击者就无法做到这一点?

请参阅此说明

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