Django 之ajax请求中的跨站请求攻击

背景介绍

  • 在网站开发过程中可能会需要用到ajax来达到不刷新网页就更新局部html。
    django的模版便签里自带里一个{% csrf_token %} 来防止跨站请求攻击,在CSRF保护激活的情况下, Django 会检查所有 POST 请求中的 CSRF token。
    当你提交表单时,你可以使用{% csrf_token %}模板标签来发送带有 token 的表单。
    Any way,像 POST 请求一样对 AJAX 请求传递CDRF token 可能会有一点点不方便。
    当发起AJAX请求的时候,如果我们没带上请求头,我们会直接拒绝访问,为了解决一个问题,查文档后发现了可行的解决方案。

解决方案

  • 其实Django允许你在你的 AJAX 请求中设置一个定制的 X-CSRFToken token 头(header)。这允许你安装一个 jQuery 或者任意 JavaScript 库来自动设置X-CSRFToken头在每一次请求中。
    为了在所有的请求中加入 token ,你需要:

    1. 从 csrftoken cookie 中检索 CSRF token,它在CSRF保护激活的情况下会被设置
    2. 使用 X-CSRFToken头发送 token 到 AJAX 中
      你也可以自己去文档里找到更多关于 CSRF 保护 和 AJAX 的信息:http://docs.djangoproject.com/en/1.11/ref/csrf/#ajax
  • 为了实现上述需求我们需要编写代码如下类似代码


//   获取一个cookie相关的包

  • 把这段代码写到网站及base模版里,接下来就可以自由的使用带请求头ajax请求啦

好啦 又是Happycoding时光~

你可能感兴趣的:(Django 之ajax请求中的跨站请求攻击)