Töötamine WordPressi kasutajakesksete väljadega – nagu inputelemendid, textareaelemendid või mis tahes tüüpi väljad, kuhu kasutaja saab ise väärtusi anda – on koht, mis peaks alati olema desinfitseerimise sihtmärk.
Õnneks pakub WordPressi API selle lahendamiseks mitmeid funktsioone. Olenevalt kasutusjuhust peate võib-olla tegema üht järgmistest.
Ja need on kõik head, kuid on ka viise, kuidas saate PHP pakutavate funktsioonide abil andmeid puhastada.
Muidugi, mõnikord on regulaaravaldiste kasutamine õige tee, kuid mõnikord võiksite kasutada keele sisse ehitatud, lihtsamini mõistetavaid ja hõlpsamini jälgitavaid vahendeid.
Enda koodi kirjutades (ja teisi arvustades) püüan seda meeles pidada. Sellele vaatamata võib siin olla protsess, mida saate WordPressis URL-idega töötades lihtsamaks teha.
Kui te ei soovi selle üle täielikku arutelu, võite hüpata postituse allosas oleva pealkirja juurde, mis kirjeldab koodi ja selle kasutamist oma töös.
Oletame, et teil on avatud inputelement ja soovite lubada kasutajal esitada URL-i, mis lõpuks renderdatakse esiotsas ehk lingina, teatud tüüpi skeemis või lihtsalt sellisel kujul, nagu see on.
Võimalik on olla tõeliselt agressiivne ja teha lihtsalt midagi sellist nagu "Kui see pole kehtiv URL, siis ärge seda salvestage."
Ja et olla selge, ma ei väida, et kehtiv URL ei tagasta 404 (sest mõnikord on lehed olemas ja aastaid hiljem mitte). Määran kehtiva URL-i sellisena, mis on korralikult vormindatud ja ei sisalda kõrvalist teavet.
Ütle nii, et selle lihtsa näite huvides pakute välja tekstivälja, mis lõpuks salvestatakse postituse metaandmete tabelisse. Lisaks eemaldate URL-ist kõik ebaseadusliku ja jätate alles ainult need, mis loovad kehtiva URL-i.
Minu arvates on selleks kõige kasulikumad järgmised funktsioonid:
- riba_sildid. Eemaldage stringist HTML- ja PHP-sildid.
- kaldkriipsud. Tühistab jutumärgiga stringi.
- filter_var. Filtreerib muutuja määratud filtriga.
Viimane kõlab pisut segadusse ajav, kuna see põhineb ideel, et saate aru, mis filtrid tegelikult on. PHP-s saab filtrid jagada kaheks kasutusjuhtumiks:
- Kinnitamine
- Desinfitseerimine
Ja need on sisuliselt eelseadistatud viisid, kuidas saaksime andmeid töödelda viisil, mis töötleb andmeid, et teha kindlaks, kas see on otsitava teabe tüüp, tavaliselt string või massiiv.
Selle tööle panemine
Seda silmas pidades võite proovida teavet andmebaasi salvestada ilma igasuguse desinfitseerimiseta (mis on halb):
<?php
$data['url'] = 'https://tommcfarlin.com/<script type="text/javascript">alert('hello world!');</script>';
Ülaltoodud koodi abil saab kasutaja sõna otseses mõttes sisestada väljale ükskõik mida ja lasta selle andmebaasi salvestada. Seetõttu on desinfitseerimine oluline. Ilma selleta võib kasutaja kasutajakogemust või kogu WordPressi installi kahjustada.
Kuidas näeb välja URL-ide puhastamisel ülaltoodud koodi rakendamine? Üldiselt näeb see välja selline :
<?php
if (!isset($data['url']) {
return '';
}
$url = $data['url'];
$data['url'] = strip_tags(
stripslashes(
filter_var($url, FILTER_VALIDATE_URL)) );
Esiteks käivitatakse kood läbi PHP filtri, mis kinnitab URL-i. Kui filtrifunktsiooni edastatud string ei tööta isegi URL-ina, tagastab funktsioon false.
Kui see aga töötab kehtiva URL-ina, saame eemaldada kõik mittevajalikud kaldkriipsud. See tähendab, et me saame tühistada kõik tsiteeritud stringid. Täpsemalt eemaldab see esimese järjestikuse kaldkriipsu (sest PHP-s kasutatakse kaldkriipsu põgenemiseks). Selge? 🙂
Lõpuks otsustame sildid eemaldada, kuna tahame ainult URL-i ennast. Me ei taha mingeid märgistusi, silte ega midagi, mis võiks andmebaasi kirjutatavaid andmeid saboteerida. See tähendab, et kui otsustate käitada midagi sellist:
https://tommcfarlin.com/<script type="text/javascript">alert('hello world!');</script>
Sulle jääb:
"https://tommcfarlin.com/alert('hello world!');"
Nii et kogu ülaltoodud koodi ühendamine selle stringi abil:
https://tommcfarlin.com/<script type="text/javascript">alert('hello world!');</script>'
Tulemuseks on järgmine väljund:
https://tommcfarlin.com/alert('hello world!');
See ei ole ilmselt kehtiv URL, kuid see on puhas, turvaline ja võimaldab teil teha muid töid, mida peate tegema URL-i kasutajale ohutuks kinnitamiseks.