Sitwazzjoni attwali: PHP2Shell. Żewġ vulnerabbiltajiet kritiċi ta' PHP (CVSS 9,2) jippermettu kodiċi malizzjuż mingħajr login. Patches mill-21/10/2026.X'għandu jsir issa →

Kif tevitaw SQL injection f'PHP

Kif l-iżviluppaturi jeskludu b'mod affidabbli SQL injection f'applikazzjonijiet ta' PHP b'Prepared Statements, listi permessi u drittijiet minimi tad-database.

Stat 5 min. qariGwidi

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
$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
$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
$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
$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.

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:

# 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.
  • Ħallu jivverifikaw: Code review u analiżi awtomatizzata jsibu ħafna postijiet, test ta' penetrazzjoni juri x'jista' verament jintlaħaq minn barra.
-- 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.

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.

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

Kuntatt immedjat

Kull siegħa tgħodd. Iktbu lilna issa.

Iddeskrivu fil-qosor is-sistema, il-verżjoni ta' PHP u dak li osservajtu. Nikkuntattjawkom, niċċaraw is-sitwazzjoni u naħdmu mill-bogħod sakemm l-inċident jingħalaq u jiġi ddokumentat.

Għajnuna immedjata