SECRET_KEY的重要性
SECRET_KEY作用
本质上是一个加密盐
SECTET_KEY 在 django在加密,安全方面都有很突出的用处
json object的签名
加密函数中必不可少的,密码重置,表单提交,csrf的key,session数据等等都是需要SELECT_KEY的
这里面就要重点讲到session的问题,在这里使用不当就会导致攻击代码执行
settings的session设置
django默认存储session到数据库中,但是可能会比较慢,就会使用到缓存,文件,还有cookie等方式
如果采用了cookie机制,settings配置如下:
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
版本问题:django 1.6以下
在django1.6以下,session默认是采用pickle执行序列号操作
在1.6及以上版本默认采用json序列化。代码执行只存在于使用pickle序列号的操作中。
session处理流程
可以简单的分为两部分
process_request负责选择session引擎
process_response初始化cookie数据
代码
class SessionMiddleware(object):def process_request(self, request):engine = import_module(settings.SESSION_ENGINE)session_key = request.COOKIES.get(settings.SESSION_COOKIE_NAME, None)request.session = engine.SessionStore(session_key)
process_response 是用来处理 返回给用户的信息,这包括有关cookie的一些信息,比如修改过期时间等等。
在将session存入缓存后,可能在某个操作中会用到session信息,这个时候就会通过反序列化操作从缓存中取SECRET__KEY
如果反序列化引擎是采用pickle机制的话就有可能存在攻击代码执行。
反序列化的代码位于django.core.signing.py中,这个模块主要是一些签名,加解密操作,同时也包含序列化和反序列化,默认采用JSON引擎
反序列化loads的代码:
def loads(s, key=None, salt='django.core.signing', serializer=JSONSerializer, max_age=None):"""Reverse of dumps(), raises BadSignature if signature fails"""base64d = smart_str(TimestampSigner(key, salt=salt).unsign(s, max_age=max_age))decompress = Falseif base64d[0] == '.':# It's compressed; uncompress it firstbase64d = base64d[1:]decompress = Truedata = b64_decode(base64d)if decompress:data = zlib.decompress(data)return serializer().loads(data)
- 其攻击方式为:
-
首先泄露了SECRET_KEY
其次session引擎采用了signed_cookies
之后就是根据SECRET_KEY反序列化得到所想要得到的。。。
注:
django版本小于1.6即存在攻击代码执行问题。
同样的问题也存在于python的其他web框架中,如flask,bottle。
SECRET_KEY的重要性相关推荐
- 残差复合正态分布的重要性
如果结果残差不是正态分布 说明用线性回归来拟合数据是不合适的 可能是非线性回归 这里的类是对应因变量的取值 如果是连续型的那就只有一类 销售量 如果是离散型的那就有几类就假设几类 黑白球 当总体只有一 ...
- 勇敢的交流者在敏捷组织中的重要性
在Scrum做任何事都需要把一套价值作为团队流程和交互的基础.勇敢正是其中之一.因为在scrum中所有人保持着团队协作,每个成员都能够感受到团队的支持.这让他们有勇气去承担更加艰巨的挑战. \ Dan ...
- python随机森林筛选变量_变量重要性随机森林在R中是否有类似Python的rfpimp来分组共线变量...
早上好 我在R(randomForest,caret)中的随机林实现中使用置换重要性对变量进行排序.所有变量都是连续的,结果是明确的.在 为了处理共线特性Terence Parr,Jeremy How ...
- R语言编写自定义函数、评估回归模型预测变量的相对重要性(Relative importance)、通过在所有可能的子模型中添加一个预测变量而获得的R方的平均增加、评估预测变量的重要度、并通过点图可视化
R语言编写自定义函数.评估回归模型预测变量的相对重要性(Relative importance).通过在所有可能的子模型中添加一个预测变量而获得的R方的平均增加.来评估预测变量的重要程度.并通过点图可 ...
- 偏依赖图(Partial Dependence Plots)是什么?排列重要性(Permutaion Importance)是什么?如何解读?有什么意义?
偏依赖图(Partial Dependence Plots)是什么?排列重要性(Permutaion Importance)是什么?如何解读?有什么意义? 目录 偏依赖图(Partial Depend ...
- 特征选择之嵌入法、嵌入法、排列重要性
特征选择之嵌入法.嵌入法.排列重要性 目录 特征选择之嵌入法.嵌入法.排列重要性 嵌入法 排列重要性 嵌入法
- 特征重要性、特征集成+FeatureUnion、特征选择变换器+ColumnTransformer、标签特征变换+TransformedTargetRegressor、特征质量、自动学习数据中的特征
特征重要性.特征集成+FeatureUnion.特征选择变换器+ColumnTransformer.标签特征变换+TransformedTargetRegressor.特征质量.自动学习数据中的特征 ...
- 基于模型(Model-based)进行特征选择(feature selection)并可视化特征重要性(feature importance)
基于模型(Model-based)进行特征选择(feature selection)并可视化特征重要性(feature importance) sklean 中的 SelectFromModel进行特 ...
- 随机森林RF中的特征重要性的计算公式VIM
特征重要性评估 现实情况下,一个数据集中往往有成百上前个特征,如何在其中选择比结果影响最大的那几个特征,以此来缩减建立模型时的特征数是我们比较关心的问题.这样的方法其实很多,比如主成分分析,lasso ...
最新文章
- java期_java日期 时间
- C++成员变量指针和成员函数指针【The semantics of funcitons】
- kafka channle的应用案例
- java大乘期(33)----java进阶(springboot基础(1)----springboot基本概念)
- 分区报无效的参数_西门子70系列变频器55KW上电就报F002故障维修
- [机器学习]AutoML---谷歌开源AdaNet:基于TensorFlow的AutoML框架
- servlet面试常考 (转载)
- [蓝桥杯2018初赛]递增三元组-双指针,枚举,排序,前缀和
- Python入门-行和缩进
- commit git 删除文件夹_Git-git删除文件夹/文件(删除/不删除本地文件/文件夹)
- 打不过 Chrome 的 Firefox,我为什么要选择?
- 2019届[月考01-03]高三理科数学试题参考答案
- oracle函数 power(x,y)
- paip.lucene 4.3 中文语义搜索最佳实践
- 管理小故事100例1
- 配置路由器console接口密码和vty接口密码
- raspberry(树莓派)的简介及实验
- [AHK]给PPT插入图片
- 360P2建html网站,如何自己建网站
- java开发的公文管理系统源代码_基于jsp的公文管理系统-JavaEE实现公文管理系统 - java项目源码...