# Kif tevitaw SQL injection f'PHP

> Evita SQL injection f'PHP: Prepared Statements b'PDO u mysqli, listi permessi għall-kolonni, drittijiet limitati tad-database. B'eżempji tal-kodiċi.

Sors: https://phpsos.de/mt/ratgeber/sql-injection-php/  
Stat: 25/10/2026  
Fornitur: PHP SOS, Għajnuna ta' emerġenza għal PHP u sigurtà tas-server. Għajnuna immedjata fuq WhatsApp: https://wa.me/491736494914?text=Bongu%20PHP%20SOS%2C%20g%C4%A7andna%20b%C5%BConn%20g%C4%A7ajnuna%20bis-server%20tal-PHP%20tag%C4%A7na.%20Kumpanija%3A%20%E2%80%A6%20Websajt%3A%20%E2%80%A6

**Fil-qosor:** SQL injection f'PHP tevitawha b'mod affidabbli billi qatt ma tdaħħlu valuri f'testi SQL, imma dejjem tgħadduhom permezz ta' Prepared Statements bi placeholders. Għal ismijiet ta' kolonni u tabelli, li ma jistgħux jgħaddu bħala placeholders, tgħodd lista permessa fissa. Barra minn hekk utent tad-database b'drittijiet minimi jillimita l-ħsara jekk xorta jibqa' ftuħ.

## Għaliex SQL injection m'għandhiex titlef mill-għajn wara PHP2Shell

F'Ottubru 2026 ħafna jduru madwar PHP2Shell, żewġ vulnerabbiltajiet kritiċi fl-interpretatur ta' PHP, rranġati mill-21/10/2026 f'PHP 8.5.12, 8.4.27, 8.3.36 u 8.2.35. Ħafna timijiet f'dawn il-jiem aġġornaw servers u erġgħu bdew proċessi. Dan huwa tajjeb u urġenti.

Stat attwali ta' PHP, madankollu, ma jgħid xejn dwar il-kodiċi proprju. SQL injection hija għal snin wieħed mill-iktar dgħufijiet frekwenti fl-applikazzjonijiet tal-web u fl-OWASP Top 10 tinsab fil-kategorija Injection. Min diġà qed jippjana verifiki tas-sigurtà għandu jħares ukoll lejn l-aċċessi tad-database tal-applikazzjoni tiegħu.

Aħbar tajba: SQL injection hija waħda mid-dgħufijiet rari li jistgħu jiġu esklużi kważi għal kollox b'regola sempliċi applikata b'mod konsistenti.

## Kif tinħoloq SQL injection f'PHP?

SQL injection tinħoloq meta applikazzjoni tittratta inputs tal-utenti bħala parti minn kmand SQL minflok bħala data pura. Tipiku huwa li mistoqsija tinbena minn blokok ta' test u varjabbli. Jekk viżitatur jista' jiddetermina l-kontenut ta' varjabbli bħal din, jista' f'ċerti każijiet jibdel it-tifsira tal-kmand.

Il-konsegwenzi jibdew mill-qari ta' data barranija tal-klijenti, permezz tal-bidla ta' prezzijiet jew drittijiet, sa tħassir ta' tabelli sħaħ. Skont id-database u d-drittijiet, vulnerabbiltà tista' tippermetti wkoll aċċessi lil hinn mid-database. Jekk hemm data personali affettwata, jista' jinqala' obbligu ta' notifika skont il-GDPR.

Inputs mhumiex biss l-oqsma tal-formoli. Anke parametri tal-URL, cookies, headers HTTP, fajls mgħobbija, tweġibiet ta' interfaces barranin u data diġà maħżuna fid-database proprja huma meqjusa mhux affidabbli.

## Prepared Statements b'PDO u mysqli

Prepared Statements jibagħtu l-kmand SQL u l-valuri separatament lid-database. Il-valuri qatt ma jiġu interpretati bħala parti mill-kmand. B'PDO mistoqsija sikura tidher hekk:

```php
<?php
$pdo = new PDO($dsn, $benutzer, $passwort, [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_EMULATE_PREPARES   => false,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);

$stmt = $pdo->prepare('SELECT id, name, email FROM kunden WHERE id = :id AND status = :status');
$stmt->execute([
    'id'     => (int) $_GET['id'],
    'status' => 'aktiv',
]);
$kunde = $stmt->fetch();
```

L-għażla `PDO::ATTR_EMULATE_PREPARES => false` tiżgura li d-database tuża Prepared Statements veri, safejn id-driver jappoġġjah. B'mysqli japplika l-istess prinċipju:

```php
<?php
$stmt = $mysqli->prepare('SELECT id, name FROM produkte WHERE kategorie = ? AND preis <= ?');
$stmt->bind_param('sd', $kategorie, $maxPreis);
$stmt->execute();
$ergebnis = $stmt->get_result();
```

Anke listi għal `IN (...)` jistgħu jiġu rrappreżentati b'mod sikur billi toħolqu placeholder separat għal kull valur u tgħaddu l-valuri separatament.

```php
<?php
$ids = array_map('intval', $ausgewaehlteIds);
$platzhalter = implode(',', array_fill(0, count($ids), '?'));
$stmt = $pdo->prepare("SELECT id, name FROM produkte WHERE id IN ($platzhalter)");
$stmt->execute($ids);
```

## Każijiet speċjali: ismijiet tal-kolonni, ordni u SQL mhux ipproċessat

Placeholders jaħdmu biss għall-valuri, mhux għal ismijiet ta' tabelli, ismijiet ta' kolonni jew direzzjonijiet tal-ordni. Propju hawn fil-prattika jinqalgħu ħafna vulnerabbiltajiet, pereżempju f'tabelli li jistgħu jiġu ordnati jew f'filtri. Is-soluzzjoni hija lista fissa ta' valuri permessi:

```php
<?php
$erlaubteSpalten = ['name' => 'name', 'preis' => 'preis', 'datum' => 'erstellt_am'];
$spalte   = $erlaubteSpalten[$_GET['sort'] ?? ''] ?? 'name';
$richtung = (($_GET['dir'] ?? '') === 'desc') ? 'DESC' : 'ASC';

$stmt = $pdo->query("SELECT id, name, preis FROM produkte ORDER BY $spalte $richtung");
```

Frameworks u CMS jġibu għodod proprji. F'WordPress `$wpdb->prepare()` jieħu din il-kompitu, f'Laravel u Symfony l-Query Builder u l-ORMs. Hekk kif hemmhekk tużaw SQL mhux ipproċessat, pereżempju permezz ta' funzjonijiet bi “raw” fl-isem, jerġgħu japplikaw ir-regoli ta' din it-taqsima. Tagħrif dwar Laravel issibu taħt [Kif tassiguraw applikazzjonijiet Laravel](https://phpsos.de/mt/plattformen/laravel/).

> **Suġġeriment:**
> Fittxu fil-kodiċi b'mod immirat testi SQL li fihom jiddaħħlu varjabbli. Bidu sempliċi huwa tiftix għal `query(` u `->raw` flimkien ma' `$_GET`, `$_POST` jew `$_REQUEST`.

## Sib SQL injection fil-kodiċi eżistenti

F'softwer ġdid ir-regola tista' titħares mill-bidu. Aktar diffiċli huwa f'applikazzjonijiet li kibru matul is-snin. Hemmhekk jixraq tiftix sistematiku għal postijiet fejn testi SQL jinbnew b'varjabbli:

```bash
# Kmandi SQL li fihom jiddaħħlu varjabbli
grep -rnE "(SELECT|INSERT|UPDATE|DELETE)[^;]*\\\$[a-zA-Z_]" src/ --include="*.php" | head -50
# Użu dirett ta' data tat-talba f'funzjonijiet ta' mistoqsijiet
grep -rnE "(query|exec|raw)\s*\(.*\\\$_(GET|POST|REQUEST|COOKIE)" src/ --include="*.php"
```

Mhux kull sejba hija vulnerabbiltà, pereżempju meta l-varjabbli fiha biss isem fiss ta' tabella. Kull post misjub, madankollu, għandu jiġi vverifikat darba b'mod konxju u, jekk meħtieġ, jinbidel għal Prepared Statements. Għodod ta' analiżi statika tal-kodiċi jgħinu biex mudelli bħal dawn jingħarfu dejjem fil-pipeline tal-build, hekk li żbalji ġodda ma jmorrux live.

## Illimitaw il-ħsara: drittijiet, messaġġi ta' żball, verifika

Kodiċi sikur huwa l-ewwel linja ta' difiża. Saffi oħra jillimitaw il-ħsara jekk xorta vulnerabbiltà tgħaddi mingħajr ma tiġi nnotata:

- **Drittijiet minimi:** L-utent tad-database tal-websajt ġeneralment jeħtieġ biss `SELECT`, `INSERT`, `UPDATE` u `DELETE` fuq id-database proprja, l-ebda drittijiet biex joħloq utenti jew biex jaċċessa databases oħra.
- **L-ebda messaġġi ta' żball 'il barra:** `display_errors = Off` fil-php.ini. L-iżbalji tad-database jappartjenu fil-log, mhux fil-browser.
- **Separazzjoni għal kull applikazzjoni:** Kull websajt tirċievi utent proprju tad-database.
- **Żommu d-dipendenzi aġġornati:** Vulnerabbiltajiet jinsabu wkoll fil-libreriji, kif turi l-gwida [composer audit](https://phpsos.de/mt/ratgeber/composer-abhaengigkeiten-pruefen/).
- **Ħallu jivverifikaw:** Code review u analiżi awtomatizzata jsibu ħafna postijiet, test ta' penetrazzjoni juri x'jista' verament jintlaħaq minn barra.

```sql
-- Eżempju: utent tad-database biss bid-drittijiet meħtieġa
CREATE USER 'shop_app'@'localhost' IDENTIFIED BY '<starkes Passwort>';
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'shop_app'@'localhost';
```

Dgħufija relatata tolqot l-output tad-data fil-browser. Kif tassiguraw dan tispjega l-gwida [Kif tevitaw Cross-Site Scripting f'PHP](https://phpsos.de/mt/ratgeber/xss-php/).

## Kif tgħin PHP SOS b'mod konkret?

- Nivverifikaw b'mod sistematiku l-aċċessi tad-database tal-applikazzjoni tagħkom għal mistoqsijiet mhux sikuri.
- Nipprijoritizzaw is-sejbiet skont l-aċċessibbiltà u d-data affettwata u nuru korrezzjonijiet konkreti.
- Nissettjaw id-drittijiet tad-database u l-ġestjoni tal-iżbalji fuq livell sikur.
- Nittestjaw mill-ġdid wara l-korrezzjoni u niddokumentaw ir-riżultat.

Verifika indipendenti tiddeskrivi s-servizz [Awdit tas-sigurtà u test ta' penetrazzjoni](https://phpsos.de/mt/leistungen/sicherheitsaudit-penetrationstest/).


## Mistoqsijiet frekwenti

**Huwa biżżejjed li nittrattaw l-inputs b'addslashes jew real_escape_string?**  
Le, dan huwa suxxettibbli għal żbalji. L-escaping jiddependi mis-sett tal-karattri u mill-kuntest u jintnesa faċilment f'post wieħed. Prepared Statements jifirdu fundamentalment il-kmand mid-data u huma għalhekk it-triq rakkomandata.

**ORM jipproteġi awtomatikament minn SQL injection?**  
Fil-biċċa l-kbira, sakemm tużaw il-funzjonijiet tal-mistoqsijiet tal-ORM. Hekk kif tikteb SQL mhux ipproċessat jew iddaħħal valuri fl-ordni jew fl-ismijiet tal-kolonni, japplikaw l-istess regoli bħal mingħajr ORM.

**Web Application Firewall tgħin kontra SQL injection?**  
WAF tista' taqbad mudelli magħrufa u taqla' ħin. Madankollu ma tissostitwixxix kodiċi sikur, għax regoli bbażati fuq id-data tat-talba jistgħu jiġu evitati u kultant jolqtu inputs leġittimi.

**L-aġġornament ta' PHP kontra PHP2Shell jagħlaq ukoll vulnerabbiltajiet ta' SQL injection?**  
Le. PHP2Shell jolqot l-interpretatur ta' PHP. SQL injection hija żball fil-kodiċi tal-applikazzjoni u tibqa', ikun xi jkun il-verżjoni ta' PHP li taħdem.

## Sorsi

- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/)
- [php.net: Avviżi tas-sigurtà](https://www.php.net/)
