日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Python中的十個安全陷阱(一)

python爬蟲知識分享 ? 來源:python爬蟲知識分享 ? 作者:python爬蟲知識分享 ? 2022-03-24 16:42 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Python 開發(fā)者們在使用標(biāo)準(zhǔn)庫和通用框架時,都以為自己的程序具有可靠的安全性。然而,在 Python 中,就像在任何其它編程語言中一樣,有一些特性可能會被開發(fā)者們誤解或誤用。通常而言,只有極少的微妙之處或細(xì)節(jié)會使開發(fā)者們疏忽大意,從而在代碼中引入嚴(yán)重的安全漏洞。

在這篇博文中,我們將分享在實際 Python 項目中遇到的 10 個安全陷阱。我們選擇了一些在技術(shù)圈中不太為人所知的陷阱。通過介紹每個問題及其造成的影響,我們希望提高人們對這些問題的感知,并提高大家的安全意識。如果你正在使用這些特性,請一定要排查你的 Python 代碼!

1.被優(yōu)化掉的斷言

Python 支持以優(yōu)化的方式執(zhí)行代碼。這使代碼運行得更快,內(nèi)存用得更少。當(dāng)程序被大規(guī)模使用,或者可用的資源很少時,這種方法尤其有效。一些預(yù)打包的 Python 程序提供了優(yōu)化的字節(jié)碼。

然而,當(dāng)代碼被優(yōu)化時,所有的 assert 語句都會被忽略。開發(fā)者有時會使用它們來判斷代碼中的某些條件。例如,如果使用斷言來作身份驗證檢查,則可能導(dǎo)致安全繞過。

defsuperuser_action(request,user):
assertuser.is_super_user
#executeactionassuperuser

在這個例子中,第 2 行中的 assert 語句將被忽略,導(dǎo)致非超級用戶也可以運行到下一行代碼。不推薦使用 assert 語句進行安全相關(guān)的檢查,但我們確實在實際的項目中看到過它們。

2. MakeDirs 權(quán)限

os.makdirs 函數(shù)可以在操作系統(tǒng)中創(chuàng)建一個或多個文件夾。它的第二個參數(shù) mode 用于指定創(chuàng)建的文件夾的默認(rèn)權(quán)限。在下面代碼的第 2 行中,文件夾 A/B/C 是用 rwx------ (0o700) 權(quán)限創(chuàng)建的。這意味著只有當(dāng)前用戶(所有者)擁有這些文件夾的讀、寫和執(zhí)行權(quán)限。

definit_directories(request):
os.makedirs("A/B/C",mode=0o700)
returnHttpResponse("Done!")

在 Python < 3.6 版本中,創(chuàng)建出的文件夾 A、B 和 C 的權(quán)限都是 700。但是,在 Python > 3.6 版本中,只有最后一個文件夾 C 的權(quán)限為 700,其它文件夾 A 和 B 的權(quán)限為默認(rèn)的 755。

因此,在 Python > 3.6 中,os.makdirs 函數(shù)等價于 Linux 的這條命令:mkdir -m 700 -p A/B/C。有些開發(fā)者沒有意識到版本之間的差異,這已經(jīng)在 Django 中造成了一個權(quán)限越級漏洞(cve - 2022 -24583),無獨有偶,這在 WordPress 中也造成了一個加固繞過問題。

3.絕對路徑拼接

os.path.join(path, *paths) 函數(shù)用于將多個文件路徑連接成一個組合的路徑。第一個參數(shù)通常包含了基礎(chǔ)路徑,而之后的每個參數(shù)都被當(dāng)做組件拼接到基礎(chǔ)路徑后。

然而,這個函數(shù)有一個少有人知的特性。如果拼接的某個路徑以 / 開頭,那么包括基礎(chǔ)路徑在內(nèi)的所有前綴路徑都將被刪除,該路徑將被視為絕對路徑。下面的示例揭示了開發(fā)者可能遇到的這個陷阱。

defread_file(request):
filename=request.POST['filename']
file_path=os.path.join("var","lib",filename)
iffile_path.find(".")!=-1:
    returnHttpResponse("Failed!")
withopen(file_path)asf:
    returnHttpResponse(f.read(),content_type='text/plain')

在第 3 行中,我們使用 os.path.join 函數(shù)將用戶輸入的文件名構(gòu)造出目標(biāo)路徑。在第 4 行中,檢查生成的路徑是否包含”.“,防止出現(xiàn)路徑遍歷漏洞。

但是,如果攻擊者傳入的文件名參數(shù)為”/a/b/c.txt“,那么第 3 行得到的變量 file_path 會是一個絕對路徑(/a/b/c.txt)。即 os.path.join 會忽略掉”var/lib“部分,攻擊者可以不使用“.”字符就讀取到任何文件。盡管 os.path.join 的文檔中描述了這種行為,但這還是導(dǎo)致了許多漏洞(Cuckoo Sandbox Evasion, CVE-2020-35736)。

4. 任意的臨時文件

tempfile.NamedTemporaryFile 函數(shù)用于創(chuàng)建具有特定名稱的臨時文件。但是,prefix(前綴)和 suffix(后綴)參數(shù)很容易受到路徑遍歷攻擊(Issue 35278)。如果攻擊者控制了這些參數(shù)之一,他就可以在文件系統(tǒng)中的任意位置創(chuàng)建出一個臨時文件。下面的示例揭示了開發(fā)者可能遇到的一個陷阱。

def touch_tmp_file(request):
    id = request.GET['id']
    tmp_file = tempfile.NamedTemporaryFile(prefix=id)
    return HttpResponse(f"tmp file: {tmp_file} created!", content_type='text/plain')

在第 3 行中,用戶輸入的 id 被當(dāng)作臨時文件的前綴。如果攻擊者傳入的 id 參數(shù)是“/../var/www/test”,則會創(chuàng)建出這樣的臨時文件:/var/www/test_zdllj17。粗看起來,這可能是無害的,但它會為攻擊者創(chuàng)造出挖掘更復(fù)雜的漏洞的基礎(chǔ)。

5.擴展的 Zip Slip

在 Web 應(yīng)用中,通常需要解壓上傳后的壓縮文件。在 Python 中,很多人都知道 TarFile.extractall 與 TarFile.extract 函數(shù)容易受到 Zip Slip 攻擊。攻擊者通過篡改壓縮包中的文件名,使其包含路徑遍歷(../)字符,從而發(fā)起攻擊。

這就是為什么壓縮文件應(yīng)該始終被視為不受信來源的原因。zipfile.extractall 與 zipfile.extract 函數(shù)可以對 zip 內(nèi)容進行清洗,從而防止這類路徑遍歷漏洞。

但是,這并不意味著在 ZipFile 庫中不會出現(xiàn)路徑遍歷漏洞。下面是一段解壓縮文件的代碼。

def extract_html(request):
    filename = request.FILES['filename']
    zf = zipfile.ZipFile(filename.temporary_file_path(), "r")
    for entry in zf.namelist():
        if entry.endswith(".html"):
            file_content = zf.read(entry)
            with open(entry, "wb") as fp:
                fp.write(file_content)
    zf.close()
    return HttpResponse("HTML files extracted!")

第 3 行代碼根據(jù)用戶上傳文件的臨時路徑,創(chuàng)建出一個 ZipFile 處理器。第 4 - 8 行代碼將所有以“.html”結(jié)尾的壓縮項提取出來。第 4 行中的 zf.namelist 函數(shù)會取到 zip 內(nèi)壓縮項的名稱。注意,只有 zipfile.extract 與 zipfile.extractall 函數(shù)會對壓縮項進行清洗,其它任何函數(shù)都不會。

在這種情況下,攻擊者可以創(chuàng)建一個文件名,例如“../../../var/www/html”,內(nèi)容隨意填。該惡意文件的內(nèi)容會在第 6 行被讀取,并在第 7-8 行寫入被攻擊者控制的路徑。因此,攻擊者可以在整個服務(wù)器上創(chuàng)建任意的 HTML 文件。

如上所述,壓縮包中的文件應(yīng)該被看作是不受信任的。如果你不使用 zipfile.extractall 或者 zipfile.extract,你就必須對 zip 內(nèi)文件的名稱進行“消毒”,例如使用 os.path.basename。否則,它可能導(dǎo)致嚴(yán)重的安全漏洞,就像在 NLTK Downloader (CVE-2019-14751)中發(fā)現(xiàn)的那樣。
審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 程序
    +關(guān)注

    關(guān)注

    117

    文章

    3849

    瀏覽量

    85493
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4977

    瀏覽量

    74419
  • python
    +關(guān)注

    關(guān)注

    58

    文章

    4889

    瀏覽量

    90330
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    以太網(wǎng)PHY到RJ45的信號完整性設(shè)計:五大常見陷阱與對策

    在設(shè)計以太網(wǎng)接口時,從PHY芯片到RJ45連接器的信號路徑看似簡單,卻隱藏著許多信號完整性陷阱。即使原理圖連接無誤,PCB布局布線的小疏忽也可能導(dǎo)致眼圖閉合、回波損耗超標(biāo)、端口Link不穩(wěn)定等問題。本文總結(jié)五最常見的設(shè)計
    的頭像 發(fā)表于 04-22 14:21 ?85次閱讀

    使用PYTHON進行的跨平臺仿真

    如何使用編程語言Python來調(diào)用和控制VirtualLab Fusion的模擬。請查看下面鏈接的文檔,以找到關(guān)于如何設(shè)置和使用Python和VirtualLab Fusion之間的接口的詳細(xì)指南,以及
    發(fā)表于 04-02 08:21

    [VirtualLab] 使用Python運行VirtualLab Fusion光學(xué)仿真

    使用代碼編輯器Visual Studio Code(VS Code),因為它提供了用戶友好的安裝工作流程*。當(dāng)然,如果需要,也可以使用其他Python編輯器。 對于使用VS Code的用戶: 1.1
    發(fā)表于 03-31 09:39

    [VirtualLab] 使用Python進行跨平臺參數(shù)掃描

    ** 準(zhǔn)備Python **配置路徑 ** **在VirtualLab Fusion定義光學(xué)設(shè)置 ** **保存光學(xué)設(shè)置并導(dǎo)出參數(shù)到
    發(fā)表于 03-31 09:36

    射頻選型“翻車”現(xiàn)場:文看懂SMA與RP-SMA在企業(yè)應(yīng)用的隱形陷阱

    本文深度解析射頻連接器選型的高頻陷阱:SMA 與 RP-SMA 的本質(zhì)區(qū)別。通過分析“反向極性”設(shè)計初衷,揭示企業(yè)在組裝、協(xié)議兼容及信號致性上的三大選型誤區(qū)。旨在幫助采購與研發(fā)工程師規(guī)避物理損毀風(fēng)險,保障工業(yè)級/5G 通信項
    的頭像 發(fā)表于 03-30 09:41 ?226次閱讀
    射頻選型“翻車”現(xiàn)場:<b class='flag-5'>一</b>文看懂SMA與RP-SMA在企業(yè)應(yīng)用<b class='flag-5'>中</b>的隱形<b class='flag-5'>陷阱</b>

    《當(dāng) MCU 原廠的型號超過 100 ,會發(fā)生什么?》

    當(dāng) MCU 型號只有幾十個時, 很多問題是感知不到的。 但旦超過 100 ,變化會非常明顯。 第件事:復(fù)制開始失效 簡單復(fù)制配置: 會帶來隱性差異 小問題逐漸累積 修
    發(fā)表于 02-27 10:04

    MCU選型的10大隱形陷阱

    Youtube上發(fā)布視頻,結(jié)合其行業(yè)閱歷,深度剖析了工程師在MCU芯片選型時最易踩大隱性陷阱。 圖/Youtube截圖 《半導(dǎo)體器件應(yīng)用網(wǎng)》對John Teel的觀點進行了梳理整理,希望能幫助工程師與工程師團隊避開MCU芯
    的頭像 發(fā)表于 02-27 09:24 ?348次閱讀
    MCU選型的10大隱形<b class='flag-5'>陷阱</b>

    FPGA DSP模塊使用大關(guān)鍵陷阱

    FPGA 芯片中DSP(數(shù)字信號處理)硬核是高性能計算的核心資源,但使用不當(dāng)會引入隱蔽性極強的“坑”。這些坑不僅影響性能和精度,甚至?xí)?dǎo)致功能錯誤。以下是總結(jié)了大關(guān)鍵陷阱及其解決方案,分為 功能正確性、性能優(yōu)化、系統(tǒng)集成 三
    的頭像 發(fā)表于 01-13 15:18 ?678次閱讀

    沒有專利的opencv-python 版本

    所有 官方發(fā)布的 opencv-python 核心版本(無 contrib 擴展)都無專利風(fēng)險——專利問題僅存在于 opencv-contrib-python 擴展模塊的少數(shù)算法(如早期 SIFT
    發(fā)表于 12-13 12:37

    Termux調(diào)試圣誕樹Python代碼

    在Termux調(diào)試Python代碼(以圣誕樹立例)非常簡單,核心分為環(huán)境準(zhǔn)備、代碼編寫、運行調(diào)試三步驟,下面步步教你操作: 、環(huán)境準(zhǔn)
    發(fā)表于 12-09 09:02

    串聯(lián)諧振試驗裝置十個常見問題

    諧振裝置能否同時檢測多組試品? 部分型號具備該功能,如華天電力的裝置搭載多通道同步檢測模塊,可同時對 2-3 組同類型試品開展耐壓測試;但需注意試品的電容量、電壓等級需致,且總?cè)萘坎怀^裝置的額定負(fù)載
    發(fā)表于 12-01 15:23

    揭秘VBAT:電源設(shè)計陷阱的全方位規(guī)避策略

    VBAT在電源設(shè)計扮演著舉足輕重的角色,但其背后的奧秘往往被忽視,導(dǎo)致設(shè)計過程陷阱頻現(xiàn)。本文將為您揭秘VBAT的核心知識,并提供全方位的規(guī)避策略,助您有效避開電源設(shè)計絕大多數(shù)常見
    的頭像 發(fā)表于 11-14 15:48 ?711次閱讀
    揭秘VBAT:電源設(shè)計<b class='flag-5'>陷阱</b>的全方位規(guī)避策略

    Python調(diào)用API教程

    不同系統(tǒng)之間的信息交互。在這篇文章,我們將詳細(xì)介紹Python調(diào)用API的方法和技巧。 、用Requests庫發(fā)送HTTP請求 使用Pyth
    的頭像 發(fā)表于 11-03 09:15 ?1218次閱讀

    可靠性設(shè)計的十個重點

    專注于光電半導(dǎo)體芯片與器件可靠性領(lǐng)域的科研檢測機構(gòu),能夠?qū)ED、激光器、功率器件等關(guān)鍵部件進行嚴(yán)格的檢測,致力于為客戶提供高質(zhì)量的測試服務(wù),為光電產(chǎn)品在各種高可靠性場景的穩(wěn)定應(yīng)用提供堅實的質(zhì)量
    的頭像 發(fā)表于 08-01 22:55 ?1236次閱讀
    可靠性設(shè)計的<b class='flag-5'>十個</b>重點

    基礎(chǔ)篇3:掌握Python的條件語句與循環(huán)

    示例 以下是使用for循環(huán)打印列表每個元素的示例: 復(fù)制代碼 names = [\"Alice\", \"Bob\", \"Charlie
    發(fā)表于 07-03 16:13
    汝州市| 龙游县| 西安市| 喀喇| 界首市| 涟源市| 洛川县| 武强县| 明水县| 琼海市| 日喀则市| 镶黄旗| 金平| 滦平县| 伊吾县| 成都市| 清丰县| 抚远县| 兖州市| 阳曲县| 沧州市| 诸城市| 丘北县| 闻喜县| 高密市| 双辽市| 崇阳县| 宜君县| 广丰县| 舞钢市| 维西| 治县。| 时尚| 威海市| 江油市| 手机| 凉城县| 陆河县| 滨州市| 正蓝旗| 清水县|