首页 > 其他分享 >csrf跨站请求伪造、csrf相关装饰器、auth认证模块

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

时间:2023-05-12 20:47:42浏览次数:42  
标签:跨站 request auth user csrf login password

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

csrf跨站请求伪造

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

经典例子

钓鱼网站:假设是一个跟银行一模一样的网站页面,用户在该页面上转账
账户的钱会减少,但是受益人却不是自己想要转账的那个人

eg:英语四六级考试需要网上先缴费 但是你会发现卡里的钱扣了但是却交到了一个莫名其妙的账户 并不是真正的四六级官方账户
    
思考:如何区分真假网站页面发送的请求

csrf校验策略

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

csrf相关装饰器

整个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方法添加才会生效

auth认证模块

auth模块是Django自带的用户认证模块

我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统,django执行数据库迁移命令之后会产生一个auth_user表,该表可以配合auth模块做用户相关的功能:注册 登录 修改密码 注销 ...,该表还是django admin后台管理默认的表

Django作为一个完美主义者的终极框架,当然也会想到用户的这些痛点,它内置了强大的用户认证系统———Auth模块
使用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)
Auth模块常用方法
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 

标签:跨站,request,auth,user,csrf,login,password
From: https://www.cnblogs.com/zx0524/p/17396222.html

相关文章

  • wordpress中使用Nonce防止网站受到CSRF攻击
    使用Nonce(numberusedonce)是防止WordPress主题或者插件受到CSRF(cross-siterequestforgery)攻击最好的方法,WordPressNonce通过提供一个随机数,来实现在数据请求(比如,在后台保存插件选项,AJAS请求,执行其他操作等等)的时候防止未授权的请求。使用流程1、首先使用一个唯一的......
  • xss 攻击(跨站脚本攻击),如何避免?
    XSS攻击(跨站脚本攻击)是一种常见的Web安全漏洞,攻击者通过注入恶意脚本代码,从而获取用户的敏感信息或者使用用户的身份进行操作,对网站和用户造成损失。为了避免XSS攻击,可以采取如下措施:输入过滤对于用户输入的内容进行严格的过滤,删除或者转义HTML、JavaScript、CSS等特殊字符,从......
  • drf重写authenticate方法实现多条件登录(源码分析)
    drf重写authenticate方法实现多条件登录(源码分析)1.思路JWT拓展的登录视图中,在接受到用户名和密码时,调用的也是Django的认证系统中提供的authenticate()来检查用户名与密码是否正确.我们可以通过修改Django系统的认证后端来支持登录账号既可以是用户名也可以是手机号修......
  • csrf与auth初识BBS项目
    csrf相关的装饰器#与csrf验证相关#打开csrf中间件后,方法都需要验证''' 打开csrf的中间件之后,有几个方法不验证 关闭csrf的中间件之后,有几个方法验证'''fromdjango.views.decorators.csrfimportcsrf_exempt,csrf_protect@csrf_exempt#不再检测,局部禁用(前提是全站......
  • Django基础之-Auth
    目录补充:django_migrations表一Auth模块是什么二auth模块常用方法1.authenticate()2.login(HttpRequest,user)用户登录的案例3.is_authenticated()4.login_requierd登录成功后才能访问home页面案例:5.check_password(old_password)6.set_password(new_password)修改密码案例7.lo......
  • Laravel10 Auth 多用户(管理员、用户的区分)
    参考https://learnku.com/docs/laravel/10.x/authenticationmd/14876#retrieving-the-authenticated-user环境软件/系统版本说明windows10php8.1.9-Win32-vs16-x64composer2.5.5laravel10.8.0mysql8.0.28注意如果需要使用密码功能,还需......
  • Keycloak: Authorization Code Grant Example
    Keycloak:AuthorizationCodeGrantExamplehttps://www.appsdeveloperblog.com/keycloak-authorization-code-grant-example/ 适合web应用 Inthistutorial,youwilllearnhowtogetanaccesstokenfromtheKeycloakauthorizationserverusingtheOAuthAuthor......
  • Django之csrf跨站请求
    目录CSRF_TOKEN跨站请求伪造在form表单中应用:在Ajax中应用:关于CSRF中间件的全站禁用和局部禁用在CBV中使用:CSRF_TOKEN跨站请求伪造介绍:浅谈CSRF(Cross-siterequestforgery)跨站请求伪造在form表单中应用:<formaction=""method="post">{%csrf_token%}<p>用户名:<in......
  • Django之auth认证模块
    目录前戏:auth模块的使用auth之用户注册auth模块之登录request.user方法介绍request.user.is_authenticatedauth模块之网页首页auth模块之用户登录过直接跳转页面auth模块之用户修改密码auth模块之注销用户auth模块之扩展表前戏:django自带一个admin路由但是需要我们提供管理员......
  • 5.8之常见网络攻击及防御方法总结(XSS、SQL注入、CSRF攻击)
    目录背景知识XSS攻击SQL注入CSRF攻击背景知识从互联网诞生之初起,无时无刻不存在网络攻击,其中XSS攻击和SQL注入攻击是网站应用攻击的最主要的两种手段,全球大约70%的网站应用攻击都来自XSS攻击和SQL注入攻击。此外,常用的网站应用攻击还包括CSRF、Session劫持等。XSS攻击全......