csrf及auth模块

本文详细介绍了CSRF的概念、用途、模拟攻击、预防措施以及校验策略,包括Token构成、表单和Ajax操作的处理。同时,文章探讨了Django的Auth模块,涵盖用户创建、登录、校验、注销等常见功能,以及如何扩展auth_user表和基于中间件的功能设计。
摘要由CSDN通过智能技术生成

目录

CSRF简介

用途

模拟

预防

csrf校验策略

1.Token的构成

2.form表单操作csrf

 3.Ajax操作csrf 

CSRF添加装饰器的方法

auth模块常见方法

 auth常见功能

创建用户

校验用户名或密码是否非正确

用户登录,保存用户状态

判断用户是否登录

获取登录用户对象

校验用户登录装饰器

校验密码是否正确

修改密码

注销登录

auth_user表切换方法

基于中间件思想的功能插拔式设计

1.模块的导入方法

2.类中间件导入方式    

    2.2配置文件插拔设计

 auth扩展表字段

扩展方式一 : 建立一对一外键关系

扩展方式二 : 继承 AbstractUser 类来扩写 (步骤)

如果 auth_user 表已经存在


CSRF简介

CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding, 缩写为:CSRF/XSRF

用途

CSRF可以用来做钓鱼网站:  假设是一个和银行一模一样的网址页面,用户在该页面上转账账户的钱就会减少,三十受益人却不是自己指定想要转账的那个人.

你可以这么理解CSRF共计:攻击者盗用了你的身份,以你的名义发送恶意请求。CSRF能够做的事情包括:以你的名义发送邮件,发信息,盗取你的账号,甚至于购买商品,虚拟货币转账...造成的问题包括:个人隐私泄露以及财产安全

模拟

一台计算机上的两个服务端口启动,钓鱼网站提交地址改为正规网站的地址

  • 用户C打开浏览器,访问受信任网站A,输入用户名和密码请求登录网站A;

  • 2.在用户信息通过验证后,网站A产生Cookie信息并返回给浏览器,此时用户登录网站A成功,可以正常发送请求到网站A;

  • 3.用户未退出网站A之前,在同一浏览器中,打开一个TAB页访问网站B;

  • 4.网站B接收到用户请求后,返回一些攻击性代码,并发出一个请求要求访问第三方站点A;

  • 5.浏览器在接收到这些攻击性代码后,根据网站B的请求,在用户不知情的情况下携带Cookie信息,向网站A发出请求。网站A并不知道该请求其实是由B发起的,所以会根据用户C的Cookie信息以C的权限处理该请求,导致来自网站B的恶意代码被执行。

预防

  • csrf策略:通过在返回的页面上添加独一无二的标识信息从而区分正规网站和钓鱼网站的请求
  • CSRF防护的一个重点就是要对用户凭证进行处理,通过这种机制可以对用户的请求合法是否合法进行判断,判断是不是跨站攻击的行为。因为用户凭证是Cookie中存储的,所以防护机制的处理对象也是Cookie的数据,我们要在防护的数据中加入签名校验,并对数据进行生命周期时间的管理,就是数据过期管理。

csrf校验策略

1.Token的构成


    消息[msg]:而msg本身也有两部分组成:一部分:随即字符串,过期时间戳。
    分隔符[separator]:用于分割msg部分与加密后生成的signature签名部分,这里用的是"."
    签名[signature]:singnature.signature签名,是对“msg消息”用特定算法进行加密后的字符串
    token = base64(msg)格式化..base64(sha256("密码",msg))
    Token由被base64的msg编码穿+256加密msg再进行Base64编码,两个字符串的内容结合
 


2.form表单操作csrf

   <h1>这是一个真实的网站</h1>
    <form action="" method="post">
        {% csrf_token %}
    </form>

 
3.Ajax操作csrf 


    方法一:先编写csrf模板语法,然后利用标签查找和值获取,手动添加
      

  data:{'username':'','csrmiddlewaretoken':$('[name="csrmiddlewaretoken"]').val()},


    方法二:直接利用模板语法即可
      

 data:{'username':'','csrfmiddlewaretoken':'{
  { csrf_token }}'},


    方法三:通用方法(js脚本)CV大法即可


    更多详情请见: https://docs.djangoproject.com/en/1.11/ref/csrf/


function getCookie(name) {
    var cookieValue = null;
    if (document.cookie && document.cookie !== '') {
        var cookies = document.cookie.split(';');
        for (var i = 0; i < cookies.length; i++) {
            var cookie = jQuery.trim(cookies[i]);
            // Does this cookie string begin with the name we want?
            if (cookie.substring(0, name.length + 1) === (name + '=')) {
                cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                break;
            }
        }
    }
    return cookieValue;
}
var csrftoken = getCookie('csrftoken');
 
 
function csrfSafeMethod(method) {
  // these HTTP methods do not require CSRF protection
  return (/^(GET|HEAD|O
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值