PHP turvafunktsioon: strip_tags, filter_var, Md5 ja sha1
โก Nutikas kokkuvรตte
PHP turvalisus kaitseb veebirakendusi rรผndajate ja hooletu sisendi eest andmete valideerimise, puhastamise ja turvalise salvestamise teel. See samm hรตlmab peamisi ohte ning seejรคrel nรคitab strip_tags, filter_var ja esca.pingja tรคnapรคevane paroolide rรคsimine password_hash abil, et kaitsta end XSS-i, SQL-i sรผstimise ja varastatud volituste eest.

Vรตimalikud julgeolekuohud
Pรตhimรตtteliselt on kaks inimrรผhma, kes saavad teie sรผsteemi rรผnnata:
- Hรคkkerid โ eesmรคrgiga pรครคseda juurde volitamata andmetele vรตi hรคirida rakendust
- Kasutajad โ nad vรตivad tahtmatult vormidesse valesid parameetreid sisestada, millel vรตib olla veebisaidile vรตi veebirakendusele negatiivne mรตju.
Jรคrgmised on rรผnnakute liigid, millele peame tรคhelepanu pรถรถrama.
SQL Injection โ seda tรผรผpi rรผnnak lisab kahjulikku koodi SQL avaldused.
Seda tehakse kas kasutaja sisestusvormide vรตi URLs, mis kasutavad muutujaid.
Lisatud kood kommenteerib SQL-lause WHERE-klausli tingimuse vรคlja. Lisatud kood saab ka:
- sisestage tingimus, mis on alati tรตsi
- kustutada andmed tabelist
- vรคrskendada andmeid tabelis
Seda tรผรผpi rรผnnakuid kasutatakse tavaliselt rakendusele volitamata juurdepรครคsu saamiseks.
Saidiรผlene skriptimine (XSS) โ seda tรผรผpi rรผnnak lisab tavaliselt kahjuliku koodi JavaSkript. Seda tehakse kasutaja sisestusvormide, nรคiteks kontaktvormide ja kommentaaride abil. Seda tehakse jรคrgmiseks:
- Hankige tundlikku teavet, nรคiteks kรผpsiste andmed
- Suuna kasutaja teisele lehele URL.
Muud ohud vรตivad hรตlmata PHP koodi sรผstimist, shelli sรผstimist, e-posti sรผstimist ja skripti lรคhtekoodi avalikustamist.
PHP rakenduste turvalisuse parimad tavad
Vaatame nรผรผd mรตningaid PHP turvalisuse parimaid tavasid, mida peame arendamisel arvesse vรตtma.ping meie rakendused.
PHP strip_tags
Funktsioon strip_tags eemaldab HTML-i, JavaScriptvรตi PHP-silte stringist.
See funktsioon on kasulik, kui peame oma rakendust kaitsma selliste rรผnnakute eest nagu saidiรผlene skriptimine.
Vaatleme rakendust, mis vรตtab kasutajatelt kommentaare vastu.
<?php $user_input = "Your site rocks"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Eeldades, et olete salvestanud comments.php faili phptuts kausta, sirvige seda URL http://localhost/phptuts/comments.php
Oletame, et saate kasutaja sisendina jรคrgmise: alert(โYour site sucks!โ);
<?php $user_input = "<script>alert(0);</script>"; echo "<h4>My Commenting System</h4>"; echo $user_input; ?>
Sirvige jaotist URL http://localhost/phptuts/comments.php
Kaitskem nรผรผd oma rakendust selliste rรผnnakute eest funktsiooni strip_tags abil.
<?php $user_input = "<script>alert(0);</script>"; echo strip_tags($user_input); ?>
Sirvige jaotist URL http://localhost/phptuts/comments.php
PHP filter_var funktsioon
Funktsiooni filter_var kasutatakse andmete kinnitamiseks ja puhastamiseks.
Valideerimine kontrollib, kas andmed on รตiget tรผรผpi. Stringi numbriline valideerimiskontroll annab vale tulemuse.
Desinfitseerimine on keelatud tรคhemรคrkide eemaldamine a nรถรถr.
Tรคieliku viite saamiseks vaadake seda linki: filter_var
Allolev kood on kommenteerimissรผsteemi jaoks. See kasutab siltide eemaldamiseks funktsiooni filter_var ja konstanti FILTER_SANITIZE_STRIPPED.
<?php $user_input = "<script>alert(0);</script>"; echo filter_var($user_input, FILTER_SANITIZE_STRIPPED); ?>
Vรคljund:
alert('Your site sucks!');
Mรคrge: FILTER_SANITIZE_STRIPPED (FILTER_SANITIZE_STRING alias) on alates PHP 8.1 aegunud. Uue koodi jaoks kasutage strip_tags() vรตi turvaliseks kuvamiseks htmlspecialchars().
PHP mysqli_real_escape_string
Funktsiooni mysqli_real_escape_string kasutatakse rakenduse kaitsmiseks SQL-sรผstimise eest.
Oletame, et meil on kasutajanime ja parooli valideerimiseks jรคrgmine SQL-lause.
<?php SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass'; ?>
Pahatahtlik kasutaja saab siseneda ' VรI 1 = 1 โ kasutajatunnuse tekstikastis ja parooli tekstikastis 1234. Kodeerime autentimismooduli.
<?php $uid = "0$uid1$pwd';"; echo $sql; ?>
Lรตpptulemus on:
SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';
SIIN,
- โWHERE uid = โโ kontrollib tรผhja kasutaja ID-d
- โ' VรI 1 = 1โ on tingimus, mis on alati tรตene
- โโโ kommenteerib osa, mis parooli kontrollib.
รlaltoodud pรคring tagastab kรตik kasutajad. Kasutame nรผรผd funktsiooni mysqli_real_escape_string oma sisselogimismooduli turvamiseks. Pane tรคhele, et pรคris koodis vรตtab see funktsioon oma esimese argumendina andmebaasiรผhenduse.
<?php $uid = mysqli_real_escape_string($conn, "0$uid1$pwd';"; echo $sql; ?>
รlaltoodud kood annab vรคlja jรคrgmise tulemuse:
SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';
Mรคrkus: teine โโรผksikkoma on asendatud, seega kรคsitletakse seda kasutajatunnuse osana ja parooli vรคlja ei kommenteerita.
Parim harjutus: pรตgenedaping aitab, aga parameetritega ettevalmistatud laused MySQL-is vรตi PDO-s on soovitatav kaitse SQL-sรผstimise vastu, kuna andmeid ei segata kunagi pรคringu tekstiga.
PHP Md5 ja PHP sha1
MD5 on lรผhend sรตnadest Message Digest 5 ja SHA1 on lรผhend sรตnadest Secure Hash Algorithm 1. Mรตlemad on รผhesuunalised rรคsifunktsioonid.
Allolev kood nรคitab md5 ja sha1 rakendamist.
<?php echo "MD5 Hash: " . md5("password"); echo "SHA1 Hash: " . sha1("password"); ?>
Eeldades, et olete salvestanud faili hashes.php kausta phptuts, sirvige URL.
NB! MD5 ja SHA1 on kiired, soolamata rรคsivรครคrtused ja on ei peeta enam paroolide salvestamiseks ohutuks, sest neid saab tรคnapรคevase riistvara ja vikerkaaretabelitega kiiresti lahti murda. Kasutage neid ainult mitteturvaliste kontrollsummade jaoks ja paroolide jaoks allolevat meetodit.
Kuidas PHP-s paroole turvaliselt rรคsi abil salvestada
Paroolide salvestamiseks pakub PHP password_hash ja password_verify. Need rakendavad aeglast, soolatud algoritmi (vaikimisi bcrypt), seega on iga rรคsi unikaalne ja selle murdmine kulukas isegi siis, kui teie andmebaas varastatakse.
<?php // Hash a password before storing it in the database $hash = password_hash("mypassword", PASSWORD_DEFAULT); // Verify the password when the user logs in if (password_verify("mypassword", $hash)) { echo "Password is valid"; } else { echo "Invalid password"; } ?>
- password_hash() genereerib andmebaasi salvestamiseks soolatud rรคsi; PASSWORD_DEFAULT hoiab teid praeguse soovitusliku algoritmi juures.
- parooli_kinnitamine() kontrollib sisselogimiskatset salvestatud rรคsi suhtes seda kunagi dekrรผpteerimata.
Kuna sool ja algoritm salvestatakse rรคsi sisse, ei halda te neid kunagi ise, mis teeb sellest PHP-s paroolide haldamise รตige ja tulevikukindla viisi.




