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
-
前端form表单中取隐藏标签属性值放入data中post到后端, contentType: urlencoded 适用
$.ajax({ data:{ csrfmiddlewaretoken:$('[name="csrfmiddlewaretoken"]').val() } })
-
ajaxSetup:django将csrftoken传送到前端,前端post时携带这个值,
$.ajaxSetup({data:csrfmiddlewaretoken='{{csrf_token}})
-
发送contenttype类型数据时,通过获取响应返回的cookie中的字符串, 放置在请求头中发送。需要引入一个jquery.cokkie.js插件-----json, form-data适用
{%load static%} <script src="{% static 'js/jquery.cookie.js'%}"></script> $.ajax{{ headers:{"X-CSRFToken":$.cookie("csrftoken")}, }}
-