Fil-qosor: PHP jiġi b'funzjonijiet lesti u ttestjati għall-kompiti tas-sigurtà l-aktar komuni: password_hash() għal passwords, random_bytes() u random_int() għal tokens, htmlspecialchars() kontra cross-site scripting, mistoqsijiet ippreparati b'PDO kontra SQL injection, hash_equals() għal tqabbil sikur u l-estensjoni Sodium għal kriptografija. Min juża dawn il-blokok b'mod konsistenti jevita l-biċċa l-kbira tal-vulnerabbiltajiet tal-applikazzjoni. Kontra żbalji fl-interpretatur ta' PHP innifsu, bħal PHP2Shell, ma jgħinux; hemmhekk jgħin biss l-aġġornament.
Għaliex funzjonijiet tas-sigurtà integrati ta' PHP?
Li tikteb kodiċi tas-sigurtà waħdek huwa suxxettibbli għal żbalji. Hash tal-password proprju, ġeneratur ta' tokens magħmul waħdu jew filtru magħmul b'mod improvizzat għall-output HTML spiss jidhru korretti u madankollu ma humiex. Il-funzjonijiet integrati huma ddokumentati, ittestjati u miżmuma bl-aġġornamenti ta' PHP.
Għal min jieħu d-deċiżjonijiet dan ifisser: la tistaqsux lill-aġenzija jew lit-tim tal-iżvilupp tagħkom jekk funzjonijiet tas-sigurtà nbnewx waħedhom, imma jekk jintużawx il-funzjonijiet standard tal-lingwa. It-tabella tagħti ħarsa ġenerali.
| Kompitu | Funzjoni | Disponibbli minn | Nota importanti |
|---|---|---|---|
| Ħażna ta' passwords | password_hash(), password_verify() |
PHP 5.5 | Kolonna sa 255 karattru; bcrypt jaqta' fuq 72 byte |
| Tokens każwali | random_bytes(), random_int() |
PHP 7.0 | qatt rand() jew mt_rand() għal sigrieti |
| Każwalità orjentata għall-oġġetti | Random\Randomizer |
PHP 8.2 | l-istess sigurtà, interface aktar flessibbli |
| Maskerar tal-output HTML | htmlspecialchars() |
minn dejjem | Flags standard minn 8.1 jimmaskraw ukoll virgoletti singoli |
| Tqabbil f'ħin kostanti | hash_equals() |
PHP 5.6 | Input tal-utent bħala t-tieni argument |
| Kriptografija moderna | Sodium (sodium_*) |
PHP 7.2 | minflok kriptaġġ proprju |
| Sigrieti fi stacktraces | #[\SensitiveParameter] |
PHP 8.2 | Il-valur ma jidhirx fit-trace |
| Verifika tal-inputs | filter_var() |
PHP 5.2 | jivverifika l-format, ma jissostitwixxix il-maskerar |
Passwords u tokens
password_hash() joħloq hash bil-melħ, password_verify() jivverifikah. Bi PASSWORD_DEFAULT PHP bħalissa juża bcrypt; minn PHP 8.4 il-fattur standard tal-ispiża, skont il-manwal, huwa 12 minflok 10. Peress li l-algoritmu standard jista' jinbidel, il-manwal jirrakkomanda kolonna tad-database b'255 karattru. Fil-każ ta' bcrypt, il-passwords jinqatgħu wara 72 byte, li jrid jitqies fil-każ ta' passphrases twal ħafna.
<?php
// Reġistrazzjoni
$hash = password_hash($passwort, PASSWORD_DEFAULT);
// Login, inkluż titjib awtomatiku ta' hashes qodma
if (password_verify($eingabe, $hash)) {
if (password_needs_rehash($hash, PASSWORD_DEFAULT)) {
$hash = password_hash($eingabe, PASSWORD_DEFAULT); // aħżen mill-ġdid
}
}
// Token għal link biex jiġi rrisettjat il-password
$token = bin2hex(random_bytes(32));
Għat-tqabbil ta' sigrieti, pereżempju firma, għandu jintuża hash_equals(). Tqabbil normali b'=== jista', skont il-manwal, jiżvela permezz tal-ħin tat-tħaddim minn liema post jiddiferenzjaw żewġ valuri. B'aktar dettall: Kif taħżnu l-passwords b'mod sikur f'PHP u numri każwali u tokens sikuri.
Maskerar tal-output u mistoqsijiet sikuri lid-database
Cross-site scripting jinqala' meta inputs tal-utent jispiċċaw f'HTML mhux iffiltrati. htmlspecialchars() jibdel karattri speċjali f'entitajiet HTML. Minn PHP 8.1 il-flags standard huma ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401; qabel, virgoletti singoli ma kinux jinbidlu. Min irid jappoġġa verżjonijiet eqdem jindika l-flags espliċitament.
SQL injection tevitaha mistoqsijiet ippreparati. Il-valuri jintbagħtu separatament mit-test SQL u ma jistgħux jibdlu l-mistoqsija:
<?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');
Id-dettalji jinsabu taħt Kif tevitaw cross-site scripting f'PHP u fil-paġna dwar SQL injection.
Il-verifika tal-inputs hija t-tieni pass separat. filter_var() jistabbilixxi jekk valur għandux format validu, pereżempju indirizz tal-email jew numru sħiħ f'firxa permessa. Dan madankollu ma jissostitwixxix il-maskerar fl-output u lanqas mistoqsija ppreparata, għax anki valuri formalment validi jistgħu jkun fihom karattri speċjali.
Żomm is-sigrieti 'l bogħod mill-messaġġi ta' żball
Tnixxija ta' data sottovalutata huma l-stacktraces. Meta jseħħ żball f'funzjoni, PHP jirreġistra l-katina tat-telefonati flimkien mal-argumenti. Jekk hemm password jew ċavetta API, tispiċċa fil-log. Minn PHP 8.2 l-attribut #[\SensitiveParameter] jimmarka parametri bħal dawn; il-valur tagħhom mbagħad jidher fit-trace biss bħala oġġett SensitiveParameterValue.
<?php
function anmelden(string $benutzer, #[\SensitiveParameter] string $passwort): bool
{
// ... verifika ...
throw new RuntimeException('Datenbank nicht erreichbar');
}
Skont nota fil-manwal, l-attribut jaħdem biss fuq l-implimentazzjoni konkreta, mhux fuq il-metodu ta' interface. Issettjawh għalhekk fejn il-kodiċi verament jaħdem.
Sessjonijiet: issettjar sikur u standards ġodda
Is-sessjonijiet huma mira komuni ta' attakki. Tliet issettjar huma ċentrali: session.use_strict_mode=1 jirrifjuta session IDs li s-server ma ħoloqx hu; session.cookie_httponly=1 jipprevjeni l-aċċess permezz ta' JavaScript għall-cookie tas-sessjoni; session.cookie_samesite=Lax jagħmilha aktar diffiċli li jintbagħat ma' paġni barranin. Skont RFC aċċettat, eżatt dawn it-tliet valuri jsiru l-istandard b'PHP 8.6. Issettjawhom intom sa dakinhar, u anki wara espliċitament, biex il-konfigurazzjoni ma tiddependix mill-istandard.
session.use_strict_mode = 1
session.cookie_httponly = 1
session.cookie_samesite = Lax
session.cookie_secure = 1
Aktar dwar dan taħt Kif tassiguraw is-sessjonijiet f'PHP.
Dak li l-funzjonijiet integrati ma jagħmlux
Il-proġett PHP huwa ċar fil-politika tas-sigurtà tiegħu: PHP mhuwiex sandbox. Evażjonijiet ta' open_basedir jew disable_functions, inputs malizzjużi għal unserialize() u argumenti mhux ivverifikati għal funzjonijiet bħal mysqli_query() ma jitqisux vulnerabbiltajiet tas-sigurtà ta' PHP. Dan ifisser għall-operaturi: dawn l-issettjar huma tishiħ utli, imma mhumiex konfini tas-sigurtà, u unserialize() m'għandu x'jaqsam xejn ma' data barranija.
It-tieni punt jikkonċerna PHP2Shell. CVE-2026-109618 u CVE-2026-109619 jippermettu, skont php.net, eżekuzzjoni ta' kodiċi qabel jew waqt li taħdem l-applikazzjoni tagħkom; b'mod_php intwera exploit qabel ma jiġi eżegwit xi kodiċi tal-applikazzjoni. L-ebda funzjoni fil-kodiċi tagħkom ma tista' tillimita dan. Programmar sikur u verżjoni aġġornata ta' PHP huma żewġ obbligi separati, u t-tnejn iridu jiġu sodisfatti.
Kif jgħin PHP SOS konkretament?
Fl-awditu tas-sigurtà għal applikazzjonijiet PHP niċċekkjaw b'mod immirat:
- Immaniġġjar tal-passwords u tat-tokens: Jintużaw
password_hash()urandom_bytes(), jew hemm bini proprju? - Outputs u mistoqsijiet: Fejn jispiċċaw inputs mhux iffiltrati f'HTML, SQL jew kmandi tal-shell?
- Konfigurazzjoni tas-sessjonijiet: Strict Mode, HttpOnly, SameSite u Secure huma ssettjati u ma jistgħux jiġu sostitwiti?
- Runtime: Taħdem verżjoni appoġġata ta' PHP bil-korrezzjonijiet tal-21 ta' Ottubru 2026?
Mistoqsijiet frekwenti
Kif jinħażnu l-passwords sewwa f'PHP?
B'password_hash() u PASSWORD_DEFAULT, il-verifika ssir b'password_verify(). Il-kolonna tad-database, skont il-manwal, għandha tkun tista' żżomm sa 255 karattru, għax l-algoritmu standard jista' jinbidel fil-futur.
rand() huwa adattat għal tokens?
Le. Għal tokens, ċwievet u links tal-password għandhom jintużaw random_bytes() jew random_int(). Skont il-manwal jagħtu valuri każwali sikuri kriptografikament.
Minn meta Sodium huwa inkluż f'PHP?
L-estensjoni Sodium għal kriptografija moderna hija parti minn PHP minn PHP 7.2.0. Verżjonijiet eqdem setgħu jżiduha biss permezz ta' PECL.
Dawn il-funzjonijiet jipproteġu minn PHP2Shell?
Le. Jipproteġu minn żbalji fl-applikazzjoni tagħkom. PHP2Shell jinsab fl-interpretatur innifsu u jingħalaq biss b'aġġornament ta' PHP, segwit mir-restart tal-proċessi kollha ta' PHP.
L-istandards tas-sessjonijiet jinbidlu f'PHP 8.6?
Iva, skont RFC aċċettat, session.use_strict_mode u session.cookie_httponly jinxtegħlu b'mod awtomatiku u session.cookie_samesite jiġi ssettjat fuq Lax. Madankollu għandkom tissettjaw konfigurazzjonijiet eżistenti b'mod espliċitu intom stess.