博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django---csrf_token
阅读量:5092 次
发布时间:2019-06-13

本文共 1859 字,大约阅读时间需要 6 分钟。

1、csrf_token的作用

django为用户实现防止跨站请求伪造的功能,通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。

2、设置csrf_token

对于django中设置防跨站请求伪造功能有分为全局和局部。

(1)全局

settings.py文件中:

MIDDLEWARE=[   ......   django.middleware.csrf.CsrfViewMiddleware ]

若要取消csrf认证,就将该行注释掉即可(用postman模拟post请求时,需要将该行注释掉)

(2)局部

① FBV模式:

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

@csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件。

@csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件。

只需要在函数前加上相应的装饰器即可

② CBV模式:

  第一种方式:

  在dispatch方法前加装饰器@method_decorator(csrf_exempt)或@method_decorator(csrf_protect)

class StudentsView(View):    @method_decorator(csrf_exempt)    def dispatch(self, request, *args, **kwargs):        return super(StudentsView,self).dispatch(request,*args, **kwargs)    def get(self,request,*args,**kwargs):        return HttpResponse('GET')    def post(self,request,*args,**kwargs):        return HttpResponse('POST')    def delete(self,request,*args,**kwargs):        return HttpResponse('DELETE')

 

  第二种方式:

  在类前面加装饰器@method_decorator(csrf_exempt,name='dispatch')或@method_decorator(csrf_protect,name='dispatch')

@method_decorator(csrf_exempt,name='dispatch')class StudentsView(View):    def get(self,request,*args,**kwargs):        return HttpResponse('GET')    def post(self,request,*args,**kwargs):        return HttpResponse('POST')    def delete(self,request,*args,**kwargs):        return HttpResponse('DELETE')

 

3、原理

在用户访问django的可信站点时,django反馈给用户的表单中有一个隐含字段csrftoken,这个值是在服务器端随机生成的,每一次提交表单都会生成不同的值。当用户提交django的表单时,服务器校验这个表单的csrftoken是否和自己保存的一致,来判断用户的合法性。当用户被csrf攻击从其他站点发送精心编制的攻击请求时,由于其他站点不可能知道隐藏的csrftoken字段的信息这样在服务器端就会校验失败,攻击被成功防御,这样就能避免被 CSRF 攻击。

csrf在ajax提交的时候通过请求头传递的给后台的;csrf在前端的key为:X-CSRFtoken,到后端的时候django会自动添加HTTP_,最后为HTTP_X_CSRFtoken
csrf在form中提交的时需要在前端form中添加{%csrftoken%},form中会自动生成一个隐藏的input

 

转载于:https://www.cnblogs.com/sjx6688/p/10059379.html

你可能感兴趣的文章
MYSQL获取自增ID的四种方法
查看>>
selenium webdriver如何操作select下拉框
查看>>
Js获取当前日期时间及其它操作(转)
查看>>
【转载】法线贴图Nomal mapping 原理
查看>>
Java之戳中痛点 - (6)避免类型自动转换,例如两个整数相除得浮点数遇坑
查看>>
Linux下MySQL的简单使用(一)
查看>>
python3 用递归方法列出所有目录与文件
查看>>
SQL ISNULL 函数
查看>>
Hibernate简介
查看>>
Python自学之乐-python中break continue exit() pass浅析
查看>>
局域网从另一台电脑copy文件(Linux系统下)
查看>>
FC和SCSI
查看>>
VC2010常见问题的解决方案
查看>>
超级详细Tcpdump 的用法
查看>>
程序员的思维修炼
查看>>
display:none和visibility:hidden的区别
查看>>
HDOJ---1232 畅通工程[并查集]
查看>>
Python学习路程-常用设计模式学习
查看>>
[JOYOI1326] 剑人合一
查看>>
[JZOJ100047] 【NOIP2017提高A组模拟7.14】基因变异
查看>>