Mbrojtja nga SQL injection

***Mbrojtja ndaj SQL Injection*** është një temë mjaft aktuale pasi sulmet janë shumë të shpeshta. Injektimi SQL është forma më e zakonshme e sulmimit të ueb-faqeve pasi krijuesit e tyre lënë shumë hapësira. Prandaj është shumë e lehtë për sulmuesin që të gjejë pikat e dobëta në aplikacion dhe e kanë akoma më të lehtë që të manipulojnë dhe të vjedhin të dhëna nga databaza. Në sigurinë e rrjeteve nuk ekziston termi i mbrojtjes 100% ndaj këtyre sulmeve, prandaj njohuritë rreth mjeshtërive mbrojtëse ndaj sulmeve në kodin e bazës së të dhënave janë shumë me rëndësi.

## Mjeshtëritë mbrojtëse ndaj injektimit SQL 
# Validimi i të dhënave hyrëse
## Validimi whitelist
## Validimi blacklist
# Validimi i të dhënave dalëse
# Filtrat
# Firewall

### Validimi i të dhënave hyrëse 
Validimi i të dhënave hyrëse është proces i testimit të të dhënave hyrëse nga aplikacioni me standardin e përcaktuar në aplikacion. Kjo gjë mund të bëhet shumë lehtë, thjesht duke përdorur Shprehjet e Rregullta (Regular Expressions) ose duke u bazuar në logjikën dhe përmbajtjen e aplikacionit në fjalë. Validimi i të dhënave hyrëse bëhet në dy forma, përmes *validimit whitelist* (ndonjëherë duke referuar përfshirjen ose vlefshmërinë pozitive) dhe *validimit blacklist* (ndonjëherë i njohur si përjashtim ose vlefshmëri negative).

#### Validimi whitelist 
Validimi whitelist është një praktikë e pranimit të të dhënave hyrëse nëse ato mendohet se janë të sigurta. Validimi whitelist arrihet duke ndjekur hapat në vazhdim:
* Tipi i të dhënave (Data type): A është tipi i të dhënave korrekt? Nëse vlera duhet të jetë numër, a është numër? Nëse duhet të jetë numër pozitiv, kontrollo nëse është numër negativ.
* Madhësia e të dhënave (Data size): Nëse e dhëna është varg, a e ka gjatësinë e duhur? A është gjatësia më pak se maksimumi i lejuar? Nëse është numër, a është madhësia apo vlera korrekte?
* Shtrirja e të dhënave: Nëse e dhëna është numër, a është shtrirja e atij numri ajo që parashihet për këtë lloj të të dhënave?
* Përmbajtja e të dhënave: A duket përmbajtja e këtyre të dhënave ashtu siç parashihet? A janë përdorur vetëm karakteret të cilat parashihen për këtë tip të dhënash? Nëse dorëzohet një emër, atëherë duhet të jetë e pranueshme prania e disa shenjave të pikësimit.

#### Validimi blacklist 
Validimi blacklist është një praktikë e refuzimit të të dhënave hyrëse nëse ato nuk janë të sigurta. Zakonisht kjo mënyrë e validimit përfshin refuzimin e disa vargjeve apo modeleve specifike të cilat njihen si ndërhyrje "të këqija". Kjo qasje është parimisht më e dobët se validimi whitelist, pasi lista e karaktereve dhe vargjeve të dëmshme është shumë e gjatë për verifikim, e ngadaltë, e vështirë dhe jo e plotë.
Një metodë e zakonshme e zbatimit të një liste të zezë është përdorimi i shprehjeve të rregullta, me një listë të karaktereve ose vargjeve të cilat nuk lejohet të përdoren, siç është shembulli i mëposhtëm: 
'|% | - |, | / \ * | \ \ \ * | _ | \ [| @ | xp_

### Validimi i të dhënave dalëse 
Në mënyrë që të validohen të dhënat dalëse, shpesh është e nevojshme të kodohet pjesa që kalon në mes të dy moduleve të ndryshme të aplikacionit. Në kontekstin e SQL Injection, kjo aplikohet si shifrim ose "quote" dhe përmbajtja dërgohet në databazë për t'u siguruar se kjo është trajtuar në mënyrë të përshtatshme. Edhe nëse validimi i të dhënave hyrëse është bërë me kujdes, jo gjithmonë ky validim parandalon hyrjet e paautorizuara, pasi gjithmonë mund të ketë të meta në sistem. Mënyra më e mirë e parandalimit të problemeve të tilla është përdorimi i parametrave të deklaruar.

### Filtrat 
Filtrat janë seri të pavarura të moduleve të cilat performojnë zinxhir para dhe pas procesimit të kërkesave të caktuara (Ueb-faqe, URL, etj.). Filtrat kontrollojnë çdo të dhënë hyrëse dhe dalëse. Filtrat nuk kanë ndikim të drejtpërdrejtë në njëri-tjetrin, çka na mundëson shtimin e filtrave të tjerë pa ndikuar në ata ekzistues, dhe janë shumë të mirë në funksionet e sigurisë si validimi, kërkesat/përgjigjet dhe transformimi i informacioneve dalëse. Filtrat përfaqësojnë një sistem mjaft të sigurt dhe shumë të dëshirueshëm për parandalimin e sulmeve të tilla.
Para se të përdorni një filtër për të mbrojtur kërkesën tuaj në ueb nga injektimi SQL, është e rëndësishme 
që ju të kuptoni se si punon filtri dhe llojin e mbrojtjes që ofron. 
Edhe pse filtrat janë dokumente të rëndësishme të sigurisë runtime, ata mund të fusin një ndjenjë të rreme 
të sigurisë në qoftë se ju nuk e kuptoni plotësisht sjelljen e tyre dhe modelin e sigurisë që filtrat ofrojnë.
Në figurë është paraqitur mënyra se si punojnë filtrat:

parapamje|Puna e filtrit

### Firewall 
Firewall në thelb është një server i cili me funksion gjendet në mes të kërkesës dhe bazës së të dhënave. Aplikacioni lidhet me firewall-in e databazës dhe ia dërgon query-n si të ishte një lidhje normale me bazën e të dhënave. Firewall-i i databazës e analizon query-n dhe e kalon në bazën e të dhënave për ekzekutim nëse ai (query) konsiderohet i sigurt. Përndryshe, firewall-i nuk e dërgon kërkesën në bazën e të dhënave nëse ajo nuk është e sigurt.

## Referime