1.csrf相关

1.跨站请求伪造

跨站请求伪造:当用户访问一个网站的时候,搭建一个与用户想要访问的网站一摸一样的网站,使假网站的提交地址与站网站的一致,这时候用户访问的是假网站,但是操作却是在真网站上进行反馈的,例如银行网站。

原理:后端只能识别post请求,但是不能识别是不是自己网站返回的post请求

注意点:

1.真假网站的页面一致

2.提交请求的form表单中的action指向正确的网页地址,在提交的时候让后端以为是真网页提交过来的数据

3.在假网站中做一些操作,使用户在进行操作的时候默认的是假网站的设置提交的

2.跨站请求伪造问题解决

思路:只处理自己的网站发送过来的POST请求

解决方式:token

1.token

token的特性是,

发送请求的时候:网站返回给用户一个form表单的时候,会自动添加一个token值发送到前端的页面中,这个token值是唯一的,

提交信息的时候:当用户将信息完善之后再进行提交的时候,中间件会自动校验是不是之前发送过去的token的值,如果是就进行接收,如果不是的话就不进行接收,会提示一个403报错。

当你对这个网站进行重新请求的时候,会重新发送一个token的值,再不同的浏览器上进行操作会产生不同的token值。这样可以确保数据的安全性。

使用方式:

在form表单的第一行写上代码

{% csrf_token %}

2.ajax提交

ajax提交的时候,也需要进行一个token校验,使用ajax提交的时候要注意如果没有将token值携带,也会发生403报错。以下是三种解决方法:

第一种:

先在页面任意的位置上书写{% csrf_token %}

然后在发送ajax请求的时候 通过标签查找获取随机字符串添加到data自定义对象即可

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

第二种:

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

第三种:(通用,也适合前后端分离)

利用之前写好的脚本文件

1.新建一个js文件放在static文件夹下,

2.将js文件导入,就可以了,不需要写任何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|OPTIONS|TRACE)$/.test(method));
} $.ajaxSetup({
beforeSend: function (xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", csrftoken);
}
}
});

3.crsf中间件

在提交post请求的时候,如果没有设置csrf_token,是不能通过中间件的,

解决方法:

1.注释中间件

'django.middleware.csrf.CsrfViewMiddleware',

2.设置crsf

{% csrf_token %}

4.csrf装饰FBV的装饰器

在执行post请求的时候,如果不想某个视图函数不执行crsf中间件校验的话,可以使用crsf装饰器进行装饰

导入

from django.views.decorators.csrf import csrf_exempt,csrf_protect

不校验csrf

@csrf_exempt  # 在进行post请求的时候不进行校验

校验csrf

@csrf_protect  # 在进行post请求的时候校验

对那一个视图函数进行装饰,该视图函数多对应的html页面在进行post请求访问的时候就会执行装饰的操作。

对于提交的get请求进行访问是不会进行csrf校验的。

5.csrf装饰CBV的装饰器

csrf_exempt 装饰CBV的方法

from django.utils.decorators import method_decorator    # 导入
from django.views.decorators.csrf import csrf_exempt,csrf_protect 方法一:
@method_decorator(csrf_exempt,name='dispatch')
class MyIndex(views.View): 方法二:
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request,*args,**kwargs)

csrf_exempt这个装饰器只能给dispatch装才能生效

csrf_exem 装饰CBV的方法

csrf_protect方式全都可以 跟你普通的装饰器装饰CBV一致

from django.utils.decorators import method_decorator    # 导入
from django.views.decorators.csrf import csrf_exempt,csrf_protect 方法一:
@method_decorator(csrf_protect,name='post') # 可以
class MyIndex(views.View): 方法二:
@method_decorator(csrf_protect)
def dispatch(self, request, *args, **kwargs):
return super().dispatch(request,*args,**kwargs) 方法三:
@method_decorator(csrf_protect) # 可以
def post(self,request):

6.django settings源码刨析

django有两个配置文件:

一个是暴漏给用户可以配置的,一个是内部全局的(用户配置了就使用用户的,用户没有配置就使用默认的

先加载全局配置,给对象设置属性,

再加载局部配置,再给对象设置,

一旦有重复的项,后者覆盖前者

2.auth模块

1.创建超级用户

方式一:

1.运行tools >>>  Run manage.py Task
2.输入:createsuperuser
3.邮箱可以不用输入
4.输入密码,确认密码,最少为8位

注意:创建的超级用户账户会自动添加在auth_user表中,密码会自动使用sha256进行加密

方式二:

from django.contrib.auth.models import User

User.objects.create_superuser(username=username,password=password,email=123@qq.con)

2.创建用户

from django.contrib.auth.models import User  # 导入

User.objects.create_user(username=username,password=password)

注意:auth_user中不能存在同名的用户,密码自动加密

3.校验用户名和密码是否正确

from django.contrib import auth

user_obj = auth.authenticate(request,username=username,password=password)  # 返回是一个对象

注意:如果用户不存在或者密码错误,会返回一个None,用户名和密码都要输入

4.保存用户登录状态

from django.contrib import auth

auth.login(request,user_obj)
只有保存了用户状态才会产生session

注意:只要执行了保存用户登陆状态,之后在任意位置,只要你能拿到request,你就可以通过request.user获取当前登录的用户对象

5.判断当前用户是否登录

request.user.is_authenticated()     # 返回True或False

6.校验原密码是否正确

request.user.check_password(old_password)   # 返回True或False

7.修改密码

request.user.set_password(new_password)

request.user.save()    # 一定要保存

8.注销

auth.logout(request)

9.校验用户登录的登录装饰器

from django.contrib.auth.decoratros import login_required

局部配置:
@login_required(login_url='/login/')
def index(request):
pass 全局配置
1.在settings中配置文件: LOGIN_URL='/login/'
@login_required
def index(request):
pass

如果全局配置了,局部也配置了,以局部为准

10.auth扩展表

方式一

利用一对一外键字段关系
class UserDetail(models.Model):
phone = models.BigIntegerField()
user = models.OneToOneField(to='User')

方式二

利用继承关系
from django.contrib.auth.models import AbstractUser
class Userinfo(AbstractUser):
phone = models.BigIntegerField()
register_time = models.DateField(auto_now_add=True) # 一定要注意 还需要去配置文件中配置
AUTH_USER_MODEL = 'app01.Userinfo' # 应用名.表名
# 写完之后 之前所有的auth模块功能全都以你写的表为准,可以继续使用

Django --- csrf相关,auth相关的更多相关文章

  1. 1205 CSRF跨站请求与django中的auth模块使用

    目录 今日内容 昨日回顾 基于配置文件的编程思想 importlib模块 简单代码实现 跨站请求伪造csrf 1. 钓鱼网站 如何实现 模拟该现象的产生 2. 解决问题 解决 {% csrf_toke ...

  2. django 之csrf、auth模块及settings源码、插拔式设计

    目录 基于django中间件拷贝思想 跨站请求伪造简介 跨站请求伪造解决思路 方式1:form表单发post请求解决方法 方式2:ajax发post请求解决方法 csrf相关的两个装饰器 csrf装饰 ...

  3. 黑马lavarel教程---4、csrf验证及相关

    黑马lavarel教程---4.csrf验证及相关 一.总结 一句话总结: csrf验证就像短信验证码那样验证用户身份,这个验证是为了验证是本站的操作,用的是一个token字符串,外站如果有了这个to ...

  4. Django框架04 /模板相关、别名/反向解析/路由分发

    Django框架04 /模板相关.别名/反向解析/路由分发 目录 Django框架04 /模板相关.别名/反向解析/路由分发 1. 语法 2. 变量/万能的点 3 . 过滤器 4. 标签Tags 5. ...

  5. Django框架03 /视图相关

    Django框架03 /视图相关 目录 Django框架03 /视图相关 1. 请求相关 2.响应相关 3.FBV和CBV 视图(视图函数和视图类) 3.1 类视图 CBV 3.2 视图函数 FBV ...

  6. CSRF与auth模块

    目录 一.模拟实现中间件的编程思想 (一)impotlib模块 (二)实现功能的配置使用 二.跨站请求伪造CSRF (一)由来 (二)form表单的CSRF (三)ajax中的CSRF (1)通过da ...

  7. (day59)十一、CSRF、Auth模块、impotlib模块、settings源码

    目录 一.模拟实现中间件的编程思想 (一)impotlib模块 (二)实现功能的配置使用 二.跨站请求伪造CSRF (一)由来 (二)form表单的CSRF (三)ajax中的CSRF (1)通过da ...

  8. Django CBV加装饰器、Django中间件、auth模块

    一. CBV加装饰器 在视图层中,基于函数的视图叫FBV(function base views),基于类的视图叫CBV(class base views).当需要用到装饰器时,例如之前的基于Cook ...

  9. django csrf 处理简介

    CSRF 是什么 CSRF 即跨站请求伪造,在用户不知情的情况下向有漏洞的网站发送请求.例如有正常网站A,恶意网站B, 用户若对A B 两个网站都有访问,B 可能伪造请求到 A,比如提交表单.至于具体 ...

随机推荐

  1. 15 Filter过滤器和Listener监听器

    1.Filter:过滤器 (1) 概念:生活中的过滤器:净水器,空气净化器,土匪.web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能.过滤器的作用:一般用于完成通用的 ...

  2. 【C#】上机实验五

    .设计一个控制台应用程序,定义一个MyPoint类,该类能表示二维平面空间的点,完成点类及运算符重载等相关功能.具体要求如下: ()MyPoint类中定义2个私有字段x和y及相应的构造函数. ()My ...

  3. 在jenkins中使用shell命令推送当前主机上的docker镜像到远程的Harbor私有仓库

    1.jenkins主机上的docker配置 先在Jenkins主机的docke上配置上Harbor私有仓库地址 cat /etc/docker/daemon.json { "insecure ...

  4. 系统开启UAC情形下开机自启动程序如何以管理员权限启动

    系统开启UAC情形下开机自启动程序如何以管理员权限启动 题记:本文阐述的是在Windows系统开启UAC的情况下,开机自启动程序需要以管理员权限启动, 系统弹出UAC对话框,用户同意的情形下启动程序 ...

  5. Java JDK1.8源码学习之路 2 String

    写在最前 String 作为我们最常使用的一个Java类,注意,它是一个引用类型,不是基本类型,并且是一个不可变对象,一旦定义 不再改变 经常会定义一段代码: String temp = " ...

  6. Java开发环境搭建(一)

    一.JDK与JRE JDK:Java Development Kit,Java开发工具包,是给开发人员使用的,其中包含了Java的开发工具,如java.javac.jar等命令,同时也包含了JRE. ...

  7. Synopsys DC综合脚本示例

    #****************************************************************************** # File : syn_example ...

  8. Jmeter学习笔记(十一)——定时器

    默认情况下,Jmeter线程在发送请求之间没有间歇.不设置定时器,短时间内会产生大量访问请求,导致服务器被请求淹没,利用Jmeter进行压测时,一般会和定时器一起,控制请求的吞吐量和并发数. 一.定时 ...

  9. 朴素贝叶斯算法源码分析及代码实战【python sklearn/spark ML】

    一.简介 贝叶斯定理是关于随机事件A和事件B的条件概率的一个定理.通常在事件A发生的前提下事件B发生的概率,与在事件B发生的前提下事件A发生的概率是不一致的.然而,这两者之间有确定的关系,贝叶斯定理就 ...

  10. 部署python项目到linux服务器

    最近用Python写了个外挂,需要部署到Linux环境的服务器上,由于之前本地开发时使用virtualenv,使用这个虚拟环境有个好处是项目中依赖的库不会是全局的,只在当前项目的目录下有效,因为我是M ...