Django中csrf错误

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“one click attack”或者session riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。

尽管听起来像跨站脚本(XSS),但它与XSS非常不同,并且攻击方式几乎相左。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。

与XSS攻击相比,CSRF攻击往往不大流行(因此对其进行防范的资源也相当稀少)和难以防范,所以被认为比XSS更具危险性。

Django 中自带了 防止CSRF攻击的功能,但是一些新手不知道如何使用,给自己编程带来了麻烦。

GET 请求不需要 CSRF 认证,POST 请求需要正确认证才能得到正确的返回结果。一般在POST表单中加入 {% csrf_token %}

<form method="POST" action="/post-url/">
    {% csrf_token %}
     
    <input name='lh' value="提交">
</form>

如果使用Ajax调用的时候,就要麻烦一些。(一般错误显示为403错误)

需要在模板文件中添加以下内容:

<script src="/static/js/jquery.cookie.js"></script>   #需要引用jquery.cookie.js(自己下载),下面要调用cookie

<script>
//ajax csrf设置
  var csrftoken = $.cookie('csrftoken');
  function csrfSafeMethod(method) {
     // these HTTP methods do not require CSRF protection
      return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
   }
$.ajaxSetup({ beforeSend: function(xhr, settings) {   
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {   xhr.setRequestHeader("X-CSRFToken", csrftoken); } } }); </script>
原文地址:https://www.cnblogs.com/MacoLee/p/5888624.html