我试图为我发现的CSRF问题创建一个PoC。请求在请求头中包含CSRF令牌,问题是服务器端只检查令牌是否可用,而不检查它是否属于当前用户会话。
我试图通过设置一个自定义头来使用我的令牌(因为服务器不验证CSRF令牌)来使用我的令牌覆盖CSRF令牌,从而使用XmlHttpRequest创建CSRF令牌,但由于CORS,这将被阻塞。
POST /endpoint
HEADER_CSRF: ANY_CSRF_TOKEN <--- accept any other CSRF token
...是否有一种方法可以实现CSRF PoC而不因CORS而被阻塞?
发布于 2022-10-14 02:23:22
只是想看看我的理解:
都是对的吗?如果是的话:
的攻击。
这实际上是我最喜欢的减轻CSRF的方法之一。
顺便提一句,飞行前的要求是关键。只是不允许CORS请求DOES而不是阻止CSRF;攻击者可以发送非CORS跨站点请求(使用Fetch API,或者只使用自动提交的HTML form元素)或非预置的(“简单”) CORS请求,即使服务器用相当于“嘿,这是不允许的!”的CORS响应。服务器也可能仍然正常地处理请求。即使在有证书的(包含cookie的)请求中也会发生这种情况;设置withCredentials=true并不会使CORS请求需要预运行,并且提交表单时会自动包含cookie。阻止浏览器发送请求的唯一方法是拒绝可以在不预先执行任务的情况下发出的请求。
尽管如此,除了自定义头之外,还有其他几种方法可以这样做:
application/json是通常的选择。请注意,这意味着完全验证Content标头值;仅仅要求Content标头包含字符串" JSON“(在简单请求中可以欺骗)是不够的,绝对不能仅仅将主体解析为JSON。https://security.stackexchange.com/questions/265447
复制相似问题