CSRF校验和处理
CSRF(Cross-siterequestforgery,跨站请求伪造),也被称为one-click attack或者session riding,是一种挟制用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。
Django防止csrf的方式:
默认打开csrf中间件
表单post提交数据时加上{%csrf_token%}标签(通过效验)
防御原理
渲染模板文件时在页面生成一个csrfmiddlewaretoken的隐藏域
服务器交给浏览器保存一个名字为csrftoken的cookie信息
提交表单时,两个值都会发给服务器,服务器进行对比,如果一样,则csrf验证通过,否则失败
注意:当启用中间件并加入标签csrf_token后,会向客户端浏览器中写入一条cookie信息,这条信息的值与隐藏域input元素的value属性是一致的,提交到服务器后会先由csrf中间件进行验证,如果对比失败则返回403页面,而不会进行后续的处理
静态文件使用
-修改项目目录中的配置文件settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [
BASE_DIR/'static'
]
Django中间件
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware', # 安全中间件
'django.contrib.sessions.middleware.SessionMiddleware', # 会话中间件,处理session
'django.middleware.common.CommonMiddleware', # 站点中间件,处理是否带斜杠的
'django.middleware.csrf.CsrfViewMiddleware', # CSRF保护中间件,跨站请求伪造的处理
'django.contrib.auth.middleware.AuthenticationMiddleware', # 认证中间件,提供用户认证服务
'django.contrib.messages.middleware.MessageMiddleware', # 消息中间件,基于cookie或者会话的消息功能
'django.middleware.clickjacking.XFrameOptionsMiddleware', # X-Frame-Options中间件,点击劫持保护]
自带认证方式登录
from django.shortcuts import render, redirect
from django.contrib.auth import authenticate, login, logout #用户名有效性验证 登入和登出
from django.contrib.auth.decorators import login_required # 验证用户是否登录
def acc_login(request):
if request.method == "POST":
username = request.POST.get("username")
password = request.POST.get("password")
user = authenticate(username=username,password=password) # 验证用户名的有效性
if user:
login(request,user) # 验证成功之后登录
return redirect('/test')
return render(request, "login.html")
def acc_logout(request):
logout(request) # 登出
return redirect("/login")
@login_required # 加上这个装饰器就是限制必须登录才能执行这个函数,记得再项目中配置文件settings.py追加一下内容LOGIN_URL = '/login/'
def dashboard(request):
print(request.user)
return render(request, "template/test1/list.html")
网友评论