Fil-qosor: L-inputs f'PHP tivvalidawhom b'filter_var() jew filter_input_array() u regoli ċari għal kull qasam: tip, firxa, tul u valuri permessi. Dak li ma jaqbilx jiġi rifjutat, mhux mibdul bil-kwiet. Il-validazzjoni hija importanti għal data nadifa u inqas wiċċ ta' attakk, imma ma tissostitwix la prepared statements kontra SQL injection u lanqas kodifika xierqa għall-kuntest kontra XSS.
Għaliex „iffiltra kollox“ mhuwiex kunċett
F'ħafna proġetti PHP qodma, fil-bidu ta' kull fajl insibu ċiklu li jibgħat il-valuri kollha minn $_GET u $_POST permezz ta' funzjoni ta' tindif. Dan iħossu sigur. Fil-prattika xi drabi jneħħi wisq, pereżempju apostrofi f'kunjomijiet, u xi drabi ftit wisq, għax l-istess funzjoni suppost tgħodd fl-istess ħin għal SQL, HTML u ismijiet ta' fajls.
Validazzjoni sensata taħdem b'mod differenti: tistaqsi għal kull qasam x'huwa permess hemmhekk. Kwantità ta' ordni hija numru sħiħ bejn 1 u limitu massimu. Qasam ta' ordni huwa wieħed minn tliet valuri fissi. Data hija f'format speċifiku u wara data oħra. Kull ħaġa oħra tiġi rifjutata.
OWASP jiddistingwi hawnhekk żewġ livelli: il-verifika sintattika, jekk valur għandux il-forma t-tajba, u l-verifika semantika, jekk fil-kuntest tagħmilx sens. It-tnejn jappartjenu fuq is-server; verifiki fil-browser iservu biss għall-konvenjenza.
Liema filtri jiġu ma' PHP
L-estensjoni tal-filtri hija inkluża awtomatikament f'PHP. L-aktar filtri importanti ta' validazzjoni skont il-manwal ta' PHP:
| Filtru | Jivverifika | Għażliet importanti u noti |
|---|---|---|
FILTER_VALIDATE_INT |
numru sħiħ | min_range, max_range |
FILTER_VALIDATE_FLOAT |
numru bid-dećimali | decimal għas-separatur |
FILTER_VALIDATE_BOOL |
valur ta' verità | b'FILTER_NULL_ON_FAILURE jista' jiġi distint minn „falz“ |
FILTER_VALIDATE_EMAIL |
forma ta' indirizz tal-posta | ma jippruvax li l-kaxxa tal-posta teżisti |
FILTER_VALIDATE_URL |
forma ta' URL | ivverifikaw l-iskema intom, l-ebda domains internazzjonalizzati |
FILTER_VALIDATE_IP |
indirizz IP | flags għal firxiet privati u riżervati |
FILTER_VALIDATE_REGEXP |
mudell proprju | ankraw il-mudell b'^ u $ |
Il-filtru tat-tindif FILTER_SANITIZE_STRING huwa skadut minn PHP 8.1. Min għadu juża, għandu jibdel il-validazzjoni għal filtri adattati u jużaw htmlspecialchars() għall-output.
filter_var f'PHP: ivverifika formola b'mod nadif
B'filter_input_array() formola kollha tista' tiġi vverifikata f'pass wieħed kontra definizzjoni. Oqsma mhux magħrufa ma jiġux meħuda:
<?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);
// Uri messaġġ ta' żball għal kull qasam, tipproċessax l-inputs
}
Innotaw it-tqabbil strett b'===: valur validu 0 jew string vojt ma jistax jiġi kkonfuż ma' falliment. Għaliex tqabbil laxk huwa perikoluż hawnhekk jispjegah Type Juggling: tqabbil laxk bħala riskju ta' sigurtà. Kif PHP jagħmel disponibbli d-data tat-talba fl-ewwel lok jiddeskrivi Superglobals: $_GET, $_POST, $_FILES u oħrajn.
Nasbiet b'email, URL u testi ħielsa
Xi filtri jagħmlu inqas milli jissuġġerixxi isimhom:
- URLs:
FILTER_VALIDATE_URLjaċċetta wkoll skemi oħra minbarra http u https. Ivverifikaw l-iskema wara b'parse_url()kontra lista fissa. Jekk l-URL jinġieb mis-server, japplikaw regoli addizzjonali, ara Evita Server-Side Request Forgery f'PHP. - Indirizzi tal-posta: Il-filtru jivverifika l-forma, mhux is-sjieda. Min irid ikun żgur jibgħat link ta' konferma.
- Test ħieles: Ismijiet, messaġġi u indirizzi bilkemm jistgħu jiġu limitati b'mod sensat għal karattri. Ivverifikaw it-tul u l-kodifika tal-karattri, pereżempju b'
mb_check_encoding($wert, 'UTF-8'), u fl-output fdaw fuq il-kodifika. - Espressjonijiet regolari: Mingħajr
^u$mudell jivverifika biss jekk jidhirx x'imkien fit-test, mhux jekk il-valur kollu jaqbilx. - Arrays minflok strings: Attakkant jista' jibgħat array minflok test. Mingħajr verifika tat-tip dan iwassal għal twissijiet jew imġiba mhux mistennija.
Għal valuri fissi ta' għażla bħal ordni, lingwa jew tip ta' konsenja, lista ta' permess b'in_array($wert, $erlaubt, true) jew espressjoni match hija aktar sempliċi u stretta minn kull espressjoni regolari.
Żball frekwenti ieħor jirrigwarda numri b'tifsira, pereżempju prezzijiet, kwantitajiet jew skontijiet. Li valur huwa numru validu ma jgħid xejn dwar jekk huwiex permess fil-kuntest. Kwantità negattiva, skont ogħla mill-valur tal-oġġetti jew prezz meħud mill-formola minflok mid-database huma żbalji klassiċi tal-loġika. Prezzijiet, drittijiet u valuri tal-istatus għalhekk dejjem jappartjenu fuq is-server u qatt f'oqsma moħbija tal-formola.
JSON, webhooks u importazzjonijiet: validazzjoni lil hinn mill-formoli
Ħafna dħul illum mhux formoli aktar, imma talbiet JSON minn apps, webhooks minn servizzi ta' ħlas jew fajls ta' importazzjoni minn fornituri. Anke hemmhekk japplika: l-ewwel aqra b'mod sigur, imbagħad ivverifika. OWASP jagħti parir li l-qies u l-fond tal-inkaljar jiġu llimitati qabel ma d-data titqies fl-ewwel lok. F'PHP json_decode() b'fond massimu u JSON_THROW_ON_ERROR jieħu ħsieb parti minn dan:
<?php
$roh = file_get_contents('php://input', false, null, 0, 65536); // massimu 64 KB
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;
}
Mal-webhooks, qabel il-verifika tal-kontenut tqum il-mistoqsija jekk il-messaġġ ġiex tabilħaqq mis-servizz indikat. Jekk is-servizz joffri firma, ivverifikawha u qabblu b'hash_equals(). Mal-fajls ta' importazzjoni ivverifikaw kull linja bħal formola u twaqqfu b'mod nadif f'każ ta' żbalji, minflok ma tieħdu rekords nofs.
Messaġġi ta' żball għandhom isemmu l-qasam ikkonċernat, imma ma jirritornawx il-valur rifjutat mhux iffiltrat. Inkella fil-messaġġ ta' żball innifsu jinħoloq punt ġdid ta' output li jeħtieġ jerġa' jiġi kkodifikat.
Dak li l-validazzjoni ma tistax twettaq
Il-validazzjoni tnaqqas il-wiċċ ta' attakk, imma skont OWASP mhijiex id-difiża ewlenija kontra injection. Kunjom b'apostrofu huwa validu u xorta waħda jrid jiddaħħal b'mod sigur f'database. Dan jirnexxi biss b'prepared statements, kif turi l-gwida Evita SQL Injection f'PHP. U test validu ta' kumment isir bla periklu biss b'kodifika xierqa għall-kuntest fl-output.
L-ordni t-tajba hija għalhekk: ivvalida meta tirċievi, ipparametrizza meta tipproċessa, ikkodifika fl-output. Barra minn hekk quddiemhom jappartjenu limiti tal-qies: talbiet li huma kbar wisq is-server tal-web u PHP m'għandhomx jipproċessawhom kompletament fl-ewwel lok. Għal dan iservu issettjar bħal post_max_size, li wara PHP2Shell għandu jiġi vverifikat xorta waħda.
Kif tgħin PHP SOS b'mod konkret?
- Nirreġistraw id-dħul kollu tal-applikazzjoni tagħkom: formoli, interfaces, uploads, importazzjonijiet u webhooks.
- Niddeterminaw għal kull qasam x'huwa permess u nissostitwixxu funzjonijiet ġenerali ta' tindif b'verifiki ċari.
- Nivverifikaw jekk l-aċċessi għad-database u l-outputs humiex sigurati indipendentement mill-validazzjoni.
- Niddokumentaw ir-regoli b'mod li t-tim tagħkom ikun jista' jkompli bihom f'funzjonijiet ġodda.
Verifika sistematika tiddeskriviha s-servizz Awditu tas-sigurtà u test ta' penetrazzjoni.
Mistoqsijiet frekwenti
X'inhi d-differenza bejn il-validazzjoni u t-tindif?
Il-validazzjoni tivverifika jekk valur jaqbilx mal-aspettattivi, u inkella tirrifjutah. It-tindif ibiddel il-valur, pereżempju billi jneħħi karattri. Għal deċiżjonijiet ta' sigurtà r-rifjut huwa kważi dejjem aħjar, għax valur mibdul bil-kwiet jista' joħloq żbalji ġodda.
FILTER_SANITIZE_STRING għadu jista' jintuża?
Il-filtru huwa mmarkat bħala skadut minn PHP 8.1. Il-manwal ta' PHP jirrakkomanda minfloku htmlspecialchars() fl-output. Kodiċi eżistenti għandkom tibdluh, għax funzjonijiet skaduti jistgħu jitneħħew f'verżjonijiet futuri.
FILTER_VALIDATE_URL huwa biżżejjed biex il-links isiru sikuri?
Le. Il-filtru jivverifika biss il-forma tal-indirizz. Skont il-manwal, URL validu m'għandux għalfejn jibda b'http, għalhekk intom stess għandkom tivverifikaw l-iskema kontra lista ta' permess bħal https. Ismijiet ta' domains internazzjonalizzati l-filtru jirrifjutahom.
Jeħtieġ nivvalida wkoll data mid-database proprja?
Fl-output titqies bħala mhux affidabbli u tiġi kkodifikata kif suppost. Validazzjoni ġdida hija sensata meta d-data oriġinarjament ġiet minn barra u issa tintuża f'kuntest ġdid, pereżempju bħala isem ta' fajl jew parti minn kmand.
Il-validazzjoni tgħin kontra PHP2Shell?
Le. PHP2Shell jirrigwarda l-ipproċessar tat-talbiet fl-interpretatur ta' PHP, qabel ma jaħdem xi kodiċi tal-applikazzjoni tagħkom. Kontra dan jgħin biss l-aġġornament ta' PHP segwit mir-restart tal-proċessi kollha ta' PHP.