djang_CSRF操作

一、什么是csrf

CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session Riding,通常缩写为CSRF或者XSRF,是一种对网站的恶意利用。可以理解别人伪造了网站偷了你的cookie,然后进行攻击

二、django中如何使用

在django的setting.py文件中,有中间件插件配置变量名MIDDLEWARE,其中有一个'django.middleware.csrf.CsrfViewMiddleware',这就是django中的csrf中间插件,平常我们使用django进行post的请求时,如果不注释'django.middleware.csrf.CsrfViewMiddleware',网站就会403报错,我们如何来开启这个中间件,并解决相应问题

全局:

中间件 django.middleware.csrf.CsrfViewMiddleware

局部:
先引用方法:
from django.views.decorators.csrf import csrf_exempt,csrf_protect
装饰器:
@csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。
@csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

  • 普通的from提交,{% csrf_token %},会自动在页面生成随机字符串,然后提交给后台:
{% csrf_token %}
  • ajax版本的提交

    image.png

上面的图中发现,其实我们可以通过获取浏览中的csrftoken字段来验证csrf

 
{% csrf_token %}
  • 统一添加ajax,csrf全局配置,场景加一次全局享用
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);
                }
            }
        });
  $(function () {
            $('#btn').click(function () {
                $.ajax({
                    url:'/login/',
                    type:'POST',
                    data:{"user":'root',"pwd":"root"},
                    headers:{'X-CSRFtoken':$.cookie('csrftoken')},
                    success:function (arg) {
                        alert(arg);
                    }
                })
            })
        })
    
···

你可能感兴趣的:(djang_CSRF操作)