Як забезпечити безпечні URL в додатках Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 17 березня, 2025
Захистіть свою веб-аплікацію, використовуючи метод forceHttps у Laravel! У нашій статті ви дізнаєтеся, як забезпечити безпечні з'єднання для всіх згенерованих URL. Читайте далі, щоб відкрити для себе прості рішення для поліпшення безпеки вашого проєкту!

Метод forceHttps у Laravel забезпечує простий спосіб примусового використання HTTPS для всіх згенерованих URL-адрес у вашому додатку. Ця функція гарантує, що ваші посилання, перенаправлення та ресурси завжди використовують захищені з'єднання у продуктивному середовищі

Цей підхід особливо цінний для додатків, які обробляють чутливі дані, оскільки запобігає попередженням про змішаний контент і забезпечує однорідну безпеку на всьому сайті

// Просте примусове використання у продуктивному середовищі
URL::forceHttps($app->isProduction());
 
// Більш детальний контроль середовища
URL::forceHttps(
    $app->environment(['production', 'staging'])
);

Ось приклад впровадження комплексних заходів безпеки:

<?php
 
namespace App\Providers;
 
use Illuminate\Support\Facades\URL;
use Illuminate\Support\ServiceProvider;
 
class AppServiceProvider extends ServiceProvider
{
    public function boot()
    {
        $this->configureSecureUrls();
    }
 
    protected function configureSecureUrls()
    {
        // Визначаємо, чи потрібно примусово використовувати HTTPS
        $enforceHttps = $this->app->environment(['production', 'staging'])
            && !$this->app->runningUnitTests();
 
        // Примусове використання HTTPS для всіх згенерованих URL
        URL::forceHttps($enforceHttps);
 
        // Переконуємося, що встановлено правильну серверну змінну
        if ($enforceHttps) {
            $this->app['request']->server->set('HTTPS', 'on');
        }
 
        // Налаштування глобального посередника для заголовків безпеки
        if ($enforceHttps) {
            $this->app['router']->pushMiddlewareToGroup('web', function ($request, $next){
                $response = $next($request);
 
                return $response->withHeaders([
                    'Strict-Transport-Security' => 'max-age=31536000; includeSubDomains',
                    'Content-Security-Policy' => "upgrade-insecure-requests",
                    'X-Content-Type-Options' => 'nosniff'
                ]);
            });
        }
    }
}

Метод forceHttps спрощує управління безпекою URL, інтегруючись з конфігураціями, специфічними для середовища