對隱私有害的環境變量

jopen 9年前發布 | 4K 次閱讀 環境變量

對隱私有害的環境變量

英文原文:Environment Variables Considered Harmful for Your Secrets

為了輕松訪問運行在生產環境里的代碼,存儲你的密鑰是一項有挑戰的任務。對于這些密鑰,我意思是,例如用于訪問第三方 API 的 keys、用于加密/簽名 cookie 的 keys、哈希用戶密碼等等。如果你的生產密鑰落入了壞人之手,將產生可怕的影響。你想牢牢地控制訪問密鑰的方式和時間。

我們很可能對怎樣不去存儲密鑰持相同意見,那就是:在你的代碼,或與你代碼相同的源代碼庫里。通常,有太多人或第三方服務可以(潛在地)訪問你的代碼庫,他們不需要(也不應該)知道你的生產環境密鑰。

關于如何架構現代 web 應用程序的一個優秀文檔是 The Twelve Factor App。它列舉了每個 web 開發人員應該了解的 12 項原則(他們稱之為要素)。“Config”一章提到了:“在環境里存儲 config”。雖然我同意操作系統環境是總體配置的好場所,但是,我還是不能推薦它用于保存隱私。

當你在環境里存儲密鑰時,你仍然有可能偶然地暴露它們——這恰恰是我們想避免的。

讓我們仔細看一下環境和環境變量。這是任何操作系統都有的一個特性,你可以用來托管 web 應用,包括 Linux、Mac OS 和 Windows。環境變量已經被用于系統配置了,被設計成從父進程向其子進程傳遞配置。一個子進程默認繼承了來自于其父進程的、所有環境變量(被叫做環 境)的拷貝。

根據環境的這些屬性,問題就在于它在什么時候存儲密鑰:

  1. 環境可以被進程隱式地訪問。難以追蹤訪問,其內容是怎樣暴露的。抓取整個環境并打印出來(有利于調試)、或作為錯誤報告的一部分來發送是比較容易的。
  2. 整個環境被傳遞給了子進程(如果沒有顯式地過濾掉),這違反了最小權限原則【注1】。那么你的密鑰就可以隱式地被用到的第三方工具(像圖像處理的 ImageMagick)訪問。這些第三方工具用環境做些什么,這很難說,特別是在諸如崩潰的極少情況下。
  3. 外來的開發人員不一定意識到你的環境包含有密鑰。這樣做了,你的需求(嚴格控制訪問)將與大多數開發人員的隱式期望(環境里沒有特別的東西,只是普通的系統配置)不再匹配。這是一種危險的不匹配。

這樣我們的解決方案一直是使用一個配置文件,有服務器配置管理軟件(我們的例子中是個大廚)管理。這樣,我們就能在代碼庫外面存儲密鑰,通過使 用配置服務器的相同軟件來管理它們。這種解決方案雖然不是最好的,但是不會把密鑰暴露給子進程,這種方案需要顯式地訪問,也表達了開發人員應該如何與之協 作。

但是不管你選擇哪種方案,要當心就你如何使用密鑰的不同警告。

  • 注1:在計算機科學以及其它領域中,最小權限原則是要求計算環境中的特定抽象層的每個模塊如進程、用戶或者計算機程序只能訪問當下所必需的信息或 者資源。賦予每一個合法動作最小的權限,就是為了保護數據以及功能避免受到錯誤或者惡意行為的破壞。最小權限原則也稱為最少權限原則。http://zh.wikipedia.org/wiki/%E6%9C%80%E5%B0%8F%E6%9D%83%E9%99%90%E5%8E%9F%E5%88%99

— END —

譯文: 《對隱私有害的環境變量 》 臘八粥

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!