csrf认证

csrf认证

  • django安全令牌机制, 保证浏览器GET请求到服务器的html页面后,POST数据的时候从服务器上GET到的html页面上提交的, 防止不正常的请求

    # django:settings.py
    'django.middleware.csrf.CsrfViewMiddleware' # 认证系统,如果不加,则不进行认证
    
    # django模板渲染: 先进行django模板渲染(render),再返回浏览器
    <form action="" method="post">
        {% csrf_token %}  # post请求加上csrf_token(安全令牌),每次POST请求都会令牌比对, 写在form表单的任意位置
        username: <input type="text" name="username">
        password: <input type="text" name="password">
        <input type="submit">
    </form>
    
    • 浏览器get请求,服务器响应包含post请求的html页面,服务器后端会自动保存一份name=csrfmiddlewaretoken,和value值的数据以备浏览器post认证,浏览器post请求时会加上name和value值,服务器端收到post请求后会比对value值,如果匹配则响应post请求,如果匹配不成功则拒绝响应.
  • csrf_token验证:post

    1. 前端form表单中取隐藏标签属性值放入data中post到后端, contentType: urlencoded 适用

      $.ajax({
      	data:{
      		csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val()
      		}
      	})
      
    2. ajaxSetup:django将csrftoken传送到前端,前端post时携带这个值,

      $.ajaxSetup({data:csrfmiddlewaretoken='{{csrf_token}})
      
    3. 发送contenttype类型数据时,通过获取响应返回的cookie中的字符串, 放置在请求头中发送。需要引入一个jquery.cokkie.js插件-----json, form-data适用

      {%load static%}
      <script src="{% static 'js/jquery.cookie.js'%}"></script>
      
      $.ajax{{
      	headers:{"X-CSRFToken":$.cookie("csrftoken")},
      }}
      
posted @ 2020-05-07 14:02  ManIThMrrr  阅读(177)  评论(0编辑  收藏  举报