# SQL-Injection i PHP a chosc

> SQL-Injection i PHP a chosc: Prepared Statements le PDO agus mysqli, liostaí ceadaithe le haghaidh colún agus íoschearta bunachair sonraí. Le samplaí cóid.

Foinse: https://phpsos.de/ga/ratgeber/sql-injection-php/  
Staid: 25/10/2026  
Soláthraí: PHP SOS, Cabhair éigeandála PHP agus slándáil freastalaí. Cabhair láithreach trí WhatsApp: https://wa.me/491736494914?text=Dia%20duit%2C%20a%20PHP%20SOS%2C%20t%C3%A1%20cabhair%20de%20dh%C3%ADth%20orainn%20len%C3%A1r%20bhfreastala%C3%AD%20PHP.%20Cuideachta%3A%20%E2%80%A6%20Su%C3%ADomh%20gr%C3%A9as%C3%A1in%3A%20%E2%80%A6

**Go achomair:** SQL-Injection i PHP a chosc go hiontaofa: ná cuir luachanna isteach i dtéacsanna SQL riamh, ach tabhair thar iad i gcónaí trí Prepared Statements le ionadchoimeádáin. Do ainmneacha colún agus tábla nach féidir a thabhairt thar mar ionadchoimeádáin, baineann liosta ceadaithe seasta. Ina theannta sin teorannaíonn úsáideoir bunachair sonraí le híoschearta an damáiste má fhanann bearna ann fós.

## Cén fáth nár cheart SQL-Injection a ligean as radharc tar éis PHP2Shell

I nDeireadh Fómhair 2026 tá go leor ag casadh ar PHP2Shell, dhá leochaileacht chriticiúla san ateangaire PHP, ceartaithe ón 21.10.2026 i PHP 8.5.12, 8.4.27, 8.3.36 agus 8.2.35. Nuashonraigh a lán foirne freastalaithe sna laethanta sin agus d'atosaigh siad próisis. Tá sin ceart agus práinneach.

Ní insíonn staid reatha PHP rud ar bith faoi do chód féin, áfach. Is ceann de na laigí is minice i bhfeidhmchláir ghréasáin é SQL-Injection leis na blianta agus liostaítear é san OWASP Top 10 faoin gcatagóir Injection. An té atá ag pleanáil seiceálacha slándála ar aon nós, ba cheart dó féachaint ar rochtana bunachair sonraí a fheidhmchláir chomh maith.

An dea-scéal: tá SQL-Injection ar cheann de na laigí gann is féidir a chur as an áireamh beagnach go hiomlán le riail shimplí a chuirtear i bhfeidhm go comhsheasmhach.

## Conas a tharlaíonn SQL-Injection i PHP?

Tarlaíonn SQL-Injection nuair a láimhseálann feidhmchlár ionchuir úsáideora mar chuid d'ordú SQL seachas mar shonraí glana. Is tipiciúil fiosrúchán a chur le chéile as blocanna téacs agus athróga. Má tá cumas ag cuairteoir inneachar athróige den sórt sin a chinneadh, féadfaidh sé brí an ordaithe a athrú, i gcúinsí áirithe.

Ritheann na hiarmhairtí ó shonraí cliant coimhthíoch a léamh go praghsanna nó cearta a athrú agus táblaí iomlána a scriosadh. De réir an bhunachair sonraí agus na gceart, is féidir le bearna rochtain a cheadú thar an mbunachar sonraí freisin. Má bhíonn sonraí pearsanta i gceist, d'fhéadfadh dualgas tuairiscithe a bheith ann faoin GDPR.

Ní hionann ionchuir agus páirceanna foirme amháin. Meastar nach bhfuil iontaofa ach an oiread paraiméadair URL, fianáin, ceanntásca HTTP, comhaid uaslódáilte, freagraí ó chomhéadain choimhthíocha agus sonraí a stóráladh cheana ó do bhunachar sonraí féin.

## Prepared Statements le PDO agus mysqli

Seolann Prepared Statements an t-ordú SQL agus na luachanna ar leithligh chuig an mbunachar sonraí. Ní léirmhínítear na luachanna riamh mar chuid den ordú. Le PDO tá cuma mar seo ar fhiosrúchán slán:

```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();
```

Cinntíonn an rogha `PDO::ATTR_EMULATE_PREPARES => false` go n-úsáideann an bunachar sonraí fíor-Prepared Statements, a mhéid a thacaíonn an tiománaí leis. Le mysqli baineann an prionsabal céanna:

```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();
```

Is féidir liostaí do `IN (...)` a léiriú go slán freisin trí ionadchoimeádán ar leith a chruthú do gach luach agus na luachanna a thabhairt thar ar leithligh.

```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);
```

## Cásanna speisialta: ainmneacha colún, sórtáil agus SQL amh

Ní oibríonn ionadchoimeádáin ach do luachanna, ní d'ainmneacha táblaí, d'ainmneacha colún ná do threoracha sórtála. Anseo go beacht a tharlaíonn a lán bearnaí sa phraiticiúlacht, mar shampla le táblaí sórtálta nó le scagairí. Is é an réiteach liosta seasta de luachanna ceadaithe:

```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");
```

Tagann uirlisí dá gcuid féin le creataí agus CMS. I WordPress glacann `$wpdb->prepare()` an tasc seo air, i Laravel agus Symfony na Query Builders agus ORMs. A luaithe a úsáideann tú SQL amh ansin, mar shampla trí fheidhmeanna le “raw” san ainm, baineann rialacha an chuid seo arís. Gheobhaidh tú nótaí faoi Laravel ag [Feidhmchláir Laravel a chosaint](https://phpsos.de/ga/plattformen/laravel/).

> **Leid:**
> Cuardaigh sa chód go sonrach téacsanna SQL ina gcuirtear athróga isteach. Is tús simplí é cuardach ar `query(` agus `->raw` i gcomhcheangal le `$_GET`, `$_POST` nó `$_REQUEST`.

## SQL-Injection a rianú sa chód atá ann cheana

Le bogearraí nua is féidir an riail a choinneáil ón tús. Tá sé níos deacra le feidhmchláir a d'fhás thar na blianta. Ansin is fiú cuardach córasach a dhéanamh ar áiteanna ina gcuirtear téacsanna SQL le chéile le hathróga:

```bash
# Orduithe SQL ina gcuirtear athróga isteach
grep -rnE "(SELECT|INSERT|UPDATE|DELETE)[^;]*\\\$[a-zA-Z_]" src/ --include="*.php" | head -50
# Sonraí iarratais a úsáid go díreach i bhfeidhmeanna fiosraithe
grep -rnE "(query|exec|raw)\s*\(.*\\\$_(GET|POST|REQUEST|COOKIE)" src/ --include="*.php"
```

Ní bearna gach torthaí, mar shampla nuair nach bhfuil san athróg ach ainm seasta tábla. Ba cheart gach fionnachtain a sheiceáil go feasach uair amháin agus a aistriú chuig Prepared Statements más gá. Cabhraíonn uirlisí d'anailís staitiúil chóid na patrúin sin a aithint go buan sa phíblíne tógála, ionas nach dtéann earráidí nua beo ar chor ar bith.

## An damáiste a theorannú: cearta, teachtaireachtaí earráide, seiceáil

Is é cód slán an chéad líne chosanta. Teorannaíonn sraitheanna eile an damáiste má fhágtar bearna amach ar aon nós:

- **Íoschearta:** De ghnáth níl ag teastáil ó úsáideoir bunachair sonraí an tsuímh ach `SELECT`, `INSERT`, `UPDATE` agus `DELETE` ar a bhunachar féin, gan cearta chun úsáideoirí a chruthú ná rochtain a fháil ar bhunachair sonraí eile.
- **Gan teachtaireachtaí earráide amach:** `display_errors = Off` i php.ini. Is leis an logchomhad a bhaineann earráidí bunachair sonraí, ní leis an mbrabhsálaí.
- **Scaradh do gach feidhmchlár:** Faigheann gach suíomh gréasáin úsáideoir bunachair sonraí ar leith.
- **Spleáchais a choinneáil cothrom le dáta:** Tá bearnaí i leabharlanna freisin, mar a thaispeánann an treoir [composer audit](https://phpsos.de/ga/ratgeber/composer-abhaengigkeiten-pruefen/).
- **Seiceáil a iarraidh:** Aimsíonn athbhreithniú cóid agus anailís uathoibrithe a lán áiteanna, léiríonn tástáil treáite cad atá inrochtana ón taobh amuigh i ndáiríre.

```sql
-- Sampla: úsáideoir bunachair sonraí leis na cearta riachtanacha amháin
CREATE USER 'shop_app'@'localhost' IDENTIFIED BY '<starkes Passwort>';
GRANT SELECT, INSERT, UPDATE, DELETE ON shop.* TO 'shop_app'@'localhost';
```

Baineann laige gaolmhar le taispeáint sonraí sa bhrabhsálaí. Conas é sin a chosaint, míníonn an treoir [Cross-Site Scripting i PHP a chosc](https://phpsos.de/ga/ratgeber/xss-php/).

## Conas a chabhraíonn PHP SOS go nithiúil?

- Seiceálaimid rochtana bunachair sonraí d'fheidhmchláir go córasach le haghaidh fiosruithe neamhshlána.
- Tosaímid na torthaí de réir inrochtaineachta agus sonraí lena mbaineann agus léirímid ceartúcháin nithiúla.
- Cuirimid cearta bunachair sonraí agus láimhseáil earráidí ar leibhéal slán.
- Tástálaimid arís tar éis an cheartaithe agus doiciméadaímid an toradh.

Déanann an tseirbhís [Iniúchadh slándála agus tástáil threáite](https://phpsos.de/ga/leistungen/sicherheitsaudit-penetrationstest/) cur síos ar sheiceáil neamhspleách.


## Ceisteanna coitianta

**An leor ionchuir a láimhseáil le addslashes nó real_escape_string?**  
Ní leor, tá sé buailte ar earráidí. Braitheann escaping ar an tacar carachtar agus ar an gcomhthéacs agus déantar dearmad air go héasca in áit amháin. Scarann Prepared Statements ordú agus sonraí go bunúsach agus is é sin an bealach molta dá bhrí sin.

**An gcosnaíonn ORM go huathoibríoch in aghaidh SQL-Injection?**  
Go mór mór, fad is a úsáideann tú feidhmeanna fiosraithe an ORM. A luaithe a scríobhann tú SQL amh nó a chuireann tú luachanna isteach i sórtálacha agus in ainmneacha colún, baineann na rialacha céanna agus nach mbeadh ORM ann.

**An gcabhraíonn Web Application Firewall in aghaidh SQL-Injection?**  
Is féidir le WAF patrúin aitheanta a ghabháil agus am a cheannach. Ní chuireann sé cód slán ina ionad, áfach, mar is féidir rialacha atá bunaithe ar shonraí iarratais a sheachaint agus uaireanta buaileann siad ionchuir dhlisteanacha.

**An ndúnann an nuashonrú PHP in aghaidh PHP2Shell bearnaí SQL-Injection freisin?**  
Ní dhúnann. Bíonn tionchar ag PHP2Shell ar an ateangaire PHP. Is earráid i gcód an fheidhmchláir é SQL-Injection agus fanann sé beag beann ar cén leagan PHP a ritheann.

## Foinsí

- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
- [OWASP Cheat Sheet Series](https://cheatsheetseries.owasp.org/)
- [php.net: tuarascálacha slándála](https://www.php.net/)
