CSRF (Cross Site Request Forgery)
### 1.`CSRF(Cross Site Request Forgery)`攻击:
1. 跨站请求伪造。在用户不知情的情况下以用户的名义向有`CSRF`漏洞的网站发起攻击,有很大的危害性。
2. 预防:在`header`中添加一个随机`token`,和`cookie`中的`csrftoken`进行比较,如果不相同,则表示该请求是`CSRF`攻击。
3. 原理:网站可以伪造`header`中的东西,但不能读`cookie`中的数据,而`token`是个随机数,所以伪造的`token`很难跟`cookie`中的`csrftoken`保持一致。 ###body 里面的csrf值 必须和cookie里面的值相等,这样才认为是合法的,
'''原理''':
请求一个页面
服务器在cookie中设置csrftoken 并且返回给客户
下次再次请求,用户将cookie里面的csrftoken携带给服务器,服务器将,body中的csrftoken提交上去进行对比
表单的每一次都会设置cookie
### 2.`XSS(Cross Site Script)`攻击:
1. 攻击形式:是指攻击者向右`XSS`漏洞的网站提交数据从而发起脚本攻击,有`XSS`漏洞的网站没有对该数据进行转义。
2. 对用户提交的数据都进行转义。
### 3. 中间件(Middleware):
1. 什么是中间件:
* 中间件是在`request`和`view`之间以及`view`到`response`之间做的一些处理。
* 使用中间件要注意放的顺序。
2. 自定义中间件:
创建一个专门存放中间件的文件夹,然后在里面包含一个`__init__.py`文件用来表示这是一个包,然后创建一个中间件的文件,用来存放指定的中间件:
python
函数形式:
def simple_middleware(get_response):
# 这个中间件初始化的代码
def middleware(request):
# request到达view的执行代码
response = get_response(request)
# response到达浏览器的执行代码
return response
return middleware
python
类的形式:
class SimpleMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
# 这个中间件初始化的代码
def __call__(self, request):
# request到达view之前执行的代码
response = self.get_response(request)
# response到达用户浏览器之前执行的代码
return response
定义好以后,要放在`settings.py`的`MIDDLEWARE`中就可以使用了。
1.10之前是使用类的形式:
python
class UserMiddleware(MiddlewareMixin):
def process_request(self,request):
专门处理请求的
userid = hyauth.getuid(request)
userModel = models.FrontendUserModel.objects.filter(pk=userid)
if userModel:
setattr(request,'frontuser',userModel)
def process_response(request, response):
专门用来处理响应的
from books.models import UserModel
def UserMiddleWare(get_response):
def middleware(requests):
# requests ----> views
username = UserModel.objects.all().first()
setattr(requests,'myuser',username.name)
response = get_response(requests)
# views ----> response
return response
return middleware
中间件,顾名思义,就是处在中间的一些软件。比如匹配到了URL,但是还没有执行view函数的时候,这个时候可以执行一些代码,这个代码就是中间件。Django已经内置了许多中间件,这些中间件已经可以满足90%以上的需求,如果你还不够,还可以定义自己的中间件,以下将对Django自带的中间件进行详细解释
:
django.middleware.security.SecurityMiddleware:一些安全设置,比如XSS脚本过滤。
django.contrib.sessions.middleware.SessionMiddleware:session支持中间件,加入这个中间件,会在数据库中生成一个django_session的表。
django.middleware.common.CommonMiddleware:通用中间件,会处理一些URL,比如baidu.com会自动的处理成www.baidu.com。比如/blog/111会处理成/blog/111/自动加上反斜杠。
django.middleware.csrf.CsrfViewMiddleware:跨域请求伪造中间件。加入这个中间件,在提交表单的时候会必须加入csrf_token,cookie中也会生成一个名叫csrftoken的值,也会在header中加入一个HTTP_X_CSRFTOKEN的值来放置CSRF攻击。
django.contrib.auth.middleware.AuthenticationMiddleware:用户授权中间件。他会在每个HttpRequest对象到达view之前添加当前登录用户的user属性,也就是你可以在view中通过request访问user。
django.contrib.messages.middleware.MessageMiddleware:消息中间件。展示一些后台信息给前端页面。如果需要用到消息,还需要在INSTALLED_APPS中添加django.contrib.message才能有效。如果不需要,可以把这两个都删除。
django.middleware.clickjacking.XFrameOptionsMiddleware:防止通过浏览器页面跨Frame出现clickjacking(欺骗点击)攻击出现。
Django入门七之 (中间件)
最新推荐文章于 2024-04-23 07:00:00 发布