<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 文件居然曝光了我的密碼

          共 1848字,需瀏覽 4分鐘

           ·

          2020-06-03 23:22

          點擊上方Python知識圈設為星標

          回復1024獲取Python資料


          f7f0acae56a658779654863417819d1d.webp


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

          閱讀文本大概需要 3 分鐘


          點擊「閱讀原文」查看pk哥原創(chuàng)精品視頻。

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

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

          但是在這種模式快速且方便的同時,它也可能是不安全的。因為它重用了語言的導入機制(該機制有創(chuàng)建和緩存.pyc文件的習慣),所以這些機密也存在于編譯的字節(jié)碼中!使用GitHub API進行的一些初步研究顯示,數(shù)千個GitHub代碼倉庫的字節(jié)碼中隱藏著機密。

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

          緩存來源的速成課程

          Python的早期版本將這些文件存儲在原始源文件旁邊,但是從Python 3.2開始,這些文件都位于導入模塊根目錄的一個名為pycache的文件夾中。

          假設我們有一個包含下面密碼的Python文件:

          95850aaae08816807d5ee666925dab41.webp

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

          401d90f80def871678669fbf5cd1dc66.webp

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

          0788a7ba620849adc7bcc8e91958c72a.webp

          緩存泄漏機密

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

          e59c48df6690db31c3f60598dbe0cee2.webp

          額外說明

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

          也就是說,對于一個有經(jīng)驗的程序員來說,無意中泄漏他們的機密是很容易的,而且初學者更容易犯這樣的錯誤。要避免這種情況,要么需要有足夠的gitignore知識,要么需要對git和Python內(nèi)部有一定的了解。

          你可以做的事情:

          • 在你的代碼倉庫中查找松散的.pyc文件,并刪除它們

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

          • 使用標準的gitignore來防止檢入.pyc文件

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





          2feffc01dcd49a6c65249613fbde356e.webp
          -----------------------公眾號:Python知識圈博客:www.pyzhishiquan.com知乎Python知識圈微信視頻號:菜鳥程序員 (分享有趣的編程技巧、Python技巧)bilibili:菜鳥程序員的日常(目前原創(chuàng)視頻:16,累計播放量:55萬)

          
           

          一個學習Python的人,喜歡分享,喜歡搞事情!

          長按下圖二維碼關注,和你一起領悟Python的魅力

          
           
          
           
          
           


          
           


          Python知識圈公眾號的交流群已經(jīng)建立,群里可以領取 Python 和人工智能學習資料,大家可以一起學習交流,效率更高,如果是想發(fā)推文、廣告、砍價小程序的敬請繞道一定記得備注「交流學習」,我會盡快通過好友申請哦!通過好友后私聊我「學習資料」或者「進群」都可以。

          掃碼添加,備注:交流學習




          往期推薦01

          公眾號所有文章匯總導航(2-10更新)

          02

          玩會這 15 款編程游戲,就算是入門了!

          03

          我用Python一鍵保存了半佛老師所有的騷氣表情包


          我就知道你“在看” fa91cbd381515336c2aab74222d11cb5.webp
          瀏覽 140
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  国产一级特黄AAAAA片一 国产一级婬片A片免费看狼牙 | 免费观看黄色一级片 | 国产精品久久丫 | A片中文字幕 | 黑人爱爱视频动态图 |