零、绪论

python这里以python2.7为研究对象,对应的我们会简要说明一下python3,其他指与反序列化无关的安全隐患问题。

一、标准输入输出:

1、首先,我们来看下标准输入输出

 import sys
#常用参数:
sys.stdin.read()
sys.stdin.readline()
sys.stdin.readlines()
sys.stdin.write()
sys.stdin.writelines()
sys.stdin.flash()
sys.stdin.close()
sys.stdout.read()
sys.stdout.readline()
sys.stdout.readlines()
sys.stdout.write()
sys.stdout.writelines()
sys.stdout.flash()
sys.stdout.close()

本质上都是buffer,对于判断否有数据可以使用isatty()

打印到文件,可以使用sys.stdout=fd

2、测试一段代码:

 import os
print input()

你输入os.system('id')就会出结果,不信的话可以尝试哦(对于python2.x)。

你可以查看help(input)

'''
Help on built-in function input in module __builtin__: input(...)
input([prompt]) -> value Equivalent to eval(raw_input(prompt)).
(END)
'''

所以使用raw_input 就可以避免这个问题,这也是问啥python2.7推荐使用raw_input的原因,raw_input基本相当于sys.stdin.readline().strip(),也就是去掉了最后的换行符号。

python3取消了raw_input,input等于python2.7的raw_input

二、assert代码执行:

 assert isinstance(os.system(id),int)

assert 后面应该是一个判断,本质上是assert true 或者assert false(这种情况会raise AssertError)

但是咱这个判断里面可以做到代码执行,当然通过代码执行也可以做到命令执行啦。

所以assert一般只能用于测试,不能再发布版本中使用。

三、模块注入、导入代码执行、猴子补丁

1、导入代码执行很简单,就是你在引入的模块中定义执行的代码在import语句中会执行,但不包括if __name__ == "__main__"中的代码。

2、另外在命令行输入中检查到python -/-c/-m等都会导致当前目录加入sys.path

3、猴子补丁是指动态修改程序指令

 __builtins__.False, __builtins__.True = True, False
shutil.copy.__code__ = (lambda src, dst: dst).__code__
x_obj.__class__ = Y

以上代码都动态改变了程序的指令结果,尤其是第一行,直接把true和false都反转了,当然在python3后这第一行是无法运行的。

python的其他安全隐患的更多相关文章

  1. centos 源码安装python

    一.准备环境 首先在官网下载想要的python对应版本http//www.python.org/downloads/source 下载tgz就可以了.文件有两种 1,Python-版本号.tgz(解压 ...

  2. python开发_xml.etree.ElementTree_XML文件操作_该模块在操作XML数据是存在安全隐患_慎用

    xml.etree.ElementTree模块实现了一个简单而有效的用户解析和创建XML数据的API. 在python3.3版本中,该模块进行了一些修改: xml.etree.cElementTree ...

  3. 字符型图片验证码识别完整过程及Python实现

    字符型图片验证码识别完整过程及Python实现 1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...

  4. python 学习笔记十七 django深入学习二 form,models

    表单 GET 和 POST 处理表单时候只会用到GET 和 POST 方法. Django 的登录表单使用POST 方法,在这个方法中浏览器组合表单数据.对它们进行编码以用于传输.将它们发送到服务器然 ...

  5. Python线程通信

    subprocess 作用 模块用于生产新的进程,连接到其输入.输出.错误管道,并获取其返回值 1. 如何使用subprocess模块 启动子进程的推荐方法是使用以下方便功能. 对于更高级的用例,当这 ...

  6. python 继承中的super

    python继承中子类访问父类的方法(包括__init__)主要有两种方法,一种是调用父类的未绑定方法,另一种是使用super(仅仅对于新式类),看下面的两个例子: #coding:utf-8 cla ...

  7. Python之路【第十篇】Python操作Memcache、Redis、RabbitMQ、SQLAlchemy、

    Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...

  8. python模块名和文件名冲突解决

    对于python初学者,很容易练习到一个随机数生成的程序,代码如下: #!/usr/bin/python import random print(random.randint(12,20)) 这个小程 ...

  9. (转载)Linux 套接字编程中的 5 个隐患

    在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系统的标准特性.事实上,很难找到一种不支持 Sockets API 的现代语言.该 API 相当简单,但新的开 ...

随机推荐

  1. python split() 用法

    字符串的split用法 说明:Python中没有字符类型的说法,只有字符串,这里所说的字符就是只包含一个字符的字符串!!!这里这样写的原因只是为了方便理解,仅此而已. 由于敢接触Python,所以不保 ...

  2. jquery动态生成html代码 怎么 获取id 或 class

    动态创建的节点要用live方法加事件,语句要改为: $(“.del").live("click", function() {  alert("获取到了" ...

  3. Android中MVC、MVP、MVVM具体解释

    前言 今天有时间就刚好有想写关于这几个名词.对于我来说.事实上这么多名词.思想归根究竟就是要依据项目实际.人员配置来做合理优化,既不能纸上谈兵.又不能畏惧不前.那么合理分阶段架构和完好代码才是关键,本 ...

  4. HDU 5321 Beautiful Set 漂亮集合

    题意:给定一个集合,含有n个数.浙理工先生和杭电先生各自有计算这个集合漂亮值的方法. 浙理工先生的计算方法是:对于这个n个数的某个排列,此排列的漂亮值为这个排列全部的区间最大公约数之和.然后这个集合的 ...

  5. 使用 firewalld 构建 Linux 动态防火墙

    firewalld 是新一 Linux 代防火墙工具,它提供了支持网络 / 防火墙区域 (zone) 定义网络链接以及接口安全等级的动态防火墙管理工具.它也支持允许服务或者应用程序直接添加防火墙规则的 ...

  6. 严重: Dispatcher initialization failed java.lang.RuntimeException: java.lang.reflect.Invoc

    错误提示:严重: Dispatcher initialization failed java.lang.RuntimeException: java.lang.reflect.InvocationTa ...

  7. iOS开发之使用AFN上传图片

    //1.创建管理者对象 AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializ ...

  8. 0062 Spring MVC的文件上传与下载--MultipartFile--ResponseEntity

    文件上传功能在网页中见的太多了,比如上传照片作为头像.上传Excel文档导入数据等 先写个上传文件的html <!DOCTYPE html> <html> <head&g ...

  9. [C++]在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include StdAfx.h”

    问题现象:在写好的.cpp文件后,编译报错.提示"你建立的工程使用了预编译功能, cpp最前边要留一行这样的内容:#include "StdAfx.h"问题原因:网上说是 ...

  10. 基于HTML5坦克大战游戏简化版

    之前我们有分享过不少经典的HTML5游戏,有些还是很有意思的,比如HTML5版切水果游戏和HTML5中国象棋游戏.今天要分享的是一款简化版的HTML5坦克大战游戏,方向键控制坦克的行进方向,空格键发射 ...