1
12
如果您知道您将需要用于Ajax请求的CSRF令牌,那么您可以将它嵌入HTML中的某个地方;然后您可以通过JavaScript通过遍历DOM找到它。这样,您仍然可以访问令牌,但不会通过API公开它。 换一种方式:通过Django的模板来实现,而不是通过URL调度器。这样更安全。 |
2
16
更新 :以下是正确的,如果所有浏览器和插件都正确实现,则应该是正确的。不幸的是,我们现在知道它们不是,浏览器插件和重定向的某些组合允许攻击者在跨域请求上提供任意的头文件。不幸的是,这意味着即使具有“x-requested-with:xmlhttprequest”头的Ajax请求现在也必须受到CSRF保护。因此,Django no longer exempts Ajax requests from CSRF protection . 原始答案 值得一提的是,保护来自CSRF的Ajax请求是不必要的,因为浏览器不允许跨站点Ajax请求。事实上,Django CSRF中间件现在 automatically exempts AJAX requests from CSRF token scanning . 这仅在您实际检查x-requested-with头服务器端的“xmlhttprequest”值(Django是这样做的)时有效,并且仅从CSRF扫描中免除真正的Ajax请求。 |
3
1
取消那个,我错了。(见评论) 您可以通过确保JSON遵循规范来防止这种攻击:始终确保返回一个对象文本作为顶级对象。(我不能保证不会有进一步的剥削。想象一下一个浏览器提供对window.onerror事件中失败代码的访问!) 不能依赖跨站点脚本规则来保持Ajax响应的私有性。例如,如果将CSRF令牌作为JSON返回,恶意站点可能 redefine the String or Array constructor 并请求资源。 Bigmattyh是正确的:您需要将令牌嵌入标记中的某个位置。或者,您可以拒绝任何 做 有一个裁判 不 比赛。这样,只有那些有着过分狂热的软件防火墙的人才会容易受到CSRF的攻击。 |
Florent · 如何在Django中聚合多个字段? 1 年前 |
KWunsch · Django没有将pk引入模板 1 年前 |
Akshay mek · Vscode扩展建议不适用于某些文件夹 1 年前 |
Farid · 限制django每个客户的访问 2 年前 |
Blue · 从Django中的输入字段获取用户输入 2 年前 |
4SadMemeXD · 无法在Django中选择相关类别 2 年前 |