簡體   English   中英

Laravel應用程序中Application鍵的意義是什么?

[英]What is the significance of Application key in a Laravel Application?

來自laravel docs

應用程序密鑰安裝Laravel后,您應該做的下一步是將應用程序密鑰設置為隨機字符串。 如果您通過Composer或Laravel安裝程序安裝了Laravel,則已通過php artisan key:generate命令為您設置了此密鑰。

通常,此字符串應為32個字符長。 密鑰可以在.env環境文件中設置。 如果您尚未將.env.example文件重命名為.env,則應立即執行此操作。 如果未設置應用程序密鑰,則您的用戶會話和其他加密數據將不安全!

我對應用程序密鑰的了解是:如果未設置應用程序密鑰,通常我會得到一個例外。

  • 這個隨機字符串如何幫助保護會話?
  • 此應用程序密鑰的其他用途是什么?
  • 如果我在任何地方使用相同的應用程序密鑰(如登台,生產等等),是否會降低應用程序的安全性?
  • 這個密鑰的最佳實踐是什么?

我們可以看到它在EncryptionServiceProvider

public function register()
{
    $this->app->singleton('encrypter', function ($app) {
        $config = $app->make('config')->get('app');

        // If the key starts with "base64:", we will need to decode the key before handing
        // it off to the encrypter. Keys may be base-64 encoded for presentation and we
        // want to make sure to convert them back to the raw bytes before encrypting.
        if (Str::startsWith($key = $this->key($config), 'base64:')) {
            $key = base64_decode(substr($key, 7));
        }

        return new Encrypter($key, $config['cipher']);
    });
}

因此,使用加密的每個組件: 會話加密 (用戶范圍), csrf令牌都可以從app_key受益。


其余的問題可以通過“如何加密”(AES)來解決,只需打開Encrypter.php ,並確認Laravel使用AES並將結果編碼為base64。

通過使用修補程序,我們可以看到它是如何完成的:

➜  laravel git:(staging) ✗ art tinker
Psy Shell v0.8.17 (PHP 7.1.14 — cli) by Justin Hileman
>>> encrypt('Hello World!')
=> "eyJpdiI6ImgzK08zSDQyMUE1T1NMVThERjQzdEE9PSIsInZhbHVlIjoiYzlZTk1td0JJZGtrS2luMlo0QzdGcVpKdTEzTWsxeFB6ME5pT1NmaGlQaz0iLCJtYWMiOiI3YTAzY2IxZjBiM2IyNDZiYzljZGJjNTczYzA3MGRjN2U3ZmFkMTVmMWRhMjcwMTRlODk5YTg5ZmM2YjBjMGNlIn0="

注意 :我使用了這個鍵: base64:Qc25VgXJ8CEkp790nqF+eEocRk1o7Yp0lM1jWPUuocQ=來加密Hello World!

解碼后得到的結果(您可以嘗試使用會話解碼自己的cookie):

{"iv":"h3+O3H421A5OSLU8DF43tA==","value":"c9YNMmwBIdkkKin2Z4C7FqZJu13Mk1xPz0NiOSfhiPk=","mac":"7a03cb1f0b3b246bc9cdbc573c070dc7e7fad15f1da27014e899a89fc6b0c0ce"}

要理解上面的json( ivvaluemac )你需要了解AES:


應用程序密鑰的最佳實踐

  • 不要將其存儲在.env文件只
  • 不要將它存儲在app.php ,實際上是在任何git跟蹤文件中
  • 除非你真的想要,否則不要改變它
    • 會話/ cookie無效(用戶注銷)
    • 使密碼重置令牌無效
    • 使簽名的網址無效

明顯注意 :更改應用程序密鑰對散列密碼沒有影響,因為散列算法不需要加密密鑰。

暫無
暫無

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

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