零、绪论

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

一、标准输入输出:

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

1 importsys2 #常用参数:

3 sys.stdin.read()4 sys.stdin.readline()5 sys.stdin.readlines()6 sys.stdin.write()7 sys.stdin.writelines()8 sys.stdin.flash()9 sys.stdin.close()10 sys.stdout.read()11 sys.stdout.readline()12 sys.stdout.readlines()13 sys.stdout.write()14 sys.stdout.writelines()15 sys.stdout.flash()16 sys.stdout.close()

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

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

2、测试一段代码:

1 importos2 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代码执行:

1 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、猴子补丁是指动态修改程序指令

1 __builtins__.False, __builtins__.True =True, False2 shutil.copy.__code__ = (lambda src, dst: dst).__code__

3 x_obj.__class__ = Y

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

python open文件安全隐患_python的其他安全隐患相关推荐

  1. vscode使用教程python-VSCode下好用的Python插件及配置_python

    这篇文章主要介绍了微软官方的Python插件,已经自带很多功能,下面是插件功能描述,其中部分内容我做了翻译,需要的朋友可以参考下 MS Python插件. 这是微软官方的Python插件,已经自带很多 ...

  2. python算法和数据结构_Python中的数据结构和算法

    python算法和数据结构 To 至 Leonardo da Vinci 达芬奇(Leonardo da Vinci) 介绍 (Introduction) The purpose of this ar ...

  3. python中定义数据结构_Python中的数据结构—简介

    python中定义数据结构 You have multiples algorithms, the steps of which require fetching the smallest value ...

  4. python 数据框缺失值_Python:处理数据框中的缺失值

    python 数据框缺失值 介绍 (Introduction) In the last article we went through on how to find the missing value ...

  5. python决策树 多分类_Python中的决策树分类:您需要了解的一切

    python决策树 多分类 什么是决策树? (What is Decision Tree?) A decision tree is a decision support tool that uses ...

  6. python基础知识测试题_Python中的单元测试—基础知识

    python基础知识测试题 Unit testing is the number one skill which separates people who just finished their de ...

  7. python个人网站开发_python 全栈开发,Day81(博客系统个人主页,文章详情页)

    一.个人主页 随笔分类 需求:查询当前站点每一个分类的名称以及对应的文章数 完成这个需求,就可以展示左侧的分类 它需要利用分组查询,那么必须要会基于双下划线的查询. 基于双下划线的查询,简单来讲,就是 ...

  8. python怎么处理数据_python中scrapy处理项目数据的实例分析

    在我们处理完数据后,习惯把它放在原有的位置,但是这样也会出现一定的隐患.如果因为新数据的加入或者其他种种原因,当我们再次想要启用这个文件的时候,小伙伴们就会开始着急却怎么也翻不出来,似乎也没有其他更好 ...

  9. python游戏贪吃蛇_Python写的贪吃蛇游戏例子_python

    这篇文章主要介绍了Python写的贪吃蛇游戏例子,练手作品,又好玩又可以学到东西,需要的朋友可以参考下 第一次用Python写这种比较实用且好玩的东西,权当练手吧 游戏说明: * P键控制" ...

最新文章

  1. hexo-github-博客搭建指南
  2. 非线性优化:徒手实现LM算法
  3. 不当免费技术支持的10种方法
  4. 故障码123401_故障引导案例 | 宝马F18 ECM故障引导
  5. llmp_install.zip
  6. 避免CRM_IB 013 error message
  7. window 之命令行的cd
  8. docker——三剑客之Docker Machine
  9. 谈一谈HTTP中Get与Post的区别与主要应用场景
  10. VS2015上配置opencv2.4.11
  11. php 数组设置为空,PHP数组设置空值
  12. windows进入mysql
  13. Aescrpts Text Chain for Mac - AE动态文本链排列脚本插件
  14. 80486/486/Intel486 架构/流水线及其优化
  15. 机器学习基础(五十九)—— 高级优化算法(梯度下降、L-BFGS、共轭梯度)
  16. DoTWeen常用方法
  17. 北京师范大学计算机学院 姚力,姚力(北京师范大学信息科学与技术学院院长)_百度百科...
  18. html 垂直底端对齐,CSS vertical-align(垂直对齐)
  19. int数据类型的取值范围是多少?怎么计算的?
  20. 工科学术论文书写攻略

热门文章

  1. LVS、Nginx、HAProxy工作环境中选择
  2. php里面的耗时操作,PHP执行时间那点事
  3. kali-linux下搭建DVWA环境
  4. mysql 列序号,在mysql中使用列号而不是名称进行选择
  5. 拔得头筹 | 阿里云混合云荣膺IPv6最佳实践奖
  6. 机器学习在高德用户反馈信息处理中的实践
  7. HABBY CEO王嗣恩:这个下载量近20亿的爆款,曾被我推翻重做两次
  8. 2021年度总结——做好事不留名·CSDN中的【雷锋】
  9. Java扑克牌(斗地主发牌)
  10. Ubuntu 16.04安装Tomcat 8 图解