我有一个React前端,运行在 frontend.example.com
和Django后端,DRF运行于 backend.example.com
. 我正在使用Django会话认证,我想正确地实现 CSRF保护.
以React登录页面 frontend.example.com/login
为例。这是用户第一次访问该页面。有一个包含用户和密码的表单,在提交时,会创建一个新的POST请求到Django后台。据我所知,CSRF token cookie应该已经包含在这个请求中了吧?
如何从Django后台获取CSRF令牌?我想在加载登录页面时,向Django后台发出GET请求,以获取CSRF令牌cookie。是这样做的吗,还是有其他最佳实践?
Django有一个AJAX请求和如何处理CSRF的部分。AJAX
使用这种方法,你应该为每个帖子请求反复发送令牌。另一种方法是使用CORS.在这种方法中,你只响应你已经列入白名单的域,头也是白名单。所以,你不需要获取和传递CSRF令牌,而是检查请求是否来自正确的域,然后你就可以响应它。并结合用户认证的令牌系统,你应该是好的。
如果你使用DRF,可以使用这个包来处理CORS。django -cors -headers
使用速率限制也可以帮助你避免垃圾邮件和机器人造成明显的伤害。