An cás reatha: PHP2Shell. Ceadaíonn dhá leochaileacht chriticiúla PHP (CVSS 9.2) cód mailíseach gan logáil isteach. Paistí ar fáil ón 21 Deireadh Fómhair 2026.Cad atá le déanamh anois →

PHP agus bunachair sonraí: PDO agus mysqli

Labhraíonn PHP le bunachair sonraí trí PDO nó mysqli. Seo na difríochtaí, fiosruithe sábháilte le Prepared Statements agus cad atá le déanamh le rochtain bhunachair sonraí tar éis teagmhais freastalaí.

Staid Am léitheoireachta: 6 nóim.Eolas PHP

Go achomair: Faigheann PHP rochtain ar bhunachair sonraí trí dhá chomhéadan fhorleathana: oibríonn PDO (PHP Data Objects) le go leor córas bunachar sonraí trí chomhéadan aonfhoirmeach, tá mysqli deartha do MySQL agus MariaDB. Leis an mbeirt, cosnaíonn Prepared Statements, is é sin fiosruithe le sealbhóirí áite, go hiontaofa i gcoinne SQL injection. Ó PHP 8.0 (PDO) nó 8.1 (mysqli) i leith, tuairiscíonn an bheirt earráidí mar Exception de réir réamhshocraithe.

Conas a labhraíonn PHP le bunachair sonraí

Stórálann beagnach gach feidhmchlár PHP a ábhar i mbunachar sonraí: leathanaigh, orduithe, cuntais úsáideora, socruithe. Bunaíonn an script PHP nasc chuige sin, seolann sé fiosrúchán sa teanga SQL agus próiseálann sé an toradh. De ghnáth bíonn na sonraí rochtana i gcomhad cumraíochta ar an bhfreastalaí céanna.

Do bhainistíocht tá sé seo tábhachtach, mar go mbíonn sonraí is luachmhaire na cuideachta i mbunachar sonraí de ghnáth. An té atá in ann cód a rith ar an bhfreastalaí gréasáin, is féidir leis i gcoitinne an comhad cumraíochta a léamh agus rochtain a fháil ar an mbunachar sonraí leis na sonraí rochtana sin.

PDO agus mysqli i gcomparáid

Gné PDO mysqli
Bunachair sonraí go leor, trí thiománaithe ar nós PDO_MYSQL, PDO_PGSQL, PDO_SQLITE, PDO_SQLSRV, PDO_OCI MySQL agus MariaDB
Sealbhóirí áite ainmnithe (:name) agus suímh (?) suímh (?)
Stíl oibiachtbhunaithe oibiachtbhunaithe agus nós imeachta
Earráidí mar Exception réamhshocrú ó PHP 8.0.0 réamhshocrú ó PHP 8.1.0
Gearrfhoirm d'fhiosruithe le paraiméadair prepare() agus execute() le eagar execute_query() ó PHP 8.2.0

Sa chleachtas is minic gurb é an fráma-obair nó an CMS a chinneann. Tugann a lán acu sraith bhunachar sonraí dá gcuid féin leo a úsáideann PDO nó mysqli go hinmheánach. An té a ghlacann le feidhmchlár, is féidir leis le cuardach simplí sa chód foinseach a fháil amach cén comhéadan a úsáidtear agus cá dtagann fiosruithe chun cinn:

# Cá mbunaíonn an feidhmchlár naisc, cá dtagann fiosruithe chun cinn?
grep -rn --include='*.php' -E 'new PDO|new mysqli|mysqli_connect|->query\(' /var/www/app/src | head -50

Níl torthaí le ->query( neamhshábháilte go huathoibríoch. Ach tá dara súil tuillte acu, mar go bhféadfadh luachanna dul go díreach isteach sa téacs SQL ansin in ionad iad a aistriú trí shealbhóirí áite. Meascann tionscadail níos sine go háirithe an dá stíl, agus is fiú an tseiceáil roimh gach nuashonrú mór.

Prepared Statements: an patrún is tábhachtaí

I gcás Prepared Statement, seoltar an fiosrúchán leis na sealbhóirí áite chuig an mbunachar sonraí agus aistrítear na luachanna ar leithligh. De réir lámhleabhar PHP, cosnaíonn sé sin i gcoinne SQL injection má ritheann gach ionchur úsáideora trí shealbhóirí áite.

<?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";
}

An rud céanna le mysqli sa ghearrfhoirm atá ann ó 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";
}

Ba cheart d'fhorbróirí dhá theorainn a bheith ar eolas acu. Níor cheart do shealbhóirí áite a bheith idir comharthaí athfhriotail; i gcuardaigh LIKE baineann na carachtair shealbhóra áite % leis an luach a aistrítear. Agus ní chuireann sealbhóirí áite luachanna in ionad ach, ní ainmneacha táblaí ná colún. Taispeánann an treoir SQL injection a chosc i PHP conas cásanna speisialta den sórt sin a réiteach go sábháilte.

Láimhseáil earráidí: Exceptions in ionad earráidí ciúine

Roimhe seo d'oibrigh an dá chomhéadan go ciúin de réir réamhshocraithe: thug fiosrúchán teipthe false ar ais, agus an té nár sheiceáil é, lean sé ag obair le sonraí folmha. Tá sé sin athraithe:

  • PDO: Ó PHP 8.0.0 is é PDO::ERRMODE_EXCEPTION an réamhshocrú. Caitheann earráidí PDOException.
  • mysqli: Ó PHP 8.1.0 tá tuairisciú earráidí socraithe go MYSQLI_REPORT_ERROR agus MYSQLI_REPORT_STRICT. Caitheann earráidí mysqli_sql_exception; roimhe sin bhí an tuairisciú múchta.

Don tslándáil ciallaíonn sé seo: ní mór Exceptions a ghabháil agus a logáil, ach níor cheart dóibh teacht chun cinn sa bhrabhsálaí riamh le téacs SQL, ainmneacha táblaí nó sonraí rochtana. Déanann an leathanach Earráidí agus Exceptions i PHP cur síos ar an gcaoi leis seo a scaradh go glan.

Sonraí rochtana agus cearta a thabhairt i gceart

Níl an bunachar sonraí cosanta ach chomh maith lena shonraí rochtana. Tá na rialacha seo cruthaithe:

  1. Úsáideoir ar leith do gach feidhmchlár: Ná húsáid riarthóir an bhunachair sonraí don suíomh gréasáin riamh.
  2. Na cearta riachtanacha amháin: Teastaíonn léamh, scríobh, athrú agus scriosadh ó shuíomh gréasáin de ghnáth ina bhunachar sonraí féin, ach níl aon chearta ag teastáil uaidh ar bhunachair sonraí eile ná ar fheidhmeanna freastalaí.
  3. Gan nasc cianda gan chúis: Níor cheart an bunachar sonraí a bheith inrochtana ach ón bhfreastalaí gréasáin, ní ón Idirlíon.
  4. Sonraí rochtana lasmuigh den webroot: Ní mór do chomhaid chumraíochta agus .env gan a bheith inrochtana trí URL. Tuilleadh san alt Sonraí rochtana agus comhaid .env a chosaint.
  5. Nasc criptithe le freastalaithe scartha: Má tá an bunachar sonraí ar ríomhaire eile, ba cheart don nasc rith criptithe ionas nach dtéann sonraí rochtana agus ábhar tríd an líonra i gclár soiléir.
  6. Rochtain ar leith do chothabháil: Faigheann cúltacaí, anailísí agus riarthóirí úsáideoirí dá gcuid féin. Ar an gcaoi sin is féidir sa log a rianú cé a rinne cad, agus is féidir rochtain a bhlocáil gan cur isteach ar an suíomh gréasáin.

Bunachair sonraí, PHP2Shell agus an cás is measa

Ní bhaineann PHP2Shell leis an mbunachar sonraí féin, ach leis an ateangaire PHP: ceadaíonn CVE-2026-109618 agus CVE-2026-109619 cód mailíseach a rith gan logáil isteach. Má éiríonn leis, ritheann an cód le cearta an phróisis PHP agus is féidir leis dá bhrí sin an comhad cumraíochta a léamh le sonraí rochtana an bhunachair sonraí. Ní chabhraíonn Prepared Statements ina choinne sin, mar nach rithfidh an t-ionsaí trí fhiosrúchán SQL ar chor ar bith.

Dá bhrí sin tá nuashonrú go PHP 8.5.12, 8.4.27, 8.3.36 nó 8.2.35 agus atosú gach próiseas PHP éigeantach. Má tá comharthaí ann go raibh ionsaí rathúil ann, tá sonraí rochtana nua bunachair sonraí, seiceáil an bhunachair sonraí le haghaidh ábhar a cuireadh isteach agus measúnú ar an dualgas fógartha faoin GDPR mar chuid de. Anseo tá Incident Response struchtúrtha ciallmhar.

Leid

Athraigh pasfhocail bhunachar sonraí tar éis an fhreastalaí a ghlanadh amháin. Fad is atá cód mailíseach ag rith, is féidir leis sonraí rochtana nua a léamh amach arís freisin.

Conas a chabhraíonn PHP SOS go praiticiúil?

  • Seiceálaimid conas a fhaigheann do fheidhmchlár rochtain ar an mbunachar sonraí, agus an bhfreagraíonn úsáideoirí, cearta agus rochtain líonra don íosmhéid.
  • Deimhnímid an bhfuil comhaid chumraíochta agus rochtana lasmuigh den webroot agus nach bhfuil siad inrochtana go poiblí.
  • Tar éis teagmhais, athnuachaimid na sonraí rochtana san ord ceart agus seiceálaimid an bunachar sonraí le haghaidh cóid a cuireadh isteach.
  • Déanaimid na torthaí a dhoiciméadú ionas gur féidir le hoifigigh cosanta sonraí agus árachóirí iad a leanúint.

Ceisteanna coitianta

An ceart dom PDO nó mysqli a úsáid?

Do thionscadail nua is minic gurb é PDO an rogha níos solúbtha, mar go n-oibríonn sé le go leor bunachar sonraí tríd an gcomhéadan céanna. Tá mysqli ciallmhar má úsáideann tú MySQL nó MariaDB amháin agus má theastaíonn a bhfeidhmeanna speisialta uait. Tá an bheirt sábháilte má úsáidtear Prepared Statements go comhsheasmhach.

An gcaitheann PDO Exceptions go huathoibríoch nuair a tharlaíonn earráid?

Caitheann, ó PHP 8.0.0 is é PDO::ERRMODE_EXCEPTION an réamhshocrú. Roimhe sin ba é an mód ciúin a bhí ann, ina raibh earráidí inrochtana trí errorCode() agus errorInfo() amháin. Is minic a shocraíonn seanfheidhmchláir an mód go sainráite fós.

An féidir le sealbhóirí áite ainmneacha táblaí nó colún a chur in ionad?

Ní féidir. Ní sheasann sealbhóirí áite ach do luachanna. Ní mór ainmneacha táblaí agus colún, mar shampla le haghaidh sórtála, a sheiceáil i gcoinne liosta seasta d'ainmneacha ceadaithe sula gcuirtear isteach sa fhiosrúchán iad.

An gcaithfidh mé pasfhocal an bhunachair sonraí a athrú tar éis PHP2Shell?

Ní éilíonn an nuashonrú amháin é sin. Ach má tá comharthaí ann go raibh an freastalaí sáraithe, measfar go bhfuil na sonraí rochtana go léir i gcomhaid chumraíochta ar eolas. Ansin ba cheart duit iad a athnuachan tar éis an ghlanta.

Foinsí

Teagmháil láithreach

Cuireann gach uair an chloig leis. Scríobh chugainn anois.

Déan cur síos gearr ar an gcóras, leagan PHP agus an rud a thug tú faoi deara. Cuirfimid scéala chugat, soiléireoimid an cás agus oibreoimid go cianda go dtí go mbeidh an teagmhas dúnta agus doiciméadaithe.

Cabhair láithreach