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 →

Ionchuir i PHP a bhailíochtú agus a scagadh le filter_var

Conas a sheiceálann forbróirí ionchuir i PHP le filter_var, filter_input_array agus liostaí ceadaithe, cé na scagairí atá as dáta, agus cén fáth nach dtagann bailíochtú in ionad ráiteas ullmhaithe ná ionchódú aschuir.

Staid Am léitheoireachta: 6 nóim.Forbairt shlán

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
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 cén fáth a bhfuil comparáidí scaoilte contúirteach anseo. Déanann Superglobals: $_GET, $_POST, $_FILES agus eile 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.
  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
$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. 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 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í

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