• Время чтения ~2 мин
  • 29.03.2024

Мы начинаем нашу новую серию статей о функциях безопасности Laravel 11 в верхней части заметок о выпуске. Первое изменение, связанное с безопасностью, с которым мы сталкиваемся, — это остальнаячасть приложения по умолчанию Middleware:

Ранее новые приложения Laravel включали девять промежуточных программ. Это промежуточное ПО выполняло различные задачи, такие как проверка подлинности запросов, обрезка входных строк и проверка токенов CSRF.

В Laravel 11 это промежуточное ПО было перемещено в сам фреймворк, чтобы оно не добавляло объем в структуру вашего приложения. В инфраструктуру были добавлены новые методы для настройки поведения этих промежуточных программ, которые могут быть вызваны из файла вашего приложения .

->withMiddleware(function (Middleware $middleware) {
    $middleware->validateCsrfTokens(
        except: ['stripe/*']
    );
 
    $middleware->web(append: [
        EnsureUserIsSubscribed::class,
    ])
})

`bootstrap/app.php`Хотя это отлично подходит для уменьшения количества шума в шаблонах приложений по умолчанию, особенно потому, что большинство из них вам не нужно будет изменять в большинстве приложений, это затрудняет поиск промежуточного ПО, связанного с безопасностью, и внесение необходимых изменений.

Чтобы было проще узнать, что доступно и что оно делает, вот различные методы настройки промежуточного ПО, доступные в настоящее время:

Отключить шифрование

файлов cookie Laravel автоматически шифрует значения файлов cookie для обеспечения безопасности. Если вам нужно получить к ним доступ за пределами Laravel, вы можете отключить шифрование определенных значений. (Документация по Laravel)

->withMiddleware(function (Middleware $middleware) {
    $middleware->encryptCookies(except: [
        'cookie_name',
    ]);
})

Отключение защиты

от CSRFИногда необходимо отключить защиту CSRF на определенных маршрутах, таких как веб-перехватчики или внешние API. (Документация по Laravel)

->withMiddleware(function (Middleware $middleware) {
    $middleware->validateCsrfTokens(except: [
        'stripe/*',
        'http://example.com/foo/bar',
        'http://example.com/foo/*',
    ]);
})

Исключение параметров из проверки подписанных URL-адресов

Сайты социальных сетей, email-рассылки и аналитика любят прикреплять дополнительные параметры к URL-адресам, когда пользователи нажимают на них, однако эти дополнительные параметры могут нарушить подписанные URL-адреса. Чтобы избежать этого, можно специально исключить эти дополнительные параметры из проверки. (Документация по Laravel)

->withMiddleware(function (Middleware $middleware) {
    $middleware->validateSignatures(except: [
        'fbclid',
        'utm_campaign',
        'utm_content',
        'utm_medium',
        'utm_source',
        'utm_term',
    ]);
})

Настройка доверенных хостов и прокси-серверов

Важно настроить доверенные узлы и прокси-серверы, чтобы предотвратить вредоносные запросы к приложению с помощью перенаправленных атак отравления узлов. Наиболее распространенным примером является запуск электронных писем для сброса пароля, которые содержат ссылки на внедренный злоумышленником домен1. (Документация по Laravel)

->withMiddleware(function (Middleware $middleware) {
    $middleware
        ->trustProxies(at: [
            '192.168.1.1',
            '192.168.1.2',
        ])
        ->trustHosts(
            at: ['laravel.test']
        );
})

Разрешить определенные маршруты во время технического обслуживания

Иногда необходимо разрешить работу определенных маршрутов, пока включен режим обслуживания.

->withMiddleware(function (Middleware $middleware) {
    $middleware->preventRequestsDuringMaintenance(except: [
        'stripe/*',
    ]);
})

Включение регулирования

APIРекомендуется включить разумное регулирование в API, чтобы предотвратить злоупотребления и вредоносные действия. (Документация по Laravel)

->withMiddleware(function (Middleware $middleware) {
    $middleware->throttleApi(limiter: 'api', redis: true);
})

Аннулирование веб-сессий на других устройствах

В качестве дополнительного уровня безопасности вы можете сделать недействительными любые активные сеансы на других устройствах либо нажатием кнопки, либо после смены пароля. (Документация по Laravel)

->withMiddleware(function (Middleware $middleware) {
    $middleware->authenticateSessions();
})

Фу! Их было несколько, но мы дошли до конца.

Я надеюсь, что это послужит полезным справочником - некоторые из них не полностью задокументированы (пока), и нет страницы быстрого справочника.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

Про мене

Professional Fullstack Developer with extensive experience in website and desktop application development. Proficient in a wide range of tools and technologies, including Bootstrap, Tailwind, HTML5, CSS3, PUG, JavaScript, Alpine.js, jQuery, PHP, MODX, and Node.js. Skilled in website development using Symfony, MODX, and Laravel. Experience: Contributed to the development and translation of MODX3 i...

Об авторе CrazyBoy49z
WORK EXPERIENCE
Контакты
Ukraine, Lutsk
+380979856297