VEEBITEENUSE TURVALISUSE TAGAMINE KASUTADES SOOVITATUD PRAKTIKAID JA HARJUTUS 3

3.1 OpenID, OAuth, JSON Web Token (JWT)

OpenID

OpenID on protokoll, mis võimaldab veebisaitidel või rakendustel anda kasutajatele juurdepääsu, autentides neid teise teenuse või teenusepakkuja kaudu.

OpenID võimaldab kasutada OpenID teenusepakkuja (näiteks Google) sisselogimise andmeid, et logida sisse teise rakendusse (näiteks Facebooki). Näiteks, kui soovite pääseda veebilehele www.example.com, võivad nad küsida teie OpenID Google’i või Facebooki konto kujul. Kui sisestate oma OpenID, suunab example.com teid oma OpenID-teenuse pakkujale, kus te autentite end, kinnitate oma identiteeti ning seejärel lubatakse teil juurdepääs oma kontole example.com-is.

OAuth

OAuth (Open Authorization) võimaldab väljastada kolmandatele osapooltele ligipääsu tokeneid omaniku heakskiidul. Seejärel saab kolmas osapool kasutada tokenit, et pääseda ligi serveri poolt hallatavatele kaitstud ressurssidele.

Näiteks, kui mõni rakendus palub luba juurdepääsuks teie isikuandmetele, näiteks teie Facebooki või Google’i kontaktide jagamiseks, siis olete tõenäoliselt kasutanud OAuthi.

Näide: Spotify taotleb juurdepääsu Facebooki andmetele.

JSON Web Token (JWT)

JSON Web Token (JWT) on standard, mis määratleb kompaktse ja iseseisva viisi andmete turvaliseks edastamiseks osapoolte vahel JSON-objektina. Teavet saab kontrollida ja usaldada, sest see on digitaalselt allkirjastatud.

JWT struktuur koosneb kolmest osast:

  • Päis (Header)
    Päis koosneb tavaliselt kahest osast: märgendi tüüp, mis on JWT, ja allkirjastusalgoritm, näiteks HMAC-SHA256 või RSA.
  • Andmed (Payload)
    Andmed koosnevad nõuetest (claims). Nõuded on avaldused üksuse (tavaliselt kasutaja) ja täiendavate andmete kohta. Nõudeid on kolme tüüpi: registreeritud, avalikud ja privaatsed nõuded.
    • Registreeritud nõuded: eelnevalt määratletud, kuid mitte kohustuslikud, näiteks iss (issuer), exp (expiration time), sub (subject), aud (audience).
    • Avalikud nõuded: kasutajate poolt määratletavad, et vältida kokkupõrkeid, tuleb need registreerida või kasutada URI-na.
    • Privaatsed nõuded: kohandatud nõuded osapoolte vahel.
  • Allkiri (Signature)
    Allkirja kasutatakse selleks, et kontrollida, et sõnumit ei ole vahepeal muudetud. Allkirja loomiseks võetakse kodeeritud päis, kodeeritud andmed, salajane võti, algoritm ja luuakse digitaalne allkiri.

Küsimused:

  • Mis väljastatakse OAuth-i puhul, et kolmandad osapooled saaksid ressurssidele ligipääsu?
    OAuth-i puhul väljastatakse access token, mis võimaldab kolmandal osapoolel juurdepääsu kaitstud ressurssidele omaniku heakskiidul.
  • Kui lood enda veebilehele sisselogimise vormi ning tahad lisada võimaluse, et kliendid saaksid sisse logida ka Apple ID-ga, siis millist praktikat peaksid kasutama?
    Sellisel juhul tuleks kasutada OpenID Connect või OAuth 2.0 standardit, et võimaldada kolmandate osapoolte autentimist ja autoriseerimist (nt Apple ID kaudu).
  • Millistest osadest koosneb JWT?
    JWT koosneb kolmest osast: päis (header), andmed (payload) ja allkiri (signature).

3.2 HTTP autentimise päis ja küpsised. Küpsiste atribuudid: Secure, HttpOnly, SameSite

HTTP autentimise päis

HTTP päringu kontekstis on põhiline juurdepääsu autentimise meetod, mille abil kasutaja (nt veebibrauser) esitab päringu esitamisel kasutajanime ja parooli. Põhilise HTTP-autentimise puhul sisaldab taotlus päise välja Authorization: Basic <credentials>, kus credentials on kasutajanimi ja parool kodeeritud baastasemel.

Authorization päis saadetakse tavaliselt pärast seda, kui kasutaja üritab esimest korda taotleda kaitstud ressurssi ilma autoriseerimata. Server vastab sõnumiga 401 Unauthorized, mis sisaldab vähemalt ühte WWW-Authenticate päist, mis näitab kasutatavaid autentimisskeeme. Kasutaja sisestab oma volitused ja taotleb ressurssi uuesti koos Authorization päisega.

Küpsised ja atribuudid

HTTP-küpsis on väike andmekogum, mille server saadab brauserile. Brauser salvestab selle ja saadab hilisematel päringutel tagasi samale serverile. Küpsiseid kasutatakse tavaliselt:

  • Seansside haldamiseks (sisselogimine, ostukorvid jne)
  • Isikupärastamiseks (kasutaja eelistused, teemad)
  • Kasutaja käitumise salvestamiseks ja analüüsimiseks

Secure

Secure atribuut tagab, et küpsis saadetakse ainult krüpteeritud HTTPS-ühenduse kaudu, vältides selle saatmist krüptimata HTTP-päringutel.

HttpOnly

HttpOnly atribuut takistab brauseril ligipääsu küpsisele läbi JavaScripti, vähendades XSS-rünnakute riski.

SameSite

SameSite piirab küpsise saatmist cross-site päringutega, vähendades cross-site request forgery (CSRF) rünnakute ohtu. Võimalikud väärtused:

  • Strict – küpsis saadetakse ainult sama saidi päringutel.
  • Lax – lubab küpsise saatmise tavapäraste linkide kaudu, kuid mitte CSRF-ohtlikes päringutes.
  • None – küpsis saadetakse kõigil juhtudel (ei paku kaitset).

Küsimused:

  • Mis eesmärgil kasutatakse küpsiseid?
    Küpsiseid kasutatakse seansi haldamiseks, kasutaja isikupärastamiseks ning kasutajate tegevuse jälgimiseks ja analüüsimiseks.
  • Mida peatab Secure atribuut HTTP päringul?
    Secure atribuut tagab, et küpsis saadetakse ainult turvalise HTTPS-ühenduse kaudu, vältides selle edastamist krüptimata HTTP päringutel.
  • Millised on SameSite atribuudi kolm võimalikku väärtust?
    SameSite atribuudi võimalikud väärtused on: Strict, Lax ja None.

3.3 Seanss/tokeni aegumine

Seanss

HTTP on olekuta protokoll, seetõttu on vaja mehhanismi, mis seob mitmed päringud ühe kasutajaga. Seda tehakse seansi abil, mille andmeid hoitakse tavaliselt serveris ja kasutajale antakse ainult seansi ID.

Seansi aegumine

Seanss aegub, kui kasutaja ei tee teatud aja jooksul veebisaidil ühtegi tegevust. Server tühistab siis seansi ja kustutab seotud andmed.

Tokeni aegumine

Access token väljastatakse kolmandatele isikutele autoriseerimisserveri poolt. Kui access token aegub, saab seda uuendada refresh tokeni abil. Refresh token võimaldab väljastada uue access tokeni ilma, et kasutaja peaks uuesti sisse logima.


Kontrollküsimused

Miks luuakse sessioone?
Sessioone luuakse selleks, et siduda mitu päringut ühe kasutajaga, kuna HTTP on olekuta protokoll.

Millist turvalisust pakub sessiooni aegumine?
Sessiooni aegumine vähendab riski, et keegi teine kasutab kasutaja seanssi pärast seda, kui kasutaja on lahkunud või olnud passiivne.

Mis on refresh token?
Refresh token on token, mida kasutatakse uue access tokeni saamiseks ilma, et kasutaja peaks uuesti sisse logima.


3.5 HTTPS ja sertifikaadi genereerimine Let’s Encrypt’iga

HTTPS

HTTPS on protokoll, mis krüpteerib andmevahetuse veebiserveri ja kliendi vahel Transport Layer Security (TLS) abil, tagades turvalise ühenduse ja andmete konfidentsiaalsuse.

TLS on SSL-i turvalisem ja uuem versioon, kuid termin “SSL” on endiselt laialt kasutusel. Kui brauser kuvab aadressiribal lukusümboli, tähendab see, et ühendus on turvaline.

Sertifikaadid

SSL/TLS sertifikaat on digitaalne tõend, mis kinnitab veebisaidi omaniku ja avaliku võtme ning võimaldab turvalist krüpteeritud ühendust. Sertifikaat peab olema usaldusväärse sertifitseerimisasutuse poolt allkirjastatud.

Kui sertifikaati ei usaldata (nt ise genereeritud sertifikaat), kuvab brauser hoiatuse.

Sertifikaadi genereerimine Let’s Encrypt’iga

Let’s Encrypt on tasuta sertifitseerimisasutus, mis võimaldab automaatselt saada ja uuendada SSL-sertifikaate. Sertifikaadi saamiseks tuleb tõestada domeeni omandiõigus ACME-protokolli abil.

Kui haldad veebisaiti veebihostingu juhtpaneeli kaudu, võib olla sobiv kasutada vastavat pistikprogrammi või tööriista, mis aitab sertifikaadi saada ja uuendada automaatselt.

Küsimused:

  • Mis on HTTPS?
    HTTPS on protokoll, mis krüpteerib veebilehe ja kliendi vahelise ühenduse TLS abil, tagades turvalisuse ja andmete konfidentsiaalsuse.
  • Miks on oluline kasutada usaldusväärset sertifikaati?
    Usaldusväärne sertifikaat kinnitab veebisaidi omaniku ning võimaldab turvalist ühendust, vältides brauseri hoiatusi ja andmete pealtkuulamist.

3.6 CORS, CSRF, XSS, SQL Injection, Forced browsing

1. CORS

CORS (Cross-Origin Resource Sharing) on mehhanism, mis lubab veebibrauseril kontrollitud viisil pääseda ligi ressurssidele teisel domeenil, ületades standardset Same-Origin Policy piirangut.

Näide:

  • Pank omab API-d.
  • Kasutaja Bob on pangas sisse logitud.
  • Häkker Charlie veebilehel on pahatahtlik JavaScript, mis üritab teha pangas tehingut.

Ilma CORS-ta saadab brauser päringu ainult sama päritoluga lehelt. CORS kontrollib, kas päritolu on lubatud ja blokeerib pahatahtlikud päringud.

Kuidas vältida CORS-i rünnakuid?

  • Õige poliitika seadistamine, lubades ainult usaldusväärseid domeene.
  • Vältida Access-Control-Allow-Origin: null kasutamist.

Küsimused:

  • Mis on CORS?
    CORS on mehhanism, mis lubab brauseril kontrollitud viisil teha päringuid teise domeeni ressurssidele, ületades Same-Origin Policy piiranguid.
  • Kuidas vältida CORS-i rünnakuid?
    Tuleb seadistada õiged CORS-poliitikad, lubades ligipääsu ainult usaldusväärsetele domeenidele ning vältida liiga laiaulatuslikke lubasid.

3.7 Penetratsioonitestimise tööriistade kasutamine veebisaidi turvalisuse kontrolliks (nt WPScan, OWASP ZAP)

Penetratsioonitestimine

Penetratsioonitestimine on simuleeritud rünnak, mis aitab avastada turvaauke ja nõrkusi veebis või süsteemis enne, kui neid leiavad pahatahtlikud ründajad.

Pentesti etapid

  • Uurimine: süsteemi ja selle haavatavuste kaardistamine.
  • Rünnak: haavatavuste ärakasutamine.
  • Aruandlus: tulemuste ja soovituste esitamine.

Tööriistad

  • WPScan: WordPressi haavatavuste skanner, mis töötab musta kasti meetodil.
  • OWASP ZAP: populaarne tasuta vahend turvaaukude leidmiseks ja käsitsi testimiseks.

Kontrollküsimused

Miks on penetratsioonitestimine oluline?
Penetratsioonitestimine aitab avastada turvaauke ja nõrkusi enne, kui neid kasutavad pahatahtlikud isikud.

Milliseid tööriistu saab pentestimiseks kasutada?
Näiteks WPScan ja OWASP ZAP.

Kas pentest võib veebilehe tööd mõjutada?
Jah, mõnikord võib pentest koormata süsteemi või põhjustada tõrkeid, seetõttu tuleks testida turvalises keskkonnas ja planeerida testid hoolikalt.

Ülesanne 3: sessionStorage

  1. Ava brauser ja mine chrome://newtab lehele.

2.Konsooli avamiseks vajutage F12

2. Ava konsool ning kirjuta konsoolile sessionStorage ning vajuta ENTER. Näed, et Session Storage on tühi.

3.vali “Console” ja kirjuta käsk: sessionStorage  ning vajuta ENTER

3.Teee uus käsk sessionStorage.setItem(‘’,’kirjuta oma lemmikloom’). Selle käsuga lisati Session Storage’isse uued andmed.

5.uus Kirjuta käsk sessionStorage.getItem(‘loom’) ning näed, et väljastatakse sessionStorage’ist sinu lemmik loom.

6.Kontrollimiseks peate minema jaotisse Application> Session Storage. Saate vaadata meie sisestatud teavet.

7.Nüüd ava veel üks vahekaart ning mine samale lehele (chrome://newtab). Ava uuesti Application>Session Storage ning näed, et see on tühi.

Koguvõtte:

Andmed salvestatakse Session Storage’i ainult konkreetse brauseriseansi jooksul. Kui kasutad sessionStorage.setItem() jne käske, siis need kehtivad ühe seansi kohta. Teine vahekaart, mille avasid punkti 7 juures, töötab aga teise seansina.

Lisaülesanne (David Lennuk):

Kuidas kustutada lisatud elimendid session storages:

Kustutamiseks paremklõpsake hiirel ja avage menüü, seal peate valima kustutusnupu, nii saate kustutada kõik seal olevad andmed

Kui pärast kustutamist proovime andmeid kuvada, siis see kuvatakse meile järgmiselt.

Lisaülesanne (Vsevolod Tsarev):

Kuidas mudustada andmeid session storages:

D

Kokkuvõtte

Andmed salvestatakse Session Storage’i ainult konkreetse browser’iseansi jooksul. Kui kasutad sessionStorage.setItem() jns. käske, siis need kehtivad ühe seanssi kohta. Teine vahekaart, mille avasid punkti 7 juuures, töötab aga teise seanssina.