gpt4 book ai didi

ajax - 暴露 session 的 CSRF 保护 token 安全吗?

转载 作者:行者123 更新时间:2023-12-02 05:37:05 26 4
gpt4 key购买 nike

Django 附带 CSRF protection middleware ,它生成一个唯一的每个 session token 以在表单中使用。它扫描所有传入的 POST请求正确的 token ,如果 token 丢失或无效,则拒绝请求。

我想对某些 POST 请求使用 AJAX,但所述请求没有可用的 CSRF token 。该页面没有 <form>要 Hook 的元素,我不想混淆将标记插入为隐藏值的标记。我认为一个好方法是公开类似 /get-csrf-token/ 的 View 。返回用户的 token ,依靠浏览器的跨站点脚本规则来防止恶意站点请求它。

这是个好主意吗?是否有更好的方法来防止 CSRF 攻击,同时仍然允许 AJAX 请求?

最佳答案

更新:以下内容是正确的,并且如果所有浏览器和插件都正确实现,则应该是正确的。不幸的是,我们现在知道事实并非如此,并且浏览器插件和重定向的某些组合可以允许攻击者在跨域请求上提供任意 header 。不幸的是,这意味着即使是带有“X-Requested-With: XMLHttpRequest” header 的 AJAX 请求现在也必须受到 CSRF 保护。结果,Django no longer exempts Ajax requests from CSRF protection .

原始答案

值得一提的是,没有必要保护 AJAX 请求免受 CSRF 的影响,因为浏览器不允许跨站点 AJAX 请求。事实上,Django CSRF中间件现在automatically exempts AJAX requests from CSRF token scanning

仅当您实际在服务器端检查 X-Requested-With header 中的“XMLHttpRequest”值(Django 所做的),并且仅从 CSRF 扫描中免除真正的 AJAX 请求时,这才有效。

关于ajax - 暴露 session 的 CSRF 保护 token 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/144696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com