首页 > 编程语言 >Python pickle解压时可能存在安全风险

Python pickle解压时可能存在安全风险

时间:2024-11-08 08:57:50浏览次数:1  
标签:解压 name Python reduce module E5% pickle

Python pickle解压时可能存在安全风险

https://www.codebonobo.tech/post/15#Python%20pickle%E8%A7%A3%E5%8E%8B%E6%97%B6%E5%8F%AF%E8%83%BD%E5%AD%98%E5%9C%A8%E5%AE%89%E5%85%A8%E9%A3%8E%E9%99%A9

   

如果解压对像中有重构的reduce操作, pickle.loads时会执行reduce方法中的内容.

比如:

import io
import os
import pickle

class BadCode(object):
    def __reduce__(self):
        return (os.system, ('echo fuckyou!',))


bc = BadCode()

bbb = pickle.dumps(bc)
pickle.loads(bbb)

 

限制方法, 重载一下Unpicke方法, 只解压特定类型的对像.

 

class RestrictedUnpickler(pickle.Unpickler):
    def find_class(self, module, name):
        print(module, name)
        if module == "builtins" and name in {"str", "list", "dict", "set", "int", "float", "bool"}:
            return getattr(__import__(module), name)
        raise pickle.UnpicklingError(f"global '{module}.{name}' is forbidden")
    def load_reduce(self):
        # 禁止使用 reduce
        raise pickle.UnpicklingError("reduce() is not allowed")

def restricted_loads(s):
    return RestrictedUnpickler(io.BytesIO(s)).load()


ok = restricted_loads(bbb)

print('ok: ',ok)

 

标签:解压,name,Python,reduce,module,E5%,pickle
From: https://www.cnblogs.com/JiangOil/p/18534399

相关文章

  • Python中配置环境变量的几种姿势
    大家好,欢迎来到Crossin的编程教室!在运行一个项目的时候,我们经常会遇到设置不同环境的需求,如设置是开发环境、测试环境还是生产环境,或者在某些设置里面可能还需要设置一些变量开关,如设置调试开关、日志开关、功能开关等等。这些变量其实就是在项目运行时我们给项目设置......
  • 采用 Python 机器学习预测足球比赛结果
    足球是世界上最火爆的运动之一,世界杯期间也往往是球迷们最亢奋的时刻。比赛狂欢季除了炸出了熬夜看球的铁杆粉丝,也让足球竞猜也成了大家茶余饭后最热衷的话题。甚至连原来不怎么看足球的人,也是暗中努力恶补了很多足球相关知识,想通过赛事竞猜先赚一个小目标。今天我们将介绍......
  • python验证码滑块图像识别
    文章目录1、案例图片1、需求说明2、代码实现总结1、案例图片1、需求说明python3.10,写一个滑块验证码的自动化程序。需要一个opencv的函数,能准确的计算,在这同一张图片上,滑块形状和缺口形状的坐标位置及两个形状之间在X轴上的距离。请注意,没有单独的滑块图片,而是......
  • 使用Python将EPUB电子书网文主角换成自己
    文章目录使用Python将EPUB电子书网文主角换成自己EPUB电子书准备工作操作步骤Python实现代码代码解析使用Python将EPUB电子书网文主角换成自己最近看网文小说,想到一个有意思的东西,为什么不把网文主角换成自己的名字,这样看起来不更有沉浸感,更加有代入感。于是便从e......
  • python基础——04数据类型(元组,集合,字典)
    一、元组(tuple)1.1什么是元组元组和列表相似,但元组的元素放在()里面。t=(1,2,3,4,5)print(type(t))#<class'tuple'>t1=('hello')#<class'str'>这不是元组t2=('hello',)#<class'tuple'>print(type(t1),type(t2)......
  • python小练习——条件语句if
    if语句是Python中进行条件判断的基础工具,通过它可以轻松实现逻辑选择和流程控制。掌握好if语句的使用方法,对编写高效、灵活的程序至关重要。今天我们通过七个简单的题目来熟悉一下Python中的if条件语句。1、从键盘输入年龄,判断是否大于等于18岁,如果满足就输出“已成......
  • 图像去雾+图像去雨(matlab+python)
    看到许多小伙伴想进行图像去雨,图像去雾的任务,由于以前进行了此类项目,所以在此书写博客进行交流。#去雨前言从静止图像中去除雨水是一项复杂且具有挑战性的任务。雨滴仅影响图像的很小区域,因此导致确定应考虑哪个区域和不应考虑哪个区域的混乱。在本文中,已经实现了一种新......
  • 免费送源码:python+Django+MySQL Django实验室管理系统 计算机毕业设计原创定制
    摘 要本论文主要论述了如何使用python语言、Django框架开发一个实验室管理系统,本系统将严格按照软件开发流程,进行各个阶段的工作,面向对象编程思想进行项目开发。在引言中,作者将论述该系统的当前背景以及系统开发的目的,后续章节将严格按照软件开发流程,对系统进行各个阶段分......
  • 使用python中的pygame简单实现飞机大战游戏
    前言在这个教程中,我们将使用Python的Pygame库来开发一个简单的飞机大战游戏。Pygame是一个开源的Python库,用于编写视频游戏。它包括计算机图形和声音库,设计目的是为游戏开发者提供一个简单易用的接口。一、环境准备在开始编码之前,请确保已经安装了Python和Pyga......
  • 三十四、Python基础语法(文件操作-上)
    一、介绍文件:可以储存在长期储存设备上的一段数据,在计算机储存的数据都是二进制的形式储存的,我们用软件打开文件不是看见0和1是因为软件会自动将二进制数据进行转换。二、文件操作1.打开文件打开文件:文件是在硬盘中储存的,打开文件可以理解为将硬盘中文件加载到内存中,在pyth......