Django自带
CSRF protection middleware,它为表单生成一个唯一的每会话令牌.它扫描所有传入的POST请求以获得正确的令牌,如果令牌丢失或无效,则拒绝该请求.
我想使用AJAX进行一些POST请求,但是所述请求没有可用的CSRF令牌.这些页面没有< form>要插入的元素,我宁可不要把标记插入到一个隐藏的值中.我认为一个很好的方法是,使用/ get-csrf-token /来传递用户的令牌,依靠浏览器的跨站点脚本规则来防止恶意网站的请求.
这是一个好主意吗?是否有更好的方法来保护免受CSRF攻击,同时仍然允许AJAX请求?
如果您知道您将需要AJAX请求的CSRF令牌,您可以随时将其嵌入HTML中;那么你可以通过Javascript通过遍历DOM找到它.这样,您仍然可以访问令牌,但是您不会通过API进行暴露.
换句话说就是通过Django的模板来实现,而不是通过URL调度器.这样更安全.