SADRŽAJ

1.

UVOD

....................................................................................................................................................3

2.

SESIJE

...................................................................................................................................................5

2.1.

Otmica sesija (Session Hijacking)

..................................................................................................................6

2.2.

Fiksacija sesije (Session Fixation)

..................................................................................................................7

3.

ZAŠTITA OD LAŽNOG PREDSTAVLJANJA FORME (OBLIKA)

..................................8

3.1.

CSRF ranjivost i specifičnosti napada

...........................................................................................................8

3.2.

Potencijalni rizici

............................................................................................................................................9

3.3.

Srodni napadi CSRF-u

.................................................................................................................................10

4.

VALIDACIJA I FILTRIRANJE UNOSA (INPUT-A)

...........................................................11

4.1.

Validacija inputa

..........................................................................................................................................11

4.1.1.

Validacija brojnih vrijednosti

.........................................................................................................................12

4.1.2.

Validacija tekstualnih inputa

..........................................................................................................................13

4.1.2.1.

Ctype funkcije

........................................................................................................................................14

4.1.2.2.

Filter funkcije

.........................................................................................................................................14

4.1.2.3.

Regularni izrazi – regular expression, regex

..........................................................................................15

4.1.3.

Ostali nesigurni inputi

....................................................................................................................................16

4.1.3.1.

Priključenje skripti

.................................................................................................................................16

4.1.3.2.

Upload fajlova

........................................................................................................................................16

5.

IZBJEGAVANJE CROSS-SITE SKRIPTIRANJA (CROSS SITE SCRIPTING) - XSS

18

5.1.

HTML entiteti

..............................................................................................................................................18

5.2.

Izbacivanje HTML tagova

...........................................................................................................................19

6.

SQL

......................................................................................................................................................20

6.1.

Eliminisanje  ubacivanja  SQL

.....................................................................................................................20

6.1.1.

Escape inputa – mysql_real_escape_string ()

.................................................................................................21

6.1.2.

Prepared statements (pripremljeni izrazi)

.......................................................................................................21

7.

ČUVANJE LOZINKE VAN DATOTEKA SAJTA

.................................................................22

8.

ČUVANJE LOZINKI

.....................................................................................................................23

8.1.

Password hashing

.........................................................................................................................................23

8.1.1.

MD5

................................................................................................................................................................23

8.1.2.

SHA-1

.............................................................................................................................................................24

1

8.2.

Funkcije password_hash() i password_verify()

............................................................................................24

9.

SUOČAVANJE SA IZGUBLJENIM LOZINKAMA

.............................................................25

10.

POTVRĐIVANJE PODATAKA SA HEŠOM

..........................................................................26

11.

ŠIFROVANJE I DEŠIFROVANJE PODATAKA

...................................................................28

12.

SKLADIŠTENJE ŠIFROVANIH PODATAKA U DATOTECI ILI BAZI PODATAKA

30

13.

SSL (SECURE SOCKETS LAYER)

...........................................................................................31

13.1.

SSL (Secure Sockets Layer)  sertifikati

....................................................................................................32

13.2.

Prebacivanje sa HTTP na HTTPS

...........................................................................................................32

13.2.1.

Kupovina SSL sertifikata ili korišćenje besplatnog sertifikata – AutoSSL / Let’s Encrypt

..........................32

13.2.2.

Instalacija i provjera SSL sertifikata

..............................................................................................................32

13.2.3.

Izmjena svih HTTP linkova u HTTPS linkove

..............................................................................................33

13.2.4.

Postavljanje trajne (301) redirekcije sa HTTP na HTTPS verziju web stranice

............................................33

14.

ZAKLJUČAK

...................................................................................................................................34

15.

DODATAK

........................................................................................................................................35

15.1.

Sprečavanje  fiksiranja  sesije

..................................................................................................................35

15.2.

Zaštita od lažnog predstavljanja forme (oblika)

......................................................................................35

15.3.

Osiguravanje filtriranja unosa (input-a)

..................................................................................................35

15.4.

Izbjegavanje Cross-Site skriptiranja

........................................................................................................35

15.5.

Eliminisanje ubacivanja SQL

...................................................................................................................36

15.6.

Čuvanje lozinke van datoteka vašeg sajta

................................................................................................36

15.7.

Suočavanje sa izgubljenim lozinkama

......................................................................................................36

15.8.

Potvrđivanje podataka sa hešom

..............................................................................................................37

15.9.

Detektovanje SSL

.....................................................................................................................................37

16.

LITERATURA

....................................................................................................................................................38

2

background image

U slučaju kada se koriste podaci koji su obezbijeđeni od neke treće strane, uključujući i 

podatke od samih korisnika, potrebno je prvo verifikovati da su  validni. Ovaj proces je poznat kao 
filtriranje. Potrebno je naglasiti da se ne mogu svi bezbjedonosni problemi riješiti filtriranjem input-
a i izbjegavanjem output-a. 

Bezbjednost se može podići na viši nivo prostim testiranjem. Razmišljanjem kao da ste 

napadač, uzima se u obzir svaki mogući scenario i na taj način se koristi aplikacija. Obično se kreće  
od prostijih stvari: isključivanjem JavaScript, nakon čega se šalje prazan formular, unose neispravni 
podaci, pokušaj SQL Injection. 

Usko povezano sa bezbjednošću je šifrovanje. Šifrovanje predstavlja jedan moćan alat koji 

pomaže da se poveća sigurnost aplikacije, ukoliko se koristi ispravno.   Šifrovanje se koristi za 
kodiranje podataka. Ukoliko se kodiranje podataka ne može dešifrovati bez velike količine obrade, 
tada  se  to   naziva    jednosmjernim   šifrovanjem   ili  heširanjem   (

one-way   encryption

  or  

hashing)

Ostale metode šifrovanja rade u dva pravca: podaci se šifruju, a onda se dešifruju.

PHP snabdijeva alatima za šifrovanje i zaštitu podataka. Neki alati su dio PHP osnovnog 

seta funkcija (  

pass word_hash()  

funkcija), a neki su proširenja koja eksplicitno treba da budu 

uključena kada se PHP sastavlja (

mcrypt

mhash

, i 

cURL

).

Osjetljivi podaci treba da budu zaštićeni ne samo na serveru, već i kada putuju kroz mrežu 

između servera i korisnika. Podaci poslati regularnim  

HTTP  

su vidljivi svima koji imaju pristup 

mreži u bilo kom trenutku, između vašeg servera i korisnika. 

4

2. Sesije

Sesije predstavljaju jedinstvenu vezu između vašeg računara i serverskog računara. Može se reći 

da omogućavaju da se izgradi veća inetrakcija sa posjetiocima, gdje se pri svakom zahtjevu zna da 
se radi o određenom korisniku i da se njemu pružaju sadržaji koji su namijenjeni isključivo za 
njega, individualno.  Pored toga,  server koristi sesiju radi praćenja statusa vašeg rada. Server kreira 
sesije po potrebi. Kada se otvori web stranica u pretraživaču, server kreira sesiju i učitava poslednju 
verziju web stranice. Iako može biti otvorena samo jedna web stranica po sesiji, ista web stranica 
može biti istovremeno otvorena u nekoliko različitih sesija od strane različitih korisnika. Ali isto 
tako, može se imati istovremeno otvorenih više sesija, sa istom ili različitom web stranicom.

Sesija   se   može   završiti   (ili okončati)   kada   je   korisnik   prekine,   eksplicitno   ili   implicitno. 

Međutim, postoji mogućnost da se sesija završi iako korisnik nije završio sa njom, tako što   je 
server završava jer je otkrio da nije postojala korisnička interakcija u okviru odrđenog perioda. 
Ukoliko server završi sesiju na ovaj način, to se naziva vremenskim ograničenjem sesije.

Kako bi se spriječilo vremensko ograničenje sesije, morate imati interakciju sa web stranicom. 

Kada server otkrije korisničku interakciju sa web stranicom, sesija ostaje aktivna.

Potrebno je istaći da  sesije omogućavaju kreiranje varijable koje traju između zahtjeva. Kako bi 

sesije   mogle   da   funkcionišu,   svaki   zahtjev   korisnika   mora   da   sadrži   identifikator   sesije   koji 
jedinstveno identifikuje sesiju, odnosno i klijent i server moraju imati neke indentične podatke za 
identifikaciju. 

Podrazumijeva se da, PHP prihvata identifikator sesije poslat u kolačiće (

cookies

), ali ako je 

session.use_on ly_cookies

  podešen na 1, on će prihvatiti identifikator sesije u URL. Napadač može 

prevariti žrtvu  prateći vezu do vaše aplikacije koja uključuje ugrađeni identifikator sesije:

<a href="http://example.org/login.php?PHPSESSID=1234">Click Here!</a>

Korisnik koji prati ovaj link će nastaviti sesiju identifikovanu kao 1234. Dakle, napadač sada 

zna   korisnički  identifikator   sesije   i   može  pokušati   da  otme   sesiju   korisnika   predstavljajući   isti 
identifikator sesije.

Ukoliko se korisnik nikada ne prijavi ili ne izvrši bilo koju radnju koja ga diferencira od ostalih 

korisnika vaše aplikacije, napadač ne postiže ništa otimanjem sesije. Stoga, osiguravajući da se 
identifikator sesije obnavlja kad god postoji promjena u nivou privilegija, efikasno se eliminiše 
napad fiksiranja sesije. PHP vodi računa o ažuriranju skladišta podataka sesije i propagiranju novog 
identifikatora sesije, pa se ova funkcija poziva samo po potrebi.

Dok je čuvanje i vođenje sesije preko URL adrese veoma nesigurno, čuvanje u kolačićima 

(cookies) je znatno sigurnije, iz sledećih razloga:

kolačići se ne vide, odnosno šalju se kroz header zahtjeva,

mogu biti enkriptovani i tako transportovani (HTTPS).

Mana kolačićima je u tome što se na klijentskoj strani mogu isključiti, pa u tom slučaju se sesija 

ne   bi   mogla   održati.   U   novijim   verzijama   PHP-a,   podrazumijevano   je   uključeno   čuvanje 

5

background image

2.2. Fiksacija sesije (Session Fixation)

Fiksacija sesije predstavlja kreiranje identifikatora sesije od strane napadača i na taj način vrši se 

ignorisanjePHP sistema za kreiranje identifikatora. Osim toga što ovo može da izazove greške u 
radu aplikacije, može da predstavlja i veoma ozbiljan sigurnosni propust. Da bi se ovo riješilo 
potrebno je izvršiti ponovno generisanje identifikatora sesije:

<?php   session_star   ()   ;   if(!isset   ($_SESSION   ['pokrenuta'])){session_regenerate_id   (); 

$_SESSION {'pokrenuta'}=true;}?>

Zaštita je upravo u toj provjeri da li je takva sesija već pokrenuta i ukoliko nije, generisaće se 

novi identifikator sesije koji će ujedno prepisati identifikator napadača. Ovaj kod je „best practice“ 
za kreiranje sesija. 

7

Želiš da pročitaš svih 38 strana?

Prijavi se i preuzmi ceo dokument.

Ovaj materijal je namenjen za učenje i pripremu, ne za predaju.

Slični dokumenti