Go achomair: Tugann PHP feidhmeanna réidh, seiceáilte léi do na tascanna slándála is minice: password_hash() do phasfhocail, random_bytes() agus random_int() do chomharthaí, htmlspecialchars() i gcoinne Cross-Site-Scripting, ceisteanna ullmhaithe le PDO i gcoinne SQL injection, hash_equals() do chomparáidí sábháilte agus an eisínteacht Sodium do chripteagrafaíocht. An té a úsáideann na bloic thógála seo go comhsheasmhach, seachnaíonn sé an chuid is mó de leochaileachtaí feidhmchlár. I gcoinne earráidí san ateangaire PHP féin, mar atá le PHP2Shell, ní chabhraíonn siad; ansin ní chabhraíonn ach an nuashonrú.
Cén fáth feidhmeanna slándála ionsuite PHP?
Is furasta earráidí a dhéanamh agus cód slándála á scríobh agat féin. Is minic a bhíonn cuma cheart ar hais pasfhocail féin, ar ghineadóir comharthaí a tógadh féin nó ar scagaire a cniotáladh féin d'aschur HTML, ach ní bhíonn sé ceart mar sin féin. Tá na feidhmeanna ionsuite doiciméadaithe, tástáilte agus cothaítear iad le nuashonruithe PHP.
Do lucht cinnteoireachta ciallaíonn sé seo: ná fiafraigh d'd'ghníomhaireacht nó d'fhoireann forbartha an ndearnadh feidhmeanna slándála a thógáil go háitiúil, ach an úsáidtear feidhmeanna caighdeánacha na teanga. Tugann an tábla forbhreathnú.
| Tasc | Feidhm | Ar fáil ó | Nóta tábhachtach |
|---|---|---|---|
| Pasfhocail a stóráil | password_hash(), password_verify() |
PHP 5.5 | colún suas le 255 carachtar; giorraíonn bcrypt go 72 beart |
| Comharthaí randamacha | random_bytes(), random_int() |
PHP 7.0 | gan rand() ná mt_rand() a úsáid do rúin riamh |
| Randamacht oibiachtdhírithe | Random\Randomizer |
PHP 8.2 | an tsábháilteacht chéanna, comhéadan níos solúbtha |
| Aschur HTML a chosc | htmlspecialchars() |
i gcónaí | cosnaíonn comharthaí réamhshocraithe ó 8.1 athfhriotail aonair freisin |
| Comparáid ama chonstaint | hash_equals() |
PHP 5.6 | ionchur úsáideora mar an dara hargóint |
| Cripteagrafaíocht nua-aimseartha | Sodium (sodium_*) |
PHP 7.2 | in ionad criptithe féin |
| Rúin i stacktraces | #[\SensitiveParameter] |
PHP 8.2 | ní fheictear an luach sa trace |
| Ionchuir a sheiceáil | filter_var() |
PHP 5.2 | seiceálann sé formáid, ní thagann sé in ionad cosc |
Pasfhocail agus comharthaí
Gineann password_hash() hais le salann, seiceálann password_verify() é. Le PASSWORD_DEFAULT úsáideann PHP bcrypt faoi láthair; ó PHP 8.4 i leith tá an fachtóir costais réamhshocraithe ag 12 in ionad 10 de réir an lámhleabhair. Toisc go bhféadfadh an t-algartam réamhshocraithe athrú, molann an lámhleabhar colún bunachair sonraí le 255 carachtar. Le bcrypt gearrtar pasfhocail tar éis 72 beart, rud atá le tabhairt faoi deara i gcás frásaí faire an-fhada.
<?php
// Clárú
$hash = password_hash($passwort, PASSWORD_DEFAULT);
// Logáil isteach, le huasghrádú uathoibríoch seanhais san áireamh
if (password_verify($eingabe, $hash)) {
if (password_needs_rehash($hash, PASSWORD_DEFAULT)) {
$hash = password_hash($eingabe, PASSWORD_DEFAULT); // stóráil as an nua
}
}
// Comhartha do nasc chun pasfhocal a athshocrú
$token = bin2hex(random_bytes(32));
Do chomparáidí rúin, mar shampla sínithe, ba cheart hash_equals() a úsáid. De réir an lámhleabhair is féidir le gnáthchomparáid le === tríd an am rite a nochtadh ó cén pointe a bhfuil dhá luach difriúil. Níos mionsonraithe: Pasfhocail a stóráil go sábháilte i PHP agus uimhreacha randamacha sábháilte agus comharthaí.
Aschuir a chosc agus an bunachar sonraí a cheistiú go sábháilte
Éiríonn Cross-Site-Scripting nuair a théann ionchuir úsáideora isteach i HTML gan scagadh. Athraíonn htmlspecialchars() carachtair speisialta ina n-eintitis HTML. Ó PHP 8.1 is iad ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 na bratacha réamhshocraithe; roimhe sin níor athraíodh athfhriotail aonair. An té ar gá dó leaganacha níos sine a thacú, sonraíonn sé na bratacha go sainráite.
Cuireann ceisteanna ullmhaithe cosc ar SQL injection. Aistrítear na luachanna scartha ón téacs SQL agus ní féidir leo an cheist a athrú:
<?php
$stmt = $pdo->prepare('SELECT id, name FROM kunden WHERE email = :email');
$stmt->execute(['email' => $email]);
$kunde = $stmt->fetch();
echo htmlspecialchars($kunde['name'] ?? '', ENT_QUOTES, 'UTF-8');
Tá na sonraí ag Cross-Site-Scripting i PHP a chosc agus ar an leathanach faoi SQL injection.
Is dara céim ar leith é ionchuir a sheiceáil. Cinntíonn filter_var() an bhfuil formáid bhailí ag luach, mar shampla seoladh ríomhphoist nó slánuimhir i raon ceadaithe. Ní thagann sé sin in ionad cosc ag an aschur ná ceist ullmhaithe, mar is féidir carachtair speisialta a bheith i luachanna atá bailí go foirmeálta freisin.
Rúin a choimeád as teachtaireachtaí earráide
Sceitheadh sonraí nach dtugtar a dhóthain airde air is ea stacktraces. Nuair a tharlaíonn earráid i bhfeidhm, logálann PHP an slabhra glaonna in éineacht le hargóintí. Má tá pasfhocal nó eochair API ann, téann sé isteach sa loga. Ó PHP 8.2 i leith marcálann an tréith #[\SensitiveParameter] paraiméadair den sórt sin; ní fheictear a luach sa trace ansin ach mar oibiacht SensitiveParameterValue.
<?php
function anmelden(string $benutzer, #[\SensitiveParameter] string $passwort): bool
{
// ... seiceáil ...
throw new RuntimeException('Datenbank nicht erreichbar');
}
De réir nóta sa lámhleabhar ní oibríonn an tréith ach ar an gcur chun feidhme nithiúil, ní ar mhodh de chuid comhéadain. Socraigh í dá bhrí sin san áit a ritheann an cód i ndáiríre.
Seisiúin: socruithe sábháilte agus caighdeáin nua
Is sprioc ionsaithe choitianta iad seisiúin. Tá trí shocrú lárnach: diúltaíonn session.use_strict_mode=1 d'ID seisiúin nár ghin an freastalaí féin; cuireann session.cookie_httponly=1 cosc ar rochtain trí JavaScript ar chuachóg an tseisiúin; déanann session.cookie_samesite=Lax a sheoladh in éineacht ag suíomhanna coimhthíocha níos deacra. De réir RFC glactha, tagann na trí luach seo go beacht chun bheith ina gcaighdeán le PHP 8.6. Socraigh tú féin iad go dtí sin, agus ina dhiaidh freisin go sainráite, ionas nach mbraitheann an chumraíocht ar an gcaighdeán.
session.use_strict_mode = 1
session.cookie_httponly = 1
session.cookie_samesite = Lax
session.cookie_secure = 1
Tuilleadh ag Seisiúin i PHP a shlánú.
An méid nach ndéanann feidhmeanna ionsuite
Tá tionscadal PHP soiléir ina pholasaí slándála: ní bosca gainimh é PHP. Ní meastar gur leochaileachtaí slándála de chuid PHP iad seachbhóithre ar open_basedir nó disable_functions, ionchuir mhailíseacha chuig unserialize() agus argóintí nár seiceáladh chuig feidhmeanna ar nós mysqli_query(). Do oibreoirí ciallaíonn sé sin: is cruatú úsáideach iad na socruithe seo, ach ní teorainn slándála iad, agus níl baint ag unserialize() le sonraí coimhthíocha.
Baineann an dara pointe le PHP2Shell. Ceadaíonn CVE-2026-109618 agus CVE-2026-109619 de réir php.net cód a rith sula ritheann d'fheidhmchlár nó le linn dó rith; i gcás mod_php léiríodh exploit sula ritear cód feidhmchláir ar chor ar bith. Ní féidir le feidhm ar bith i do chód é sin a ghabháil. Is dhá dhualgas ar leith iad ríomhchlárú sábháilte agus leagan PHP reatha, agus ní mór an bheirt a chomhlíonadh.
Conas a chabhraíonn PHP SOS go praiticiúil?
San iniúchadh slándála d'fheidhmchláir PHP seiceálaimid go sonrach:
- Láimhseáil pasfhocal agus comharthaí: An úsáidtear
password_hash()agusrandom_bytes(), nó an bhfuil forbairtí féin ann? - Aschuir agus ceisteanna: Cá dtéann ionchuir isteach i HTML, SQL nó orduithe sliogáin gan scagadh?
- Cumraíocht seisiúin: An bhfuil Strict Mode, HttpOnly, SameSite agus Secure socraithe agus nach féidir iad a shárú?
- Am rite: An bhfuil leagan PHP tacaithe ag rith leis na ceartúcháin an 21.10.2026?
Ceisteanna coitianta
Conas a stórálann tú pasfhocail i gceart i PHP?
Le password_hash() agus PASSWORD_DEFAULT, seiceáiltear le password_verify(). De réir an lámhleabhair ba cheart go dtógfadh colún an bhunachair sonraí suas le 255 carachtar, mar d'fhéadfadh an algartam réamhshocraithe athrú amach anseo.
An bhfuil rand() oiriúnach do chomharthaí?
Níl. Do chomharthaí, eochracha agus naisc pasfhocail ba cheart random_bytes() nó random_int() a úsáid. De réir an lámhleabhair soláthraíonn siad luachanna randamacha slán go cripteagrafach.
Cathain a cuireadh Sodium isteach i PHP?
Tá an eisínteacht Sodium do chripteagrafaíocht nua-aimseartha mar chuid de PHP ó PHP 7.2.0 i leith. I leaganacha níos sine ní raibh sé indéanta é a chur leis ach trí PECL.
An gcosnaíonn na feidhmeanna seo i gcoinne PHP2Shell?
Ní chosnaíonn. Cosnaíonn siad i gcoinne earráidí i d'fheidhmchlár. Tá PHP2Shell san ateangaire féin agus ní dhúntar é ach le nuashonrú PHP, agus ansin atosú gach próisis PHP.
An athraíonn caighdeáin seisiúin i PHP 8.6?
Athraíonn, de réir RFC glactha cuirtear session.use_strict_mode agus session.cookie_httponly ar siúl de réir réamhshocraithe agus socraítear session.cookie_samesite ar Lax. Ba cheart duit do chumraíochtaí atá ann cheana a shocrú go sainráite tú féin mar sin féin.