我有一個複雜的要求來加密出現在laravel配置中的所有密鑰(pwds)。沒有祕密信息可以存儲在明文! 可變參數需要在運行時拉入並解密。我希望他們通過Config類,即Config :: get()。在laravel中爲加密密鑰動態設置配置變量
沒有人有任何想法如何實現這一目標?
我有一個複雜的要求來加密出現在laravel配置中的所有密鑰(pwds)。沒有祕密信息可以存儲在明文! 可變參數需要在運行時拉入並解密。我希望他們通過Config類,即Config :: get()。在laravel中爲加密密鑰動態設置配置變量
沒有人有任何想法如何實現這一目標?
好吧,我想出了一個解決方案,但如果任何人有更好的東西會很有意思。 我的方法是:
1)在服務器上生成一個密鑰,並以明文存儲爲一個全局變量。由於我使用的Apache我這樣做在我的Apache配置:
SetEnv APPLICATION_KEY "a-randonly-generated-32-char-key"
該密鑰將用來加密/解密所有敏感的PWD /我們使用的密鑰。
2)寫入一個工匠命令來加密敏感值,並把它們存儲在配置。 Laravel不允許你輕鬆地做到這一點,所以我使用第三方包(https://github.com/Phil-F/Setting)來做到這一點。該軟件包允許您將配置變量寫入json。然後可以在運行時由應用程序檢索它們。
的人員命令接受鍵「名稱」和「值」作爲參數並調用:
$encryptedValue = Crypt::encrypt($value);
然後存儲在JSON配置的值(使用呼叫到封裝類「設置」):
Setting::set($name, $encryptedValue);
3)我們可以刪除敏感的配置變量。例如,如果我有一個配置變量通常檢索使用Config :: get('mail.password')然後我從mail.php配置文件中刪除此,我打電話給工匠通過'mail.password'和'密碼-值'。默認情況下,包將json存儲在/app/storage/meta/setting.json中。你應該在這裏看到你的加密變量。
4)現在我們需要在拉這些變量並在運行時對其進行解密。爲此,我將代碼添加到'before'過濾器中(請參閱/app/filters.php)。在這裏,我將祕密變量與通常的(靜態)laravel變量同步。爲整潔i中的加密的密鑰的名稱存儲爲/config/app.php陣列,例如
'encrypted_keys' => array('mail.password', 'services.mandrill.secret'),
然後進行同步:
$encryptedKeys = Config::get('app.encrypted_keys');
foreach ($encryptedKeys as $encryptedKey) {
// Get encrypted key from json and decrypt it
$encryptedValue = Crypt::decrypt(Setting::get($encryptedKey));
// Store it in the config (note: its not visible in the config file itself)
Config::set($encryptedKey, $encryptedValue);
}
該同步使得我們已經敏感數據使用Config :: get()可用,並使其與現有代碼更加兼容。另外,你必須在任何你想使用這些變量的地方去替換Config :: get()和Setting :: get()。
希望這可以幫助別人......我花了一段時間來解決全部問題!
這對我有用,謝謝!我會注意到,存儲在apache中的密鑰並不適合我 - 當你運行命令行時,密鑰不可用,所以現在我要使用Laravel生成的密鑰,Crypt facade使用自動。 – 2015-03-31 20:31:06
而這樣做的原因是什麼? – 2014-12-03 02:24:36
客戶有時會有要求。 – 2015-03-24 17:23:48