python open文件安全隐患_python的其他安全隐患
零、緒論
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的其他安全隐患的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 私有云和公有云的区别_如何理解公有云和私
- 下一篇: python用户界面导入图片_pytho