SQL injekzio

**SQL injekzioa** kodigo intruso infiltrazio metodo bat da, eta aplikazio bateko balidazio-mailan zaurgarritasun informatiko batez abantaila hartuz, datu-base batean operazioak egitea ahalbidetzen du. Ahultasun honen jatorria, SQL kodea duen edo sortzen duen programa batean erabilitako aldagaiak behar bezala ez egiaztatzean edo iragaztean datza. Izan ere, beste hizkuntza batean txertatuta dagoen programazio-lengoaia edo script batean gerta daitekeen kalteberatasun mota orokorrago baten errorea da. SQL Injekzioa zaurgarritasun mota edo infiltrazio metodo bat izan daiteke. Hau gertatzen da ezjakintasuna eta konprobazio ezarengatik, adibidez: SQL intruso kodea txertatzea eta inkrustatutako kode zatia kontuan ez hartzea.

### Deskribapena 
*SQL injekzio* bat dago edo sortu da, nolabait, SQL kode inbaditzailea programatutako SQL kodearen barruan txertatzen edo "injektatzen" denean, programaren funtzionamendu normala aldatzeko eta, horrela, datu-basean txertatutako kode "inbaditzailearen" zatia exekutatzea lortzen da. Intrusio mota hori maltzurra, kaltegarria edo espioia izan ohi da, eta, beraz, segurtasun informatikoko arazo bat da, eta aplikazioaren programatzaileak kontuan hartu behar du, saihestu ahal izateko. Arduragabekeriaz edo arazoari buruzko ezjakintasunez egindako programa bat kaltebera izan daiteke, eta sistemaren segurtasuna (datu-basea) arriskuan jar daiteke.

Intrusioa programa zaurgarria exekutatzean gertatzen da, bai mahaigaineko ordenagailuetan bai webguneetan, azken kasu horretan horiek hartzen dituen zerbitzarian exekutatzen da. Kalteberatasuna automatikoki gerta daiteke programa batek SQL sententzia bat gauzatze-denboran sortzean, edo garapen-fasean, programatzaileak SQL sententzia modu babesgabean exekutatzen duenean. Programatzaileak erabiltzaileak sartu beharreko parametroak behar eta erabiltzen baditu datu-base bat kontsultatzeko, parametroen barruan sar daiteke SQL intruso kodea.

Kontsulta datu-basean exekutatzean, injektatutako SQL kodea ere exekutatu egingo da, eta hainbat ekintza egin ahal izango ditu, hala nola erregistroak txertatu, datuak aldatu edo ezabatu, sarbideak baimendu eta ordenagailuan beste kode maltzur mota bat exekutatu. Adibidez, hurrengo kode honek web-aplikazio batean dagoen eta kontsultatu beharreko erabiltzaile-izena duen "izenaErabiltzaile" parametro bat du.

Sententzia honek, "erabiltzaileak" taulako kontsultatu nahi den erabiltzaile-izen baten (izenaErabiltzaile) datuak ("erabiltzaileak" taulan ageri diren datuak) itzultzen ditu. SQL kode originala eta ahula:
```sql
kontsulta := "SELECT * FROM erabiltzaileak WHERE izena = '" + izenaErabiltzaile + "';"
```
Erabiltzaileak izen bat idazten baldin badu, adibidez "Amaia", taulako "Amaia" erabiltzailearen datuak itzuliko ditu. Aplikazioak SQL sententzia bat sortuko du, hurrengoaren antzekoa, non datu-basean "Amaia" izena duten erregistro guztiak hautatuko dira:
```sql
SELECT * FROM erabiltzaileak WHERE izena = 'Amaia';
```
Baina hurrengo sententzia izenaren ondoren idaztean:
```sql
Nekane'; DROP TABLE erabiltzaileak; SELECT * FROM datuak WHERE izena LIKE '%
```
Hurrengo SQL kontsulta sortuko da:
```sql
SELECT * FROM erabiltzaileak WHERE izena = 'Nekane';

DROP TABLE erabiltzaileak;

SELECT * FROM datuak WHERE izena LIKE '%
```
Datu-basean, kontsulta adierazitako ordenan exekutatuko da, 'Nekane' izeneko erregistro guztiak hautatuko dira (SELECT * FROM erabiltzaileak WHERE izena = 'Nekane'), 'erabiltzaileak' taula ezabatuko da (DROP TABLE erabiltzaileak) eta, azkenik, "datuak" taula osoa hautatuko du (SELECT * FROM datuak WHERE izena LIKE '%), web-erabiltzaile arruntek eskuragarri izan behar ez dutena. Laburbilduz, programatzaileak aurreikusi behar du erabiltzaileek egin al dituzten kontsultak, informazio lapurreta, gehiketa edo galera ekiditeko.

## Kanpo estekak