<?> PHP NOVA invictum.hr
Izdanje 2026.
Poglavlje 43

Korisnici i sigurnost

Koristimo Laravelovu autentikaciju, middleware, policyje, verifikaciju e-maila i rate limiting bez preskakanja poslužiteljske autorizacije.

30 min čitanja Napredno razina PHP 8.5 ciljna verzija

Nakon ovog poglavlja

Što ćete znati napraviti

  • Zaštititi rute auth i verified middlewareom.
  • Napisati policy koji provjerava vlasništvo i ulogu.
  • Primijeniti rate limiting na osjetljive radnje.

Identitet kroz guard

Laravel upravlja sesijom, ali pravila ostaju naša

Laravelovi starter kitovi mogu pružiti registraciju, prijavu, reset i verifikaciju. Možemo i ručno koristiti Auth facade ili guard. Nakon uspješne Auth::attempt provjere obavezno regeneriramo sesiju; logout invalidira sesiju i obnavlja CSRF token.

Prijava
<?php

if (Auth::attempt($credentials, $request->boolean('remember'))) {
    $request->session()->regenerate();

    return redirect()->intended(route('dashboard'));
}

return back()->withErrors([
    'email' => 'Podaci za prijavu nisu ispravni.',
])->onlyInput('email');

Tko smije što nad kojim zapisom

Policy centralizira odluku o resursu

auth middleware potvrđuje prijavu, verified potvrđuje e-mail, ali ni jedno ne odlučuje smije li korisnik urediti konkretan članak. Policy prima korisnika i model te provodi vlasništvo, ulogu ili drugo pravilo.

Policy i zaštićene rute
<?php

final class ArticlePolicy
{
    public function update(User $user, Article $article): bool
    {
        return $user->id === $article->user_id
            || $user->role === UserRole::Administrator;
    }
}

Route::middleware(['auth', 'verified'])->group(function (): void {
    Route::resource('articles', ArticleController::class);
});

Otežajte automatiziranu zloupotrebu

Ograničenje brzine prema riziku

Prijava, reset lozinke, slanje e-maila i skupi API pozivi trebaju vlastite limite. Ključ može kombinirati normalizirani račun i IP, ali treba paziti na zajedničke mreže i mogućnost namjernog zaključavanja žrtve.

Za osjetljivu promjenu možemo tražiti nedavnu potvrdu lozinke ili MFA. Sesije ograničavamo po trajanju i omogućujemo korisniku opoziv drugih uređaja.

Prilagođeni limiter
<?php

RateLimiter::for('login', function (Request $request): Limit {
    return Limit::perMinute(5)->by(
        Str::lower((string) $request->input('email')) . '|' . $request->ip()
    );
});

Primijenite naučeno

Vježba: Privatni urednički dio

Zaštitite uređivanje članaka prijavom, verifikacijom i policyjem.

  1. Vlasnik smije uređivati vlastitu skicu.
  2. Administrator smije uređivati sve članke.
  3. Dodajte feature test koji potvrđuje 403 za drugog običnog korisnika.

Za provjeru i nastavak

Službeni izvori