Tema
/
Interneto svetainių serverio dalies kūrimas GO
📖 Teorija

Namų darbas — suvaidink ataką, patikrink prod

Padaryk savą.

  1. Suvaidink ataką. Išsaugok tai kaip failą diske ir atsidaryk naršyklėje būdamas prisijungęs:

    <form action="http://localhost:8080/logout" method="post"><button>Click me</button></form>
    

    Paspausk mygtuką. Tai POST į /logoutkito šaltinio (file:// puslapio), nešantis tavo sesijos slapuką — būtent CSRF forma. Jis atmetamas (nėra žetono), ir lieki prisijungęs. Dabar palygink: tikras Log out mygtukas SignFlow antraštėje veikia, nes jo forma neša žetoną. Tai visa apsauga, matoma iš abiejų pusių.

  2. Įrodyk, kad produkcija lieka griežta. Paleisk su APP_ENV=prod SESSION_SECRET=test go run ./cmd/signflow. Plaintext išimtis dabar praleidžiama. POST be Origin/Referer atmetamas — griežta šaltinio patikra apšarvuota, nors vis dar esi ant http lokaliai. (Būtent tai saugo įdiegtą svetainę; dev apėjimas tikrai tik dev.)

  3. Perskaityk žetono slapuką. DevTools → Cookies rask _gorilla_csrf. Tai slapuko pusė; paslėptas laukas — formos pusė. Middleware tikrina, ar jie atitinka. Ištrink slapuką, perkrauk formą, pateik → vėl 403, dabar dėl žetono priežasties, o ne referer priežasties. Dvi nepriklausomos patikros, kiekviena gali nulūžti atskirai.

Kur einam toliau. Autentifikacija beveik baigta — registracija, prisijungimas, atsijungimas, visi CSRF apsaugoti. Liko vienas srautas: o jei vartotojas pamiršta slaptažodį? 7 pamoka stato slaptažodžio atstatymą, o su juo — email.Sender sąsają: konsolės siuntėją, spausdinantį atstatymo nuorodą tiesiai į terminalą, kad visą srautą užbaigtum be API rakto, ir Resend siuntėją produkcijai. Atstatymo žetonas vienkartinis ir maišomas diske (vėl sesijų šablonas), o užbaigus atstatymą sunaikinamos visos sesijos ir žetonai — slaptažodžio keitimas turi atjungti kiekvieną įrenginį.