django如何阻止CSRF的使用
创始人
2024-04-11 22:48:24

前言

CSRF 是指跨站请求伪造,跨站请求伪造的问题在于,服务器信任来自客户端的数据

如果没有 CSRF 面临的风险是:

跨站请求伪造是指攻击者通过HTTP请求江数据传送到服务器,从而盗取回话的cookie。盗取回话cookie之后,攻击者不仅可以获取用户的信息,还可以修改该cookie关联的账户信息。

Django中常规使用Csrf

一般是和Form表单结合使用。

在Form 表单中添加 {% csrf_token %} 可以生产一个隐藏的input标签,含有csrf 随机token串,如果不放这个,会403 Forbidden 报错

具体使用详见 【Django中的CSRF使用及ajax请求接口时问题总结】

该链接文章也介绍如何在在Ajax中使用CSRF

Django如何实现的呢?

1、通过全局配置的中间件

django.middleware.csrf.CsrfViewMiddleware

2、可以局部在某个view视图上设置

from django.views.decorators.csrf import csrf_protect@csrf_project
def index(request):pass

注意: 这个装饰器和中间件不冲突,如果注释中间件,它也是生效的

Django中如何禁用CSRF

1、注释掉settings.py中MIDDLEWARE中配置的

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

当然这里注释是全局性的,但是局部的想要开启,可以通过上面的 csrf_project 装饰器实现

2、csrf_project 局部开启,对应的是 csrf_exempt 局部禁用

from django.views.decorators.csrf import csrf_protect, csrf_exempt@csrf_exempt
def index(request):pass

上面是针对函数式视图(FBV)添加,类视图(CBV)有所不同

Django 类视图禁用CSRF

在类视图上禁用CSRF ,核心是在dispatch 方法上使用 csrf_exempt, 可以直接使用,也可以使用 method_decorator 装饰器作用在类上实现

Demo演示为

from django.views import View
from django.utils.decorators import method_decorator 
from django.views.decorators.csrf import csrf_protect, csrf_exemptclass IndexView(View):@csrf_exemptdef dispatch(self, request):passdef get(self, reqeust):passdef post(self, reqeust):pass

除了在类的方法上添加之外,也可以直接在类上添加,然后通过 method_decoratorname 属性执行方法名

@method_decorator(csrf_exempt, name='dispatch')
class IndexView(View):@csrf_exempt

通过中间件白名单实现禁用

我们知道中间件是在Django的request和response过程中对请求进行梳理的

所以这里撰写一个中间件,如果对应的白名单 中存在URL,则对其进行CSRF的禁用

# blog/middleware.py
import re
from django.conf import settings
from django.utils.deprecation import MiddlewareMixinclass BlogIgnoreCsrfMiddleware(MiddlewareMixin):def process_request(self, request, *args, **kwargs):if hasattr(settings, 'URL_IGNORE_CSRF_LIST'):url_ignore_list = settings.URL_IGNORE_CSRF_LISTelse:url_ignore_list = []for u in url_ignore_list:if re.match(u, request.path):print(request.path, u)request.csrf_processing_done = True

然后再 settings.py 中配置

MIDDLEWARE = [# 放到第一个位置'blog.middleware.BlogIgnoreCsrfMiddleware',... ...
]URL_IGNORE_CSRF_LIST = [r'^/blog/post/[0-9]{1,5}/like/',]

然后请求博客的点赞喜欢功能,发现是可以的

But: 不建议禁用CSRF 哦~

如果是Form表单提交,一定要加 {% csrf_token %} 如果是ajax 提交,就可以参考 【Django中的CSRF使用及ajax请求接口时问题总结】 来实现


原文链接 http://newblog.colinspace.com/blog/post/9/

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...