Peaksite kasutama PHP filtreerimisfunktsioone, 2. osa
Eelmises postituses rääkisin põhjustest, miks PHP filtreerimisfunktsioonide kasutamine on pigem kasulik kui mitte.
Lühidalt, see aitab tagada keele sisseehitatud valideerimise taseme, et me ei peaks midagi ümber kirjutama. Loomulikult on hoiatusi.
Näiteks kui peate kinnitama mitte-ladina tähtedega väärtust, peate seda tegema üksi ja rakendama valideerimist võib-olla regulaaravaldise abil.
Kui aga kasutate e-posti aadresse, URL-e, numbreid, IP-aadresse ja palju muud, siis on teil hea võimalus kasutada midagi, mis on juba olemas.
Igatahes puudutab kõik eelnev ikkagi muutujate filtreerimist. Aga sisendid? See tähendab, et need, mis pärinevad $_POST
või $_GET
. Sarnast strateegiat on võimalik kasutada erineva funktsiooni ja erineva filtrikomplektiga.
Aga kui sa mõistad viimases postituses esitatud põhitõdesid, siis see postitus väga erinev ei ole.
PHP filtreerimisfunktsioonid, 2. osa: sisendid
Sisendite filtreerimine toimub filter_input
funktsiooni abil. Selle konkreetse funktsiooni määratlus on järgmine:
Hangib konkreetse välismuutuja nime järgi ja valikuliselt filtreerib selle
Ja nagu viimati mainitud, kõlab see pisut veidralt, kuni mõistate, mis filtrid on. Õnneks käsitlesime seda eelmises postituses. Ja kuigi see postitus keskendub konkreetselt POST
(ja väga lühidalt GET
).
Samas on ka teisi filtreid. Ja nende hulka kuuluvad:
INPUT_COOKIE
INPUT_SERVER
INPUT_ENV
Igatahes, kuna kaks kõige levinumat toimingut, mida WordPressis nägema kipun, on POST
ja GET
, siis tundub oluline need kaks siia lisada.
Nende funktsioonide kasutamine on triviaalselt lihtne. Oletagem, et teil on väärtus, mis pärineb millestki, mille kasutaja on vormis esitanud, ja nad saadavad selle serverisse, kasutades POST
päringut võtmega, näiteks firstname
.
Kood selle kinnitamiseks võib välja näha umbes selline:
filter_input(INPUT_POST, 'firstname');
Mida on piisavalt lihtne mõista, sest see võtab lihtsalt võtme, filtreerib selle ja tagastab seejärel väärtuse. Ja kuna see tagastab väärtuse, saame enne töö jätkamist seadistada kaitseklausli:
1if (false === filter_input(INPUT_POST, 'firstname')) {
2 return;
3}
Kui kõik on kontrollitud, saame edasi liikuda ja teha kõik, mida vajame kasutajateabega. Võib-olla peame selle mingil põhjusel praeguse postitusega seostama:
1if (false === filter_input(INPUT_POST, 'firstname')) {
2 return;
3}
4
5$firstname = filter_input(INPUT_POST, 'firstname');
6update_post_meta(get_the_ID(), 'acme-firstname', $firstname);
7
8// Other code you may use...
Lisaks saate erinevate olemasolevate filtrite abil teavet veelgi paremini kaitsta. Need edastatakse filter_input
funktsioonile kolmanda parameetrina.
Ja mis sellest GET
?
Selle funktsiooni hea külg on see, et üldiselt kehtivad samad reeglid, mis kehtivad ka selle funktsiooni puhul, POST
välja arvatud juhul, kui kasutate INPUT_POST
, peate kasutama INPUT_GET
.
Seejärel saate oma koodi läbi töötada nii, nagu see teie projekti vajadustele kõige paremini sobib.
Turvalisus, Nonces jne.
Pidage meeles, et seda ei saa kasutada turvalisuse asemel. See on mõeldud üksnes andmete kaitsmiseks, enne kui nendega midagi ette võtate.
Ärge asendage mitte-väärtuste kontrollimist lihtsalt seetõttu, et kontrollite andmeid erinevalt.
Muutujad ja sisendid
Pidage meeles, et kuigi need funktsioonid on väga sarnased muutujad ja sisendid erinevad. Teisisõnu, ärge proovige seda kasutada, filter_var
kui töötate kasutajalt või brauserist pärineva sisendiga. Kasutage seda alati, kui töötate muutujatega. Ja samamoodi kasutage ht e