Sigurnost Web Aplikacija: Ključne Komponente Arhitekture i OWASP Top 10

Karikirani prikaz SQL napada
Osnove, Sigurnosne Prijetnje i OWASP Top 10

Svaki put kad otvoriš omiljenu web stranicu – bilo da gledaš vijesti, kupuješ online ili gledaš videozapise – koristiš složeni sustav koji se zove web aplikacija. Iako se čini kao da je sve što vidiš na ekranu prilično jednostavno, iza kulisa se odvija puno toga! Kako bi web stranice ispravno funkcionirale, moraju imati čvrstu arhitekturu, koja uključuje nekoliko ključnih elemenata. No, zašto je važno razumjeti kako te aplikacije rade, čak i ako nisi developer?

Razumijevanje osnovnih koncepata poput frontenda i backenda pomaže ti bolje shvatiti kako se podaci obrađuju i komuniciraju između tvog uređaja i servera. Uz to, znanje o sigurnosnim prijetnjama, kao što su one koje pokriva OWASP (Open Web Application Security Project), može ti pomoći da zaštitiš svoje osobne podatke prilikom korištenja interneta.

U nastavku ćemo ti objasniti kako sve ovo funkcionira – od osnovne arhitekture web aplikacija, preko ključnih dijelova frontenda i backenda, do uobičajenih sigurnosnih prijetnji i kako ih izbjeći. Krenimo!

Što je frontend i backend?

Kad govorimo o arhitekturi web aplikacija, ključni pojmovi su frontend i backend.

  • Frontend (ili klijentska strana) odnosi se na dio aplikacije koji korisnik izravno vidi i s kojim interagira. To su svi elementi s kojima korisnik komunicira putem svog preglednika, poput dizajna, tekstova, slika, gumba i obrazaca. Tehnologije koje se ovdje najčešće koriste su HTML, CSS i JavaScript. Frontend je odgovoran za prikazivanje podataka koje dohvaća iz backenda, ali ne može obrađivati složenije zadatke poput spremanja podataka u bazu podataka.
  • Backend (ili serverska strana) je “nevidljivi” dio aplikacije koji obrađuje podatke, izvršava poslovnu logiku i komunicira s bazama podataka. Dok frontend služi za interakciju s korisnikom, backend upravlja stvarnim funkcionalnostima aplikacije – prijavljivanjem korisnika, obrađivanjem narudžbi ili spremanjem podataka. Backend serveri koriste jezike kao što su PHP, Python, Java, Ruby i druge tehnologije, te rade na poslužiteljima koji obavljaju težak posao daleko od očiju korisnika.

Arhitektura web aplikacija

Web aplikacije općenito slijede više-slojnu arhitekturu, gdje se različite funkcionalnosti odvajaju u specifične slojeve:

  1. Prezentacijski sloj (Frontend) – Ovaj sloj komunicira izravno s korisnikom i prikazuje informacije u pregledniku. Korisnik vidi HTML, CSS i JavaScript kod koji su prikazani na stranici.
  2. Poslovna logika (Backend) – Ovdje se obrađuju svi zahtjevi korisnika. Kada korisnik pošalje podatke s web stranice (primjerice, ispunjavanjem obrasca), backend obrađuje te podatke i izvršava poslovnu logiku. Ovaj sloj komunicira s bazom podataka i vraća obrađene podatke natrag na frontend.
  3. Baza podataka – To je mjesto gdje se svi podaci aplikacije pohranjuju. Korisnički računi, narudžbe, proizvodi, transakcije i drugi podaci spremaju se u bazu podataka, najčešće koristeći sustave poput MySQL, PostgreSQL ili MongoDB.

API-ji (Application Programming Interfaces) također imaju važnu ulogu u web aplikacijama. API omogućuje komunikaciju između različitih komponenti aplikacije – frontend šalje zahtjeve prema backendu putem API-ja, a backend šalje odgovore. Na taj način, aplikacija može biti modularna i fleksibilna, olakšavajući održavanje i razvoj.


OWASP Top 10 sigurnosnih prijetnji

OWASP-ova lista Top 10 sigurnosnih prijetnji pomaže developerima i organizacijama identificirati najkritičnije ranjivosti web aplikacija. Evo detaljnijeg objašnjenja svake prijetnje, uz primjere:

1. SQL Injection

SQL Injection je napad u kojem napadač manipulira SQL upitima unutar aplikacije kako bi pristupio podacima koje ne bi smio vidjeti. To uključuje osjetljive informacije poput korisničkih računa ili financijskih podataka. Napadač obično unosi zlonamjerni SQL kod u polje za unos podataka (npr. korisničko ime ili lozinku), što aplikaciji omogućuje da izvrši neželjene SQL naredbe.

Primjer: Napadač može unijeti ' OR '1'='1 u obrazac za prijavu, što aplikaciju može natjerati da zaobiđe provjeru autentifikacije i omogući pristup sustavu.

Kako spriječiti: Koristite pripremljene izjave (prepared statements) i ORM (Object-Relational Mapping) sustave za sigurno rukovanje SQL upitima.


2. Cross-Site Scripting (XSS)

XSS je napad u kojem napadač umetne zlonamjerni JavaScript kod u web stranicu koji se izvršava na preglednicima korisnika. Ovi skripti mogu krasti kolačiće sesije, preusmjeravati korisnike na zlonamjerne web stranice ili čak otkriti osjetljive podatke.

Primjer: Napadač postavlja zlonamjernu skriptu na forumu, a svaki korisnik koji otvori tu stranicu automatski izvršava taj skript, omogućujući napadaču krađu sesijskih kolačića.

Kako spriječiti: Implementirajte filtriranje unosa korisnika (input sanitization) i šifriranje podataka (output encoding) kako bi se spriječilo umetanje neželjenih skripti u aplikaciju.


3. Neispravna autentifikacija

Ova ranjivost nastaje kada aplikacija ne osigura adekvatne mehanizme autentifikacije, dopuštajući napadačima da preuzmu korisničke račune ili dobiju pristup neovlaštenim dijelovima aplikacije. Uzrok mogu biti slabe lozinke, nezaštićene sesije ili propusti u upravljanju autentifikacijom.

Primjer: Ako aplikacija ne ograničava broj pokušaja prijave, napadači mogu koristiti brute-force napade za pogađanje lozinki i ulazak u korisničke račune.

Kako spriječiti: Implementirajte višefaktorsku autentifikaciju (MFA), ograničite broj neuspjelih pokušaja prijave i pravilno upravljajte sesijama.


4. Izlaganje osjetljivih podataka

Ako aplikacija ne šifrira osjetljive podatke, napadači mogu pristupiti informacijama poput lozinki, brojeva kreditnih kartica i osobnih podataka. Problem nastaje kada podaci nisu šifrirani prilikom prijenosa ili pohrane, što omogućuje neovlašteni pristup tim podacima.

Primjer: Web stranica koja ne koristi HTTPS omogućuje napadačima presretanje podataka koji se šalju između korisnika i servera, poput lozinki ili podataka o kreditnoj kartici.

Kako spriječiti: Koristite HTTPS za osiguranje prijenosa podataka i enkripciju za pohranjivanje osjetljivih informacija u bazi podataka.


5. Neispravna kontrola pristupa

Napadači mogu iskoristiti nedostatke u kontrolama pristupa kako bi pristupili resursima ili funkcionalnostima na koje nemaju pravo. Ovo uključuje mogućnost mijenjanja korisničkih dozvola ili neovlaštenog pristupa osjetljivim podacima.

Primjer: Korisnik može promijeniti svoju korisničku ulogu u administracijsku jednostavnom promjenom parametara URL-a, što mu omogućava pristup osjetljivim dijelovima aplikacije.

Kako spriječiti: Uvijek provjeravajte dozvole na strani servera i implementirajte stroge kontrole pristupa.


6. Pogrešna konfiguracija sigurnosti

Sigurnosne pogreške u konfiguraciji nastaju kada aplikacije, serveri ili mrežni uređaji nisu pravilno konfigurirani, što otvara vrata napadima. Uobičajene pogreške uključuju ostavljanje zadanih lozinki, omogućavanje nepotrebnih usluga ili postavljanje nedovoljno restriktivnih pravila za pristup.

Primjer: Administratori ostavljaju zadane lozinke za pristup administrativnom panelu, omogućujući napadačima lak ulazak.

Kako spriječiti: Redovito provjeravajte i ažurirajte sigurnosne postavke, uklonite nepotrebne funkcionalnosti i koristite automatizirane alate za skeniranje sigurnosnih propusta.


7. Cross-Site Request Forgery (CSRF)

CSRF napad iskorištava povjerenje preglednika korisnika prema autentificiranoj web aplikaciji. Napadač prevari korisnika da nenamjerno izvrši radnju u web aplikaciji bez njegova znanja, poput promjene lozinke ili prijenosa novca.

Primjer: Korisnik klikne na zlonamjernu poveznicu koja ga preusmjerava na stranicu gdje se nenamjerno izvršava promjena postavki njegovog računa.

Kako spriječiti: Koristite CSRF tokene u obrascima i provjeravajte autentičnost zahtjeva kako biste osigurali da dolaze od korisnika.


8. Nesigurna deserializacija

Ovaj napad se događa kada aplikacija nesigurno pretvara podatke iz jednog formata u drugi. Napadač može iskoristiti nesigurne serijalizirane objekte kako bi pokrenuo zlonamjerni kod unutar aplikacije, što može dovesti do krađe podataka ili preuzimanja kontrole nad serverom.

Primjer: Napadač šalje izmijenjene serijalizirane podatke aplikaciji, što omogućuje izvršavanje neovlaštenih naredbi na serveru.

Kako spriječiti: Pažljivo upravljajte deserializacijom podataka i koristite digitalne potpise za validaciju podataka prije deserializacije.


9. Korištenje komponenti s poznatim ranjivostima

Aplikacije koje koriste zastarjele softverske komponente s poznatim sigurnosnim ranjivostima podložne su napadima. To uključuje zastarjele biblioteke, frameworkove i druge softverske komponente.

Primjer: Aplikacija koristi zastarjeli verziju frameworka koji ima poznatu ranjivost, omogućujući napadaču da iskorištava sigurnosni propust.

Kako spriječiti: Redovito ažurirajte softverske komponente i koristite alate za praćenje sigurnosnih ranjivosti.


10. Nedovoljno bilježenje i nadzor

Ako aplikacija ne prati i bilježi sumnjive aktivnosti, napadači mogu dugo ostati neotkriveni u sustavu. Nedostatak adekvatnog praćenja onemogućava brzo otkrivanje i odgovor na sigurnosne incidente.

Primjer: Aplikacija ne bilježi pokušaje neovlaštenog pristupa, pa administratori ne mogu pravovremeno reagirati na prijetnje.

Kako spriječiti: Implementirajte detaljno praćenje i bilježenje svih sigurnosnih aktivnosti te postavite automatske alarme za sumnjive aktivnosti.


Zaključak

Razumijevanje arhitekture web aplikacija i sigurnosnih prijetnji ključno je za svakog korisnika i developera. OWASP-ova Top 10 lista daje vrijedan uvid u najčešće sigurnosne ranjivosti i pruža smjernice za njihovo ublažavanje, čime aplikacije postaju sigurnije za korisnike diljem svijeta.

Leave a comment

Your email address will not be published. Required fields are marked *