小编典典

公开会话的CSRF保护令牌是否安全?

ajax

Django随附CSRF保护中间件,该中间件生成用于表单的唯一每次会话令牌。它扫描所有传入的POST请求以获取正确的令牌,如果令牌丢失或无效,则拒绝该请求。

我想对某些POST请求使用AJAX,但表示请求没有CSRF令牌。这些页面没有任何<form>要钩的元素,我宁可不要弄混将标记作为隐藏值插入的标记。我认为实现此目的的一种好方法是公开vew,/get- csrf-token/以返回用户的令牌,这依赖于浏览器的跨站点脚本编写规则来防止恶意站点请求它。

这是一个好主意吗?在允许AJAX请求的同时,还有更好的方法来防御CSRF攻击吗?


阅读 281

收藏
2020-07-26

共1个答案

小编典典

如果您知道需要CSRF令牌来处理AJAX请求,则可以随时将其嵌入HTML中。那么您可以遍历DOM并通过Javascript找到它。这样,您仍然可以访问令牌,但不会通过API公开令牌。

换句话说,请通过Django的模板进行操作-而不是通过URL分配程序。这样更安全。

2020-07-26