# Ionchuir i PHP a bhailíochtú agus a scagadh le filter_var

> Ionchuir i PHP a bhailíochtú le filter_var agus filter_input_array: uimhreacha, ríomhphost, URL, bool, liostaí ceadaithe agus teorainneacha. Le samplaí cóid.

Foinse: https://phpsos.de/ga/blog/eingaben-validieren-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:** Bailíochtaíonn tú ionchuir i PHP le `filter_var()` nó `filter_input_array()` agus le rialacha soiléire do gach réimse: cineál, raon, fad agus luachanna ceadaithe. An rud nach n-oireann, diúltaítear dó, ní athraítear go ciúin é. Tá bailíochtú tábhachtach le haghaidh sonraí glana agus dromchla ionsaithe níos lú, ach ní thagann sé in ionad ráiteas ullmhaithe i gcoinne SQL injection ná ionchódú atá ceart don chomhthéacs i gcoinne XSS.

## Cén fáth nach coincheap é „gach rud a scagadh“

I a lán seanthionscadal PHP faightear lúb ag tús gach comhaid a chuireann gach luach ó `$_GET` agus `$_POST` trí fheidhm ghlanta. Braitheann sé sábháilte. Sa chleachtas baineann sé uaireanta an iomarca, mar shampla uaschamóga in sloinnte, agus uaireanta ró-bheag, mar go gceaptar go mbaineann an fheidhm chéanna le SQL, le HTML agus le hainmneacha comhad ag an am céanna.

Oibríonn bailíochtú ciallmhar ar bhealach eile: fiafraíonn sé de gach réimse cad atá ceadaithe ann. Is slánuimhir idir 1 agus uasteorainn é méid ordaithe. Is ceann de thrí luach seasta é réimse sórtála. Tá dáta i bhformáid áirithe agus roimh dháta eile nó ina dhiaidh. Diúltaítear do gach rud eile.

Idirdhealaíonn OWASP idir dhá leibhéal anseo: an seiceáil **chomhréire**, an bhfuil an cruth ceart ag luach, agus an seiceáil **shéimeantach**, an bhfuil ciall leis sa chomhthéacs. Baineann an dá cheann leis an bhfreastalaí; ní fhónann seiceálacha sa bhrabhsálaí ach le haghaidh so-úsáidteachta.

## Cé na scagairí a thagann le PHP

Tá an eisínteacht scagaire san áireamh i PHP de réir réamhshocraithe. Na príomhscagairí bailíochtaithe de réir lámhleabhar PHP:

| Scagaire | Seiceálann | Roghanna tábhachtacha agus nótaí |
|---|---|---|
| `FILTER_VALIDATE_INT` | slánuimhir | `min_range`, `max_range` |
| `FILTER_VALIDATE_FLOAT` | uimhir dheachúlach | `decimal` don deighilteoir |
| `FILTER_VALIDATE_BOOL` | luach boole | idirdhealaithe ó „bréagach“ le `FILTER_NULL_ON_FAILURE` |
| `FILTER_VALIDATE_EMAIL` | cruth seolta ríomhphoist | ní chruthaíonn sé go bhfuil an bosca poist ann |
| `FILTER_VALIDATE_URL` | cruth URL | an scéim a sheiceáil tú féin, gan fearainn idirnáisiúnaithe |
| `FILTER_VALIDATE_IP` | seoladh IP | bratacha do raonta príobháideacha agus curtha in áirithe |
| `FILTER_VALIDATE_REGEXP` | patrún dá chuid féin | patrún a ancaireacht le `^` agus `$` |

Tá an scagaire glanta `FILTER_SANITIZE_STRING` as dáta ó PHP 8.1. An té a úsáideann fós é, ba cheart dó bailíochtú a aistriú go scagairí cuí agus `htmlspecialchars()` a úsáid don aschur.

## filter_var i PHP: foirm a sheiceáil go glan

Le `filter_input_array()` is féidir foirm iomlán a sheiceáil i gcéim amháin i gcoinne sainmhínithe. Ní ghlactar le réimsí anaithnide ansin:

```php
<?php
declare(strict_types=1);

$regeln = [
    'menge'   => ['filter' => FILTER_VALIDATE_INT,
                  'options' => ['min_range' => 1, 'max_range' => 50]],
    'email'   => FILTER_VALIDATE_EMAIL,
    'agb'     => ['filter' => FILTER_VALIDATE_BOOL, 'flags' => FILTER_NULL_ON_FAILURE],
    'versand' => ['filter' => FILTER_VALIDATE_REGEXP,
                  'options' => ['regexp' => '/^(standard|express)$/']],
];

$daten  = filter_input_array(INPUT_POST, $regeln) ?? [];
$fehler = [];

foreach ($regeln as $feld => $_) {
    if (!array_key_exists($feld, $daten) || $daten[$feld] === false || $daten[$feld] === null) {
        $fehler[] = $feld;
    }
}

if ($fehler !== []) {
    http_response_code(422);
    // Teachtaireacht earráide a thaispeáint do gach réimse, gan ionchuir a phróiseáil
}
```

Tabhair faoi deara na comparáidí dolúbtha le `===`: níor cheart luach bailí `0` ná teaghrán folamh a mheascadh le teip. Míníonn [Type Juggling: comparáidí scaoilte mar riosca slándála](https://phpsos.de/ga/blog/type-juggling-php/) cén fáth a bhfuil comparáidí scaoilte contúirteach anseo. Déanann [Superglobals: $_GET, $_POST, $_FILES agus eile](https://phpsos.de/ga/php/superglobals/) cur síos ar an gcaoi a gcuireann PHP sonraí iarratais ar fáil.

## Ceapacha le ríomhphost, URL agus téacsanna saora

Déanann roinnt scagairí níos lú ná mar a thugann a n-ainm le tuiscint:

1. **URLanna:** Glacann `FILTER_VALIDATE_URL` le scéimeanna eile seachas http agus https freisin. Seiceáil an scéim ina dhiaidh sin le `parse_url()` i gcoinne liosta seasta. Má ghlaotar ar an URL ón bhfreastalaí, baineann rialacha breise, féach [Server-Side Request Forgery a chosc i PHP](https://phpsos.de/ga/blog/ssrf-in-php/).
2. **Seoltaí ríomhphoist:** Seiceálann an scagaire an cruth, ní úinéireacht. An té ar gá dó a bheith cinnte, seolann sé nasc deimhniúcháin.
3. **Téacs saor:** Is ar éigean is féidir ainmneacha, teachtaireachtaí agus seoltaí a theorannú go ciallmhar do charachtair. Seiceáil an fad agus ionchódú carachtar, mar shampla le `mb_check_encoding($wert, 'UTF-8')`, agus bíodh ionchódú le haghaidh an aschuir mar bhonn leat.
4. **Slonn rialta:** Gan `^` agus `$`, ní sheiceálann patrún ach an dtarlaíonn sé áit éigin sa téacs, ní an bhfreagraíonn an luach ar fad.
5. **Eagair in ionad teaghráin:** Is féidir le hionsaitheoir eagar a sheoladh in ionad téacs. Gan seiceáil cineáil, bíonn rabhaidh nó iompar gan choinne mar thoradh air.

> **Leid:**
> Do roghanna seasta ar nós sórtáil, teanga nó modh seolta, tá liosta ceadaithe le `in_array($wert, $erlaubt, true)` nó nathanna `match` níos simplí agus níos déine ná aon slonn rialta.

Baineann earráid choitianta eile le huimhreacha a bhfuil brí leo, mar shampla praghsanna, méideanna nó lascainí. Ní insíonn sé aon ní faoi cibé an bhfuil sé ceadaithe sa chomhthéacs go bhfuil luach ina uimhir bhailí. Is earráidí lóistíochta clasaiceacha iad méid dhiúltach, lascaine os cionn luach an earra, nó praghas a ghlactar ón bhfoirm in ionad ón mbunachar sonraí. Dá bhrí sin baineann praghsanna, ceadanna agus luachanna stádais leis an bhfreastalaí i gcónaí agus riamh le réimsí foirme i bhfolach.

## JSON, webhooks agus allmhairithe: bailíochtú lasmuigh d'fhoirmeacha

Ní foirmeacha a thuilleadh iad a lán ionchuir inniu, ach iarratais JSON ó aipeanna, webhooks ó sheirbhísí íocaíochta nó comhaid allmhairithe ó sholáthraithe. Baineann an prionsabal céanna leo: léigh go slán ar dtús, seiceáil ina dhiaidh sin. Molann OWASP méid agus doimhneacht neadaithe a theorannú sula léitear sonraí ar chor ar bith. In PHP glacann `json_decode()` le doimhneacht uasta agus `JSON_THROW_ON_ERROR` cuid de:

```php
<?php
$roh = file_get_contents('php://input', false, null, 0, 65536); // 64 KB ar a mhéad
try {
    $daten = json_decode($roh, true, 16, JSON_THROW_ON_ERROR);
} catch (JsonException) {
    http_response_code(400);
    exit;
}
if (!is_array($daten) || !is_string($daten['bestellnummer'] ?? null)) {
    http_response_code(422);
    exit;
}
```

I gcás webhooks, sula ndéantar an tseiceáil ábhair, tá an cheist an dtagann an teachtaireacht i ndáiríre ón tseirbhís a luaitear. Má thairgeann an tseirbhís síniú, seiceáil é agus déan comparáid leis le `hash_equals()`. I gcás comhaid allmhairithe, seiceáil gach líne mar fhoirm agus stop go glan nuair a tharlaíonn earráidí, in ionad leaththaifead a ghlacadh.

Ba cheart go n-ainmneodh teachtaireachtaí earráide an réimse lena mbaineann, ach gan an luach diúltaithe a thabhairt ar ais gan scagadh. Seachas sin cruthaítear pointe aschuir nua ag an teachtaireacht earráide féin, ar gá é a ionchódú arís.

## Cad nach féidir le bailíochtú a dhéanamh

Laghdaíonn bailíochtú an dromchla ionsaithe, ach de réir OWASP ní hé an príomhchosaint i gcoinne injection é. Tá sloinne le huaschamóg bailí agus caithfidh sé teacht slán isteach i mbunachar sonraí fós. Ní éiríonn sé sin ach le ráitis ullmhaithe, mar a léiríonn an treoir [SQL injection a chosc i PHP](https://phpsos.de/ga/ratgeber/sql-injection-php/). Agus ní dhéantar téacs tráchta bailí neamhdhíobhálach ach le hionchódú atá ceart don chomhthéacs ag an aschur.

Is é an t-ord ceart mar sin: bailíochtú ag an nglacadh, paraiméadrú ag an bpróiseáil, ionchódú ag an aschur. Ina theannta sin teastaíonn teorainneacha méide rompu: níor cheart d'fhreastalaí gréasáin ná do PHP iarratais atá i bhfad ró-mhór a phróiseáil go hiomlán ar chor ar bith. Chuige sin úsáidtear socruithe ar nós `post_max_size`, ar cheart iad a sheiceáil tar éis PHP2Shell ar aon nós.

## Conas a chabhraíonn PHP SOS go nithiúil?

- Taifeadaimid ionchuir uile d'fheidhmchláir: foirmeacha, comhéadain, uaslódálacha, allmhairithe agus webhooks.
- Socraímid do gach réimse cad atá ceadaithe agus cuirimid seiceálacha soiléire in ionad feidhmeanna glanta ginearálta.
- Seiceálaimid an bhfuil rochtain bunachar sonraí agus aschuir cosanta go neamhspleách ar bhailíochtú.
- Déanaimid na rialacha a dhoiciméadú ionas gur féidir le d'fhoireann leanúint leo i bhfeidhmeanna nua.

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 chórasach.


## Ceisteanna coitianta

**Cad é an difríocht idir bailíochtú agus glanadh?**  
Seiceálann bailíochtú an bhfreagraíonn luach do na hionchais, agus diúltaíonn sé dó mura bhfreagraíonn. Athraíonn glanadh an luach, mar shampla trí charachtair a bhaint. I gcás cinntí slándála is fearr diúltú beagnach i gcónaí, mar d'fhéadfadh luach a athraítear go ciúin earráidí nua a chruthú.

**An féidir FILTER_SANITIZE_STRING a úsáid fós?**  
Tá an scagaire marcáilte mar scagaire as dáta ó PHP 8.1. Molann lámhleabhar PHP htmlspecialchars() ina ionad ag an aschur. Ba cheart duit cód atá ann cheana a aistriú, mar d'fhéadfadh feidhmeanna as dáta a bheith imithe i leaganacha amach anseo.

**An leor FILTER_VALIDATE_URL chun naisc a dhéanamh slán?**  
Ní leor. Ní sheiceálann an scagaire ach cruth an tseolta. De réir an lámhleabhair, ní gá URL bailí tosú le http, mar sin ní mór duit an scéim a sheiceáil tú féin i gcoinne liosta ceadaithe ar nós https. Diúltaíonn an scagaire d'ainmneacha fearainn idirnáisiúnaithe.

**An gcaithfidh mé sonraí as mo bhunachar sonraí féin a bhailíochtú freisin?**  
Ag an aschur meastar nach bhfuil siad iontaofa agus ionchódaítear iad go cuí. Is ciallmhar bailíochtú arís nuair a tháinig na sonraí ón taobh amuigh ar dtús agus go n-úsáidtear anois iad i gcomhthéacs nua, mar shampla mar ainm comhaid nó mar chuid d'ordú.

**An gcabhraíonn bailíochtú i gcoinne PHP2Shell?**  
Ní chabhraíonn. Bíonn tionchar ag PHP2Shell ar phróiseáil iarratas san ateangaire PHP sula ritheann do chód feidhmchláir ar chor ar bith. Ní chabhraíonn ach an nuashonrú PHP agus atosú gach próisis PHP ina dhiaidh.

## Foinsí

- [Lámhleabhar PHP: tairisigh scagaire](https://www.php.net/manual/de/filter.constants.php)
- [OWASP Input Validation Cheat Sheet](https://cheatsheetseries.owasp.org/cheatsheets/Input_Validation_Cheat_Sheet.html)
- [OWASP Top 10](https://owasp.org/www-project-top-ten/)
