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 %},会自动在页面生成随机字符串,然后提交给后台:
<form action="/login/" method="post">
        {% csrf_token %}
        <input name="user" type="text">
        <input name="pwd" type="password">
        <input type="submit">
</form>
  • ajax版本的提交

    image.png

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

 <form action="/login/" method="post">
        {% csrf_token %}
        <input name="user" type="text">
        <input name="pwd" type="password">
        <input type="submit">
        <input id="btn" type="button" value="提交按钮">
    </form>
    <script src="/static/jquery-1.12.4.js"></script>
    <script src="/static/jquery.cookie.js"></script>

    <script>
        $(function () {
            $('#btn').click(function () {
                $.ajax({
                    url:'/login/',
                    type:'POST',
                    data:{"user":'root',"pwd":"root"},
                    headers:{'X-CSRFtoken':$.cookie('csrftoken')},
                    success:function (arg) {
                        alert(arg);
                    }
                })
            })
        })
    </script>
  • 统一添加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);
                    }
                })
            })
        })
    </script>
···
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容