第三百一十五节,Django框架,CSRF跨站请求伪造
全局CSRF
如果要启用防止CSRF跨站请求伪造,就需要在中间件开启CSRF
#中间件 MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', # 'django.middleware.csrf.CsrfViewMiddleware', #开启csrf 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ]
注意:一旦开启了csrf提交表单时会出现403错误,必须结合两个步骤来使用
第一、页面响应返回必须由render()方法
第二、必须在html页面的里用上模板语言{% csrf_token %}
{% csrf_token %}
...
逻辑处理
from django.shortcuts import render,redirect from app1.chajian.fen_ye import fen_ye_lei #导入分页模块 from app1.models import * #导入数据库模块 #逻辑处理模块 def special(request): return render(request, 'app1/index.html',locals())
html
"en"> "UTF-8">Title "stylesheet" type="text/css" href="/static/css/tou.css">
局部CSRF
局部CSRF,可以用装饰器在逻辑处理函数上做装饰
需要导入模块:from django.views.decorators.csrf import csrf_exempt,csrf_protect
@csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。使用了同样遵守上面两个步骤
@csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。
逻辑处理
from django.shortcuts import render,redirect from django.views.decorators.csrf import csrf_exempt,csrf_protect from app1.chajian.fen_ye import fen_ye_lei #导入分页模块 from app1.models import * #导入数据库模块 #逻辑处理模块 @csrf_protect def special(request): return render(request, 'app1/index.html',locals())
html
"en"> "UTF-8">Title "stylesheet" type="text/css" href="/static/css/tou.css">
Ajax提交
"en"> "UTF-8">{% csrf_token %} "button" οnclick="Do();" value="Do it"/>