簡體   English   中英

如何保護存儲在Laravel環境文件中的數據庫憑據?

[英]How to secure database credentials stored in Laravel environment files?

我最近切換到Laravel的基於環境的應用程序部署,我決定使用$ _ENV在.env文件中存儲我的本地和生產服務器的憑據但是我發現調試打開時會發生異常並引發錯誤顯示公開數據庫憑據的環境變量。

現在我確定調試將始終關閉生產,因為這是我默認的,然后我在我的本地環境的本地文件夾中覆蓋它,但是, 如果某種程度上某些方式調試在生產時打開並且用戶強制執行404例外,他們需要做的就是讀取頁面,直到他們在普通視圖中看到環境變量暴露憑證。 在文檔中,它表示對任何“真實”應用程序來說,保持數據庫憑據遠離實際配置是最佳做法。 我在這里可能有點偏執。

有沒有辦法可以限制laravel顯示的調試屏幕中顯示的內容?

我剛剛遇到了同樣的問題,而我正在處理的項目要求我暫時打開我的開發機器到邪惡的外部世界來測試一些API回調。

因此,每當觸發whoops時,我都會暴露所有寶貴的密鑰和密碼。 即使它是一個盲目的API回調機器,他們有機會記錄對他們的請求的響應和一些工程師篩選它們並找到一些AWS密鑰,不,謝謝。

這就是我現在使用的:

App::error(function (Exception $exception, $code)
{
    // Never, ever, use environment variables in responses, not even when debugging
    $_SERVER = array_except($_SERVER, array_keys($_ENV));
    $_ENV = [];
});

Laravel使用Whoops( filp/whoops whoops)來創建調試頁面,你可以在這里看到它使用$_ENV來獲取環境變量。 雖然不是很理想,但你可以簡單地清空$_ENV ,以防在本地以外的任何環境中拋出錯誤。

通過在app/start/global.php簡單地重寫App::error (也可能是App::fatal ),這非常簡單:

App::error(function(Exception $exception, $code) {
    Log::error($exception);

    if (App::environment() !== 'local') {
        $_ENV = [];
    }
});

這是有效的,因為異常處理程序在Whoops處理程序之前調用。

現在, 正確更好的方法是創建一個擴展Whoops\\Handler\\PrettyPageHandler的類,它不會顯示環境變量或更改任何其他不需要的行為,並根據環境將其注冊為whoops.handler組件對於您的應用程序,類似於在Illuminate\\Exception\\ExceptionServiceProvider:registerPrettyWhoopsHandler 不過,我認為這不值得那么麻煩。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM