<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          你的pyc文件,泄露了你的秘密!

          共 1783字,需瀏覽 4分鐘

           ·

          2020-08-17 18:34


          英文原文:https://blog.jse.li/posts/pyc/
          ?譯者:穆勝亮


          摘要:緩存控制著我周圍的所有事物。pyc文件包含機(jī)密信息,因此不應(yīng)該包含在源代碼控制系統(tǒng)中。可以使用Python標(biāo)準(zhǔn)的.gitignore文件,移除源代碼控制系統(tǒng)對(duì)pyc文件的包含。


          ?????當(dāng)你第一次導(dǎo)入Python文件時(shí),Python解釋器將編譯該文件并將產(chǎn)生的字節(jié)碼緩存到.pyc文件中,這樣以后導(dǎo)入時(shí)就避免了再解析或編譯代碼產(chǎn)生新的開(kāi)銷。

          ?????對(duì)于Python項(xiàng)目來(lái)說(shuō),將配置、密鑰和密碼(統(tǒng)稱為“機(jī)密”)存儲(chǔ)在名為secret.py,config.py或者settings.py之類的gitignored Python文件中也是一種常見(jiàn)的實(shí)踐,這些機(jī)密信息在項(xiàng)目的其他部分導(dǎo)入使用。這在機(jī)密信息和源代碼之間提供了一個(gè)很好的分離,在大多數(shù)情況下,這種設(shè)置工作得很好。而且由于它復(fù)用了語(yǔ)言的導(dǎo)入機(jī)制,這些項(xiàng)目不必在文件I/O或JSON之類的格式上浪費(fèi)時(shí)間。

          ?????但是在這種模式快速且方便的同時(shí),它也可能是不安全的。因?yàn)樗赜昧苏Z(yǔ)言的導(dǎo)入機(jī)制(該機(jī)制有創(chuàng)建和緩存.pyc文件的習(xí)慣),所以這些機(jī)密也存在于編譯的字節(jié)碼中!使用GitHub API進(jìn)行的一些初步研究顯示,數(shù)千個(gè)GitHub代碼倉(cāng)庫(kù)的字節(jié)碼中隱藏著機(jī)密。

          ?????用于在代碼倉(cāng)庫(kù)中查找機(jī)密的現(xiàn)有工具(我最喜歡的是trufflehog)跳過(guò)了像.pyc這樣的二進(jìn)制文件,而是只掃描純文本文件,如源代碼或配置文件。


          緩存來(lái)源的速成課程

          ????

          ???? Python的早期版本將這些文件存儲(chǔ)在原始源文件旁邊,但是從Python 3.2開(kāi)始,這些文件都位于導(dǎo)入模塊根目錄的一個(gè)名為_(kāi)_pycache__的文件夾中。

          ???? 假設(shè)我們有一個(gè)包含下面密碼的Python文件:

          ? ? ?這行代碼的字節(jié)碼是這樣的:

          ?????注意,變量名和字符串是完全復(fù)制的!而且,Python字節(jié)碼通常包含足夠的信息來(lái)恢復(fù)代碼的原始結(jié)構(gòu)。像uncompyle6這樣的工具可以將.pyc文件轉(zhuǎn)換回它們的原始形式。


          緩存泄漏機(jī)密

          ????

          ???? 為了調(diào)查這個(gè)問(wèn)題到底有多普遍,我編寫了一個(gè)簡(jiǎn)短的腳本來(lái)搜索GitHub上的.pyc文件并對(duì)其進(jìn)行反編譯以尋找秘密。最后我找到了數(shù)千個(gè)Twitter密鑰、條帶標(biāo)記、AWS證書和社交媒體密碼。我通知了被我用這種方式破解密鑰的相關(guān)機(jī)構(gòu)。


          你自己試試吧!

          ????

          ??? 這篇文章附帶了一個(gè)小的奪旗風(fēng)格的實(shí)驗(yàn),你可以自己嘗試這種風(fēng)格的攻擊。

          ? ? 代碼地址:https://github.com/veggiedefender/pyc-secret-lab/


          額外說(shuō)明

          ???

          ?? ?緩存的字節(jié)碼是一種底層的內(nèi)部性能優(yōu)化,Python的這種優(yōu)化為我們帶來(lái)了方便!如果沒(méi)有像反匯編或反編譯這樣的特殊工具,.pyc文件的內(nèi)容是難以理解的。當(dāng)這些文件被隱藏在__pycache__(雙下劃線代表僅供內(nèi)部使用)中時(shí),它們很容易被忽視。許多文本編輯器和IDE將這些文件夾和文件從源代碼目錄樹(shù)中隱藏起來(lái),以避免弄亂屏幕,從而很容易忘記它們的存在。

          ?????也就是說(shuō),對(duì)于一個(gè)有經(jīng)驗(yàn)的程序員來(lái)說(shuō),無(wú)意中泄漏他們的機(jī)密是很容易的,而且初學(xué)者更容易犯這樣的錯(cuò)誤。要避免這種情況,要么需要有足夠的gitignore知識(shí),要么需要對(duì)git和Python內(nèi)部有一定的了解。

          ?????你可以做的事情:

          • 在你的代碼倉(cāng)庫(kù)中查找松散的.pyc文件,并刪除它們

          • 如果你有.pyc文件并且它們包含機(jī)密,那么可以撤銷和輪換你的機(jī)密

          • 使用標(biāo)準(zhǔn)的gitignore來(lái)防止檢入.pyc文件

          • 使用JSON文件或環(huán)境變量進(jìn)行配置

          - End -


          由于微信平臺(tái)算法改版,公號(hào)內(nèi)容將不再以時(shí)間排序展示,如果大家想第一時(shí)間看到我們的推送,強(qiáng)烈建議星標(biāo)我們和給我們多點(diǎn)點(diǎn)【在看】。星標(biāo)具體步驟為:


          (1)點(diǎn)擊頁(yè)面最上方“小詹學(xué)Python”,進(jìn)入公眾號(hào)主頁(yè)。


          (2)點(diǎn)擊右上角的小點(diǎn)點(diǎn),在彈出頁(yè)面點(diǎn)擊“設(shè)為星標(biāo)”,就可以啦。


          感謝支持,比心。


          瀏覽 101
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  少妇双乳好大有奶水视频 | 亚洲综合五月天婷婷 | 久久久久久久国产精品 | 欧美亚洲及日本黄色电影 | 在线天堂国产 |