本文是Django经典面试问题与答案系列的中篇,如果还未读过第一篇的,请点击这里。小编精心收集,希望对大家学习和工作有所帮助,欢迎转载点赞啊。
11. 简单说说看 Django的CSRF防御机制
Django的CSRF保护主要是通过django.middleware.csrf.CsrfViewMiddleware
中间件来实现的。主要流程如下:
Django 第一次响应来自某个客户端的get请求时,会在服务器端随机生成一个 csrftoken(一串64位的随机字符串),把这个 token 放请求头的 cookie 里返回给用户。
所有通过POST方式提交的表单在渲染时中必须包含一个 csrfmiddlewaretoken 隐藏字段 (在模板中通过{% csrf_token %}标签生成)。
当用户通过POST提交表单时,Django会从请求头cookie取
csrftoken
这一项的值,再从POST表单里取csrfmiddlewaretoken
交由中间件进行校验两者是否一致。如果一致表明这是一个合法请求,否则返回403 Forbidden.
注意csrftoken
和csrfmiddlewaretoken
并不是简单相等的两个字符串,而是通过算法判断是否一致相等的,如下图所示。
12. Django中使用AJAX发送POST请求时如何通过CSRF认证?
1. 第一种方式直接在发送数据中加入csrfmiddlewaretoken
<script>
$("#btn").on("click",function () {
$.ajax({
url:"/some_url/",
type:"POST",
data:{
csrfmiddlewaretoken:{
{ csrf_token }