Какое значение имеет ключ приложения в приложении Laravel?

из laravel документы

Application Key The next thing you should do after installing Laravel is set your application key to a random string. If you installed Laravel via Composer or the Laravel installer, this key has already been set for you by the php artisan key:generate command.

Typically, this string should be 32 characters long. The key can be set in the .env environment file. If you have not renamed the .env.example file to .env, you should do that now. If the application key is not set, your user sessions and other encrypted data will not be secure!

Что я знаю о ключе приложения: если ключ приложения не задан, обычно возникает исключение.

  • Как эта случайная строка помогает защитить сеанс?
  • Как еще можно использовать этот ключ приложения?
  • Если я использую один и тот же ключ приложения повсюду (например, для промежуточных, производственных и т. д.), Делает ли это приложение менее безопасным?
  • какие лучшие практики для этого ключа

Пожалуйста, объясните отрицательные голоса. чтобы я мог удалить этот пост в случае необходимости. Благодарность

Shobi 23.03.2018 09:41
Если я использую один и тот же ключ приложения повсюду (например, для промежуточных, производственных и т. д.), Делает ли это приложение менее безопасным? Я даже сбрасываю промежуточный ключ при каждом развертывании.
Kyslik 23.03.2018 09:42

ну зачем ты это делаешь? @Kyslik

Shobi 23.03.2018 09:43

Таким образом, каждый сеанс недействителен :), кроме того, что из config/app.php: Этот ключ используется службой шифрования Illuminate ...

Kyslik 23.03.2018 09:44

Я не знаю, почему это очень хороший вопрос из того, что я знаю, что он используется для шифрования файлов cookie и данных сеанса. Может быть, он играет некоторую роль в безопасности api, но я не знаю, я никогда не пытался узнать больше, но теперь, когда вы задали этот вопрос, мне любопытно

Viney 23.03.2018 09:45

Взгляните на этот общий вопрос сообщества.

Eazy Sam 23.03.2018 09:59

@Viney нет, он не используется в безопасности API, если - мы говорим об использовании Заграничный пасспорт, пакет генерирует свои собственные сертификаты, насколько мне известно.

Kyslik 23.03.2018 10:06
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
17
7
5 489
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как мы видим, он используется в 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.

Более того, мы можем увидеть, как все это делается с помощью tinker:

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

Note: I used this key: base64:Qc25VgXJ8CEkp790nqF+eEocRk1o7Yp0lM1jWPUuocQ= to encrypt Hello World!

После расшифровки полученного результата (можно попробовать расшифровать свой cookie с помощью session):

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

чтобы понять выше json (iv, value, mac), вам необходимо понимать AES:


Лучшие практики для ключа приложения

  • делать сохранить его только в файле .env
  • не сохраняет его в app.php, фактически в любом отслеживаемом git файле
  • не измените его, если вы действительно не хотите
    • аннулировать сеансы / файлы cookie (выход пользователя)
    • аннулировать токены сброса пароля
    • аннулировать подписанные URL

Obvious Note: Changing application key has no effect on hashed passwords since hashing algorithms do not require encryption keys.

действительно подробный ответ

Shobi 23.03.2018 14:48

Другие вопросы по теме