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 →

PHP u databases: PDO u mysqli

PHP titkellem ma' databases permezz ta' PDO jew mysqli. Hawn tarau d-differenzi, mistoqsijiet sikuri b'prepared statements u x'għandu jsir bl-aċċessi tad-database wara inċident fuq server.

Stat 5 min. qariGħarfien dwar PHP

Fil-qosor: PHP taċċessa databases permezz ta' żewġ interfaces mifruxa: PDO (PHP Data Objects) jaħdem ma' ħafna sistemi ta' databases permezz ta' interface uniformi, mysqli huwa mfassal għal MySQL u MariaDB. Ma' tnejn minnhom, il-prepared statements, jiġifieri mistoqsijiet bi placeholders, jipproteġu b'mod affidabbli minn SQL injection. Minn PHP 8.0 (PDO) rispettivament 8.1 (mysqli) it-tnejn jirrapportaw l-iżbalji bħala exception b'mod predefinit.

Kif PHP titkellem mad-databases

Kważi kull applikazzjoni PHP taħżen il-kontenut tagħha f'database: paġni, ordnijiet, kontijiet tal-utenti, settings. L-iskrip PHP jistabbilixxi għal dan konnessjoni, jibgħat mistoqsija fil-lingwa SQL u jipproċessa r-riżultat. L-aċċessi normalment jinsabu f'fajl tal-konfigurazzjoni fuq l-istess server.

Għall-maniġment dan huwa importanti, għax id-database normalment fiha d-dejta l-aktar prezzjuża tal-kumpanija. Min jista' jesegwixxi kodiċi fuq is-server tal-web, bħala regola jista' jaqra wkoll il-fajl tal-konfigurazzjoni u b'dawn l-aċċessi jaċċessa d-database.

PDO u mysqli imqabbla

Karatteristika PDO mysqli
Databases ħafna, permezz ta' drivers bħal PDO_MYSQL, PDO_PGSQL, PDO_SQLITE, PDO_SQLSRV, PDO_OCI MySQL u MariaDB
Placeholders msemmija (:name) u posizzjonali (?) posizzjonali (?)
Stil orjentat lejn l-oġġetti orjentat lejn l-oġġetti u proċedurali
Żbalji bħala exception standard minn PHP 8.0.0 standard minn PHP 8.1.0
Forma qasira għal mistoqsijiet bi parametri prepare() u execute() b'array execute_query() minn PHP 8.2.0

Fil-prattika spiss jiddeċiedi l-framework jew iċ-CMS. Ħafna jġibu saff proprju tad-database li ġewwa juża PDO jew mysqli. Min jieħu applikazzjoni jista' b'tiftix sempliċi fil-kodiċi sors jistabbilixxi liema interface qed tintuża u fejn jinħolqu l-mistoqsijiet:

# Fejn l-applikazzjoni tistabbilixxi konnessjonijiet, fejn jinħolqu l-mistoqsijiet?
grep -rn --include='*.php' -E 'new PDO|new mysqli|mysqli_connect|->query\(' /var/www/app/src | head -50

Postijiet misjuba b'->query( mhumiex awtomatikament mhux sikuri. Imma jixirqilhom ħarsa oħra, għax hemmhekk il-valuri jistgħu jidħlu direttament fit-test SQL, minflok ma jiġu mgħoddija permezz ta' placeholders. Proġetti eqdem speċjalment jaħلطu ż-żewġ stili, u l-verifika tħallas qabel kull aġġornament ikbar.

Prepared statements: l-aktar mudell importanti

F'prepared statement il-mistoqsija tintbagħat lid-database bi placeholders u l-valuri jiġu mgħoddija separatament. Skont il-manwal ta' PHP, dan jipproteġi minn SQL injection jekk l-inputs kollha tal-utent jgħaddu minn placeholders.

<?php
declare(strict_types=1);

$pdo = new PDO(
    'mysql:host=localhost;dbname=shop;charset=utf8mb4',
    $dbUser,
    $dbPass,
    [PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC]
);

$stmt = $pdo->prepare('SELECT id, name FROM kunden WHERE plz = :plz AND aktiv = :aktiv');
$stmt->execute(['plz' => $plz, 'aktiv' => 1]);

foreach ($stmt as $zeile) {
    echo htmlspecialchars($zeile['name'], ENT_QUOTES, 'UTF-8'), "\n";
}

L-istess ħaġa b'mysqli fil-forma qasira li teżisti minn PHP 8.2:

<?php
$db = new mysqli('localhost', $dbUser, $dbPass, 'shop');
$ergebnis = $db->execute_query('SELECT id, name FROM kunden WHERE plz = ?', [$plz]);

foreach ($ergebnis as $zeile) {
    echo htmlspecialchars($zeile['name'], ENT_QUOTES, 'UTF-8'), "\n";
}

L-iżviluppaturi għandhom jaf żewġ limiti. Il-placeholders m'għandhomx jitpoġġew bejn l-ilsiera; fi tfittxijiet LIKE il-karattri ta' placeholder % jappartjenu fil-valur mgħoddi. U l-placeholders jissostitwixxu biss valuri, mhux ismijiet ta' tabelli jew kolonni. Kif dawn il-każijiet speċjali jissolvew b'mod sigur turi l-gwida Kif tipprevjenu SQL injection f'PHP.

Trattament tal-iżbalji: exceptions minflok żbalji silenzjużi

Qabel, iż-żewġ interfaces kienu jaħdmu b'mod silenzjuż b'mod predefinit: mistoqsija falluta kienet tirritorna false, u min ma kkontrollax dan kompla jaħdem b'dejta vojta. Dan inbidel:

  • PDO: Minn PHP 8.0.0 PDO::ERRMODE_EXCEPTION huwa l-istandard. L-iżbalji jitfgħu PDOException.
  • mysqli: Minn PHP 8.1.0 ir-rapportar huwa ssettjat fuq MYSQLI_REPORT_ERROR u MYSQLI_REPORT_STRICT. L-iżbalji jitfgħu mysqli_sql_exception; qabel ir-rapportar kien mitfi.

Għas-sigurtà dan ifisser: l-exceptions iridu jinqabdu u jiġu rreġistrati, imma qatt ma għandhom jispiċċaw fil-browser bit-test SQL, ismijiet ta' tabelli jew aċċessi. Kif dan jinfired b'mod nadif tiddeskrivi l-paġna Żbalji u exceptions f'PHP.

L-aċċessi u d-drittijiet jinħarġu sew

Id-database hija mħarsa biss daqs l-aċċessi tagħha. Dawn ir-regoli ġew ittestjati:

  1. Utent proprju għal kull applikazzjoni: Qatt tużaw l-amministratur tad-database għall-websajt.
  2. Biss id-drittijiet meħtieġa: Websajt normalment teħtieġ qari, kitba, bidla u tħassir fid-database proprja tagħha, imma ebda drittijiet fuq databases oħra jew funzjonijiet tas-server.
  3. Ebda konnessjoni mill-bogħod mingħajr raġuni: Id-database għandha tintlaħaq biss mis-server tal-web, mhux mill-internet.
  4. Aċċessi barra mill-webroot: Fajls tal-konfigurazzjoni u .env m'għandhomx ikunu jistgħu jintalbu permezz ta' URL. Aktar dwar dan fl-artikolu Ħarsien tal-aċċessi u tal-fajls .env.
  5. Konnessjoni ċċifrata b'servers separati: Jekk id-database tinsab fuq magna oħra, il-konnessjoni għandha taħdem ċċifrata, biex l-aċċessi u l-kontenut ma jgħaddux fix-xibka bħala test ċar.
  6. Aċċessi proprji għall-manutenzjoni: Backup, evalwazzjonijiet u amministraturi jirċievu utenti proprji. B'hekk fil-log jista' jiġi segwit min għamel xiex, u aċċess jista' jiġi msakkar mingħajr ma tiġi disturbata l-websajt.

Databases, PHP2Shell u l-każ serju

PHP2Shell ma tolqotx id-database nnifisha, imma l-interpretatur ta' PHP: CVE-2026-109618 u CVE-2026-109619 jippermettu l-eżekuzzjoni ta' kodiċi malizzjuż mingħajr login. Jekk jirnexxi, il-kodiċi jaħdem bid-drittijiet tal-proċess ta' PHP u b'hekk bħala regola jista' jaqra l-fajl tal-konfigurazzjoni bl-aċċessi tad-database. Il-prepared statements ma jgħinux kontra dan, għax l-attakk ma jgħaddix minn mistoqsija SQL.

Obbligatorju għalhekk huwa l-aġġornament għal PHP 8.5.12, 8.4.27, 8.3.36 jew 8.2.35 u r-restart tal-proċessi kollha ta' PHP. Jekk hemm indikazzjonijiet ta' attakk b'suċċess, jappartjenu aċċessi ġodda tad-database, verifika tad-database għal kontenut injettat u valutazzjoni tal-obbligu ta' notifika skont il-GDPR. Hawnhekk Incident Response strutturata tagħmel sens.

Suġġeriment

Ibdlu l-passwords tad-database biss wara t-tindif tas-server. Sakemm jaħdem kodiċi malizzjuż, jista' jaqra mill-ġdid ukoll aċċessi ġodda.

Kif jgħin PHP SOS konkretament?

  • Neżaminaw kif l-applikazzjoni tagħkom taċċessa d-database, u jekk l-utenti, id-drittijiet u l-aċċess tan-netwerk jaqblux mal-minimu.
  • Nikkontrollaw jekk il-fajls tal-konfigurazzjoni u tal-aċċessi jinsabux barra mill-webroot u ma jintlaħqux pubblikament.
  • Wara inċident niġġeddu l-aċċessi fl-ordni t-tajba u nivverifikaw id-database għal kodiċi injettat.
  • Niddokumentaw ir-riżultati b'mod li l-uffiċjali tal-protezzjoni tad-data u l-assiguraturi jkunu jistgħu jsegwuhom.

Mistoqsijiet frekwenti

Għandi nuża PDO jew mysqli?

Għal proġetti ġodda PDO spiss ikun l-għażla aktar flessibbli, għax jaħdem ma' ħafna databases permezz tal-istess interface. mysqli jagħmel sens jekk tużaw esklussivament MySQL jew MariaDB u teħtieġu l-funzjonijiet speċjali tagħhom. It-tnejn huma siguri jekk il-prepared statements jintużaw b'mod konsistenti.

PDO jitfa' awtomatikament exceptions meta jkun hemm żbalji?

Iva, minn PHP 8.0.0 PDO::ERRMODE_EXCEPTION huwa l-istandard. Qabel kien il-modalità silenzjuża, li fiha l-iżbalji setgħu jinkisbu biss permezz ta' errorCode() u errorInfo(). Applikazzjonijiet eqdem spiss għadhom jissettjaw il-modalità espliċitament.

Placeholders jistgħu jissostitwixxu wkoll ismijiet ta' tabelli jew kolonni?

Le. Il-placeholders jirrappreżentaw valuri biss. Ismijiet ta' tabelli u kolonni, pereżempju għal ordni, iridu jiġu vverifikati kontra lista fissa ta' ismijiet permessi qabel ma jiddaħħlu fil-mistoqsija.

Wara PHP2Shell irrid nibdel il-password tad-database?

L-aġġornament waħdu ma jitlobx dan. Imma jekk hemm indikazzjonijiet li s-server kien kompromess, l-aċċessi kollha fil-fajls tal-konfigurazzjoni jitqiesu magħrufa. Allura għandkom tiġġedduhom wara t-tindif.

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