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

Namų darbas — slapukas, maiša, apsaugos

Padaryk savą.

  1. Pažiūrėk į slapuką naršyklėje. Užsiregistruok, tada atsidaryk DevTools → Application → Cookies. Rask signflow_session: HttpOnly pažymėta (tad document.cookie konsolėje jo nerodys — pabandyk), SameSite yra Lax. Tai žetonas; serveris turi tik jo maišą.

  2. Įrodyk maišos-diske teiginį. Slapuko reikšmė ir token_hash stulpelis yra skirtingos eilutės. Nukopijuok slapuko reikšmę, tada SELECT token_hash FROM sessions; — jos nesutampa, nes saugoma yra SHA-256(slapuko reikšmė). Pavogta duomenų bazės kopija neturi jokių veikiančių sesijų.

  3. Pataikyk į kiekvieną apsaugą. Registruok tą patį el. paštą du kartus → „already registered". Pateik nesutampančius slaptažodžius → „do not match". Bandyk 3 simbolių slaptažodį → ilgio klaida. Kiekviena — šaka Register; rask eilutę, sukūrusią kiekvieną pranešimą.

  4. Ištrink sesiją ranka. DELETE FROM sessions;, tada perkrauk. Kol kas nieko matomo nepasikeičia — nes niekas neskaito sesijos slapuko į „prisijungęs", kol neatėjo kita pamoka. Bet ką tik ranka padarei būtent tai, ką atsijungimas padarys viena užklausa.

Kur einam toliau. Gali užsiregistruoti ir turi gyvą sesiją — bet programa į ją nereaguoja: nėra „prisijungęs" antraštės, apsaugoto puslapio, būdo vėl prisijungti ar atsijungti. 5 pamoka prideda du middleware, kurie sesijas paverčia tikromis: LoadUser (kiekvienoje užklausoje paverčia slapuką į esamą vartotoją) ir RequireAuth (saugo puslapius, kuriems reikia prisijungimo). Plius prisijungimas, atsijungimas — vienas DELETE, tai, ko JWT negali — ir paskyrų nuskaitymo apsaugos, neleidžiančios įsilaužėliui sužinoti, kurie el. paštai užregistruoti.