• Czas czytania ~2 min
  • 29.03.2024

Rozpoczynamy naszą nową serię o funkcjach bezpieczeństwa Laravela 11 na górze informacji o wydaniu. Pierwszą zmianą związaną z bezpieczeństwem, na którą się natkniemy, jestreszta domyślnej aplikacji Oprogramowanie pośredniczące:

Wcześniej nowe aplikacje Laravel zawierały dziewięć programów pośredniczących. To oprogramowanie pośredniczące wykonywało różne zadania, takie jak uwierzytelnianie żądań, przycinanie ciągów wejściowych i weryfikowanie tokenów CSRF.

W Laravelu 11 te oprogramowanie pośredniczące zostało przeniesione do samego frameworka, dzięki czemu nie zwiększają struktury aplikacji. Nowe metody dostosowywania zachowania tego oprogramowania pośredniczącego zostały dodane do struktury i mogą być wywoływane z pliku aplikacji `bootstrap/app.php` .

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

Chociaż jest to świetne rozwiązanie do zmniejszania ilości szumu w domyślnym szkieletie aplikacji, zwłaszcza, że większości z nich nie trzeba zmieniać w większości aplikacji, utrudnia to znalezienie oprogramowania pośredniczącego związanego z zabezpieczeniami i wprowadzenie zmian, które należy wprowadzić.

Aby ułatwić zorientowanie się, co jest dostępne i do czego służy, oto różne obecnie dostępne metody konfiguracji oprogramowania pośredniczącego:

Wyłącz szyfrowanie

plików cookie Laravel automatycznie szyfruje wartości plików cookie, aby zapewnić bezpieczeństwo. Jeśli chcesz uzyskać do nich dostęp poza Laravel, możesz wyłączyć szyfrowanie określonych wartości. (Dokumenty Laravel)

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

Wyłącz ochronę

CSRFCzasami trzeba wyłączyć ochronę CSRF na określonych trasach, takich jak elementy webhook lub zewnętrzne interfejsy API. (Dokumenty Laravel)

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

Wykluczanie parametrów z walidacji

podpisanego adresu URLSerwisy społecznościowe, biuletyny e-mailowe i analityka uwielbiają dołączać dodatkowe parametry do adresów URL, gdy użytkownicy je klikają, jednak te dodatkowe parametry mogą zepsuć podpisane adresy URL. Aby tego uniknąć, można wykluczyć te dodatkowe parametry z walidacji. (Dokumenty Laravel)

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

Konfigurowanie zaufanych hostów i serwerów proxy

Ważne jest, aby skonfigurować zaufane hosty i serwery proxy, aby zapobiec wysyłaniu złośliwych żądań do aplikacji przez przekazywane ataki zatruwania hostów . Najczęstszym przykładem jest wyzwalanie wiadomości e-mail dotyczących resetowania hasła , które zawierają linki do wstrzykniętej domeny atakującego1. (Dokumenty Laravel)

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

Zezwalaj na określone trasy podczas konserwacji

Czasami trzeba zezwolić na działanie określonych tras, gdy włączony jest tryb konserwacji.

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

Włączanie ograniczania

interfejsu APIDobrym pomysłem jest włączenie rozsądnego ograniczania przepustowości interfejsu API, aby zapobiec nadużyciom i złośliwym działaniom. (Dokumenty Laravel)

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

Unieważnianie sesji "internetowych" na innych urządzeniach

Jako dodatkową warstwę bezpieczeństwa możesz unieważnić wszystkie aktywne sesje na innych urządzeniach, klikając przycisk lub po zmianie hasła. (Dokumenty Laravel)

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

Uff! Było ich kilka, ale dotarliśmy do końca.

Mam nadzieję, że posłuży to jako przydatne źródło informacji - niektóre z nich nie są (jeszcze) w pełni udokumentowane i nie ma szybkiej strony referencyjnej.

Comments

No comments yet
Yurij Finiv

Yurij Finiv

Full stack

O

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...

O autorze CrazyBoy49z
WORK EXPERIENCE
Kontakt
Ukraine, Lutsk
+380979856297