Мы начинаем нашу новую серию статей о функциях безопасности 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();
})
Фу! Их было несколько, но мы дошли до конца.
Я надеюсь, что это послужит полезным справочником - некоторые из них не полностью задокументированы (пока), и нет страницы быстрого справочника.