python的其他安全隐患
零、绪论
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的其他安全隐患的更多相关文章
- centos 源码安装python
一.准备环境 首先在官网下载想要的python对应版本http//www.python.org/downloads/source 下载tgz就可以了.文件有两种 1,Python-版本号.tgz(解压 ...
- python开发_xml.etree.ElementTree_XML文件操作_该模块在操作XML数据是存在安全隐患_慎用
xml.etree.ElementTree模块实现了一个简单而有效的用户解析和创建XML数据的API. 在python3.3版本中,该模块进行了一些修改: xml.etree.cElementTree ...
- 字符型图片验证码识别完整过程及Python实现
字符型图片验证码识别完整过程及Python实现 1 摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...
- python 学习笔记十七 django深入学习二 form,models
表单 GET 和 POST 处理表单时候只会用到GET 和 POST 方法. Django 的登录表单使用POST 方法,在这个方法中浏览器组合表单数据.对它们进行编码以用于传输.将它们发送到服务器然 ...
- Python线程通信
subprocess 作用 模块用于生产新的进程,连接到其输入.输出.错误管道,并获取其返回值 1. 如何使用subprocess模块 启动子进程的推荐方法是使用以下方便功能. 对于更高级的用例,当这 ...
- python 继承中的super
python继承中子类访问父类的方法(包括__init__)主要有两种方法,一种是调用父类的未绑定方法,另一种是使用super(仅仅对于新式类),看下面的两个例子: #coding:utf-8 cla ...
- Python之路【第十篇】Python操作Memcache、Redis、RabbitMQ、SQLAlchemy、
Memcached Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载.它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态.数据库驱动网站的速度 ...
- python模块名和文件名冲突解决
对于python初学者,很容易练习到一个随机数生成的程序,代码如下: #!/usr/bin/python import random print(random.randint(12,20)) 这个小程 ...
- (转载)Linux 套接字编程中的 5 个隐患
在 4.2 BSD UNIX® 操作系统中首次引入,Sockets API 现在是任何操作系统的标准特性.事实上,很难找到一种不支持 Sockets API 的现代语言.该 API 相当简单,但新的开 ...
随机推荐
- 剩下5种算法代码分析与使用示例(remove 、rotate 、sort、lower_bound、accumulate)
一.移除性算法 (remove) C++ Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 ...
- VB命令行参数分隔, 类似C语言中的main(int argc, char* argv[])
VB6.0为了提供命令行参数的支持,提供了Command()接口,于是通过 Command() 函数可以得到所有传入的参数,但是很不友好的是,VB的所有参数都被合在了一起,成为了一个字符串,当有多个参 ...
- JavaScript 中 this 的用法
在 JavaScript 中,this 是动态绑定,或称为运行期绑定的.一般而言,在Javascript中,this 指向函数执行时的当前对象. 由于其运行期绑定的特性,JavaScript 中的 t ...
- Android学习笔记(八)——显示运行进度对话框
显示运行进度对话框 我们经常有这种经历:运行某一应用程序时.须要等待一会,这时会显示一个进度(Please Wait)对话框,让用户知道操作正在进行. 我们继续在上一篇中的程序中加入代码~ 1.在上一 ...
- ECN
ECN是工程变更管理,主要用来管理BOM的生效日期,及记录BOM的更改内容:在SAP系统中,需先创建ECN更改号码,凭ECN号码去更改管理BOM
- 01、Windows Phone 套接字(Socket)实战之交互设计
这个 Demo 主要使用 WP 中提供的 Socket 对象,来与 PC 端进行文字.文件的互相传输.因为在 WP 中系统 对存储的操作限制的比较多,例如,你把 .doc..txt..zip 等常见的 ...
- Django教程:[33]从数据库生成模型
在使用django做网站的时候,有时候我们的数据库来自一个已有的数据库,如何整合这个数据库呢? django提供了方便的方法来整合已有数据库,下面我们看看具体的方法: 1.先来设置数据库:在网站文件夹 ...
- nginx+keeplived负载均衡配置
一.nginx 编译安装 1.依赖环境安装 yum -y install gcc gcc-c++ zlib zlib-devel pcre pcre-devel openssl openssl ...
- session退出页面
简单的session退出页面,jsp: <%@ page language="java" contentType="text/html; charset=utf-8 ...
- php服务器环境变量
可以把一些配置写到apache或nginx的配置里,然后在代码里判断环境变量来实现开发环境和线上环境的切换. 比如在本地可以 SetEnv APP_ENV local线上则 SetEnv APP_EN ...