csrf跨站请求伪造、csrf相关装饰器、auth认证模块

1|0csrf跨站请求伪造、csrf相关装饰器、auth认证模块

1|1csrf跨站请求伪造

简单来说就是攻击者通过一些技术手段欺骗用户的浏览器去访问一个自己曾经认证过的网站并执行一些操作,用于浏览器曾经认证过,所以被访问的网站会以为是真正的用户操作而去执行。

1|2经典例子

钓鱼网站:假设是一个跟银行一模一样的网站页面,用户在该页面上转账 账户的钱会减少,但是受益人却不是自己想要转账的那个人 eg:英语四六级考试需要网上先缴费 但是你会发现卡里的钱扣了但是却交到了一个莫名其妙的账户 并不是真正的四六级官方账户 思考:如何区分真假网站页面发送的请求

1|3csrf校验策略

image

csrf策略:通过在返回的页面上添加独一无二的标识信息从而区分正规网站和钓鱼网站的请求 # 在提交数据的位置添加唯一标识
1.form表单CSRF策略 form表单内部添加 {% csrf_token %} 2.ajax请求CSRF策略 // 方式1:自己动手取值 较为繁琐 {#data:{'csrfmiddlewaretoken':$('input[name="csrfmiddlewaretoken"]').val()},#} // 方式2:利用模板语法自动获取(一定要用引号引起来) {#data:{ 'csrfmiddlewaretoken':'{{ csrf_token }}','username':'jason'},#} // 方式3:直接引入一个js脚本即可(官网提供的) 参考:https://www.cnblogs.com/Dominic-Ji/p/9234099.html

1|4csrf相关装饰器

整个django项目都校验csrf 但是某些个视图函数\类不需要校验 整个django项目都不校验csrf 但是某些个视图函数\类需要校验 FBV添加装饰器的方式(与正常函数添加装饰器一致) from django.views.decorators.csrf import csrf_exempt, csrf_protect # @csrf_exempt @csrf_protect def transfer_func(request):pass CBV添加装饰器的方式(与正常情况不一样 需要注意) 主要有三种方式 # @method_decorator(csrf_protect, name='post') # 方式2:单独生效 class MyView(views.View): @method_decorator(csrf_protect) # 方式3:整个类中生效 def dispatch(self, request, *args, **kwargs): return super().dispatch(request, *args, **kwargs) # @method_decorator(csrf_protect) # 方式1:单独生效 def post(self, request): return HttpResponse('from cbv post view') 注意有一个装饰器是特例只能有一种添加方式>>>:csrf_exempt 只有在dispatch方法添加才会生效

1|5auth认证模块

auth模块是Django自带的用户认证模块 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统,django执行数据库迁移命令之后会产生一个auth_user表,该表可以配合auth模块做用户相关的功能:注册 登录 修改密码 注销 ...,该表还是django admin后台管理默认的表 Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点,它内置了强大的用户认证系统———Auth模块
1|0使用Django后台,创建超级管理员

image

from django.contrib import auth from django.contrib.auth.models import User 1.用户注册功能 User.objects.create_user(username=username, password=password) 2.判断用户名和密码是否正确 user_obj = auth.authenticate(request, username=username, password=password) 3.判断用户是否登录 request.user.is_authenticated 4.获取登录用户对象数据 request.user 5.校验用户是否登录装饰器 from django.contrib.auth.decorators import login_required @login_required(login_url='/login/') 局部配置 @login_required 全局配置 配置文件中LOGIN_URL = '/login/' 6.校验原密码是否正确 request.user.check_password(原密码) 7.修改密码 request.user.set_password(新密码) request.user.save() 8.退出登录 auth.logout(request)
1|0Auth模块常用方法
1.authenticate() 校验用户名和密码是否正确 auth.authenticate(request,username,password) 2.login 用户登录 auth.login(request,user_obj) 3.is_authenticateed 判断用户是否登录 request.user.is_authecticated 4.create_user,create_superuser 创建用户 User.object.contrib.auth.models import User User.object.create_user(username, password) User.object.create_superUser(username, password, email) 5.check_password 检查密码是否正确 request.user.check_password(old_password) 6.set_password request.user.set_password(new_password) request.user.save() # 必须要保存 7.logout request.logout(request) 8.校验用户登录装饰器 from django.contrib.auth.decorators import login_requiblack 跳转局部配置 login_requiblack(login_url='/login/') 跳转全局配置 LOGIN_URL = '/login/' 9.获取登录用户对象 request.user

__EOF__

本文作者泡芙有点甜
本文链接https://www.cnblogs.com/zx0524/p/17396222.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   小王应该在学习!  阅读(19)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示