什么是csrf ?
- csrf是一种服务器过滤不安全post请求的方法
- 具体是服务器生成一个随机字符串,浏览器GET请求会得到这个字符串,
POST请求的时候带上这个字符串,服务器收到request时候验证,并确认
在django中开启csrf服务:
在django中的setting文件中的,middleware列表有一行:
'django.middleware.csrf.CsrfViewMiddleware',
所以,csrf是自带,而且开启的。
使用模板语言在html中直接调用 :{%csrf_token%}
在浏览器端表现为:
<input type="hidden" name="csrfmiddlewaretoken" value="AkzFz4k7nHaAQOTBIbCLdswfgzQH09WkJxxWEtpM8GD8ZDbjX6hliuTiGt4iUgbz">0
如果此标签是放在form表单中则随POST请求一起提交了。
在django中禁用csrf服务:
- 在middleware列表注释掉
'django.middleware.csrf.CsrfViewMiddleware',
局部禁用:
- 在视图函数前加上装饰器@csrf_exempt,需要先引入from django.views.decorators.csrf import csrf_exempt
- 在cbv模式下,from django.utils.decorators import method_decorator,然后在class上加@csrf_exempt
局部启用
- 在全局禁用的情况下
- 引入函数 from django.views.decorators.csrf import csrf_protect
- 在视图函数前加入@csrf_protect
- cbv模式下,在class前加上@csrf_protect