CSRF(跨站请求伪造)
        用户请求获取数据时,加入一段加密字符串,只有服务器能反解。
        XSS(跨站脚本攻击),JS脚本在网站中运行,如果获取到用户Cookie,可以利用Cookie实现登录。
        CSRF验证使用户提交数据时,如果不带上加密字符串不允许登录。
        所以发送给客户端的页面中要加上CSRFtoken,这样,下次客户端再次请求时就会有加密后的随机字符串
  
        settings.py中间件CSRF
        'django.middleware.csrf.CsrfViewMiddleware'
    开启这个功能,默认Django的所有post请求如果不带上csrftoken不允许请求页面
 
 
        1.一般不这么发,会放在请求头中发送
        <form action>        
            {%csrf_token%}
        </form>
        2.Ajex请求带上CSRF
        一般来说如果在请求头中添加数据key-mysql,那么Django会在最终的请求头的把key改变为HTTP_KEY(下划线非法)
        我们的CSRF也默认在请求头中传递,键名为HTTP_X_CSRFTOKEN  -----> X-CSRFtoken
        这样传递就会通过CSRF的验证中间件
         ①$('#i1').click(function(){
                var csrf_token = $.cookie('csrf_token')
                $.ajax({
                    url:'xxx',
                    type:'post',
                    data:{ 'username':xxx,'password':123123 }
                    headers:{ 'x-CSRFtoken':csrf_token }
                    success:function(arg){
                        
                    }
                })
         })
        ②Ajax整个页面统一配置
         xhr 是 XMLHttpRequest对象,默认Ajax底层使用的就是它
         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);
                }
            }
        });
    
      大多数请求需要CSRF验证
from django.views.decorators.csrf import csrf_exempt
from django.views.decorators.csrf import csrf_protect
            @csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。            
      少数请求需要CSRF验证
            @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。
 

Django学习-17-CSRF的更多相关文章

  1. django学习之- CSRF及中间件

    CSRF # 表示django全局发送post请求均需要字符串验证功能:防止跨站请求伪造的功能工作原理:客户端访问服务器端,在服务器端正常返回给客户端数据的时候,而外返回给客户端一段字符串,等到客户端 ...

  2. Django学习手册 - csrf

    CSRF csrf原理 无csrf时存在隐患 Form提交 Ajax提交 默认为全局都csrf Form表单提交方式: <div> <form action="/login ...

  3. django学习-17.如何提供一个规范的接口返回值

    目录结构 1.前言 2.进行实际的一个完整流程操作 2.1.第一步:编写一个用于查询用户数据的视图函数 2.2.第二步:编写对应的一个url匹配规则 2.3.第三步:启动django项目[hellow ...

  4. django 学习-17 Django会话Session

    session   类似于字典的一个对象,是可读可写的 跟cookie的变化不大而且还显得简单 在这里我只说一下改变的地方 1.vim blog/views.py if uf.is_valid():  ...

  5. Django中间件、csrf跨站请求、csrf装饰器、基于django中间件学习编程思想

    django中间件 中间件介绍 什么是中间件? 官方的说法:中间件是一个用来处理Django的请求和响应的框架级别的钩子.它是一个轻量.低级别的插件系统,用于在全局范围内改变Django的输入和输出. ...

  6. Django学习---CSRF

    CSRF xss攻击:假设我们网站的评论里面允许用户写js的时候,每个人就会看到页面会执行这个js代码,有的是alert,不停的跳出弹框.这个还不算严重的,关键是如果js代码运行的结果不显示在页面上, ...

  7. Django学习系列之CSRF

    Django CSRF 什么是CSRF CSRF, Cross Site Request Forgery, 跨站点伪造请求.举例来讲,某个恶意的网站上有一个指向你的网站的链接,如果 某个用户已经登录到 ...

  8. 第六章:Django 综合篇 - 17:CSRF与AJAX

    CSRF(Cross-site request forgery)跨站请求伪造,是一种常见的网络攻击手段,具体内容和含义请大家自行百度. Django为我们提供了防范CSRF攻击的机制. 一.基本使用 ...

  9. Django学习笔记(8)——前后台数据交互实战(AJAX)

    这里将自己这段时间学习的关于前后台数据交互的笔记写在这里,这里包含了Django传输数据给JS,AJAX的相关问题,跨域问题,如何解决AJAX的跨域问题等等.比较凌乱,请看到这篇博客的盆友见谅,如果我 ...

  10. Python框架之Django学习

    当前标签: Django   Python框架之Django学习笔记(十四) 尛鱼 2014-10-12 13:55 阅读:173 评论:0     Python框架之Django学习笔记(十三) 尛 ...

随机推荐

  1. notify丢失、虚假唤醒

    notify丢失: 假设线程A因为某种条件在条件队列中等待,同时线程B因为另外一种条件在同一个条件队列中等待,也就是说线程A/B都被同一个Object.wait()挂起,但是等待的条件不同. 现在假设 ...

  2. 用 label 控制 Pod 的位置 - 每天5分钟玩转 Docker 容器技术(128)

    默认配置下,Scheduler 会将 Pod 调度到所有可用的 Node.不过有些情况我们希望将 Pod 部署到指定的 Node,比如将有大量磁盘 I/O 的 Pod 部署到配置了 SSD 的 Nod ...

  3. 克隆虚拟机以及两台linux机器相互登录:linux学习第四篇

    克隆虚拟机 1.      克隆 之后自己命名克隆的虚拟机并自己选择存放位置,完成克隆 2.      克隆虚拟机之后对新的虚拟机修改网络配置,以免冲突(将配置文件里的UUID去掉,并修改IP地址) ...

  4. CocosCreator游戏开发---菜鸟学习之路(一)

    PS(废话): 辞职后在家好久好久了,久到经济不允许了,接着就准备再次出去找工作了,然而工作哪有那么好找,特别是像我这种菜鸟.而且我还准备转行,准备去做游戏,技能等级接近于0,那工作就更难找了.既然如 ...

  5. NoSQLBooster for MongoDB的基本使用

    连接 File -> Quik Connect ( Ctrl + Shift + N ) 或 Connect -> From URI 填入 mongodb://username:passw ...

  6. redis 设置认证密码

    通过修改redis配置文件(redis.conf)修改验证密码.(重启生效) requirepass myRedis 客户端通过密码登录redis并进行操作 redis-cli -h 127.0.0. ...

  7. CentOS时间的查看与修改

    [http://www.centoscn.com/CentOS/help/2014/0805/3430.html] 1.查看.修改Linux时区与时间 一.linux时区的查看与修改 1,查看当前时区 ...

  8. Pycharm 出现Unresolved reference '' 错误的解决方法

    在用Pycharm做Pygame游戏小实战的时候碰到一个很无语的问题 如下 什么鬼?????? 我明明有写settings模块啊 而且还是放在同一个目录下  然后Pycharm给我来了一个错误 而且在 ...

  9. angular+require前端项目架构搭建

    app //应用入口 directive //自定义指令 require-main //require的主配置文件  存放公共调用的js service //请求后端数据公有类 controllers ...

  10. 【HTTP协议】---TCP三次握手和四次挥手

    TCP三次握手和四次挥手 首先我们知道HTTP协议通常承载于TCP协议之上,HTTPS承载于TLS或SSL协议层之上 通过上面这张图我们能够知道.     在Http工作之前,Web浏览器通过网络和W ...