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.

  • ๐Ÿ›ก๏ธ Tea ohtusid: Peamised riskid on SQL-sรผstimine, saidiรผlene skriptimine ja koodisรผstimine, mida tavaliselt edastatakse vormide vรตi URL parameetrid.
  • ๐Ÿงน Ribasildid: strip_tags eemaldab HTML-i, JavaSkript ja PHP-sildid sisendist, vรคhendades salvestatud saidiรผleste skriptide ohtu.
  • โœ… Sisendi valideerimine: filter_var valideerib ja puhastab andmeid, kinnitades enne vรครคrtuse usaldamist, et see on oodatud tรผรผpi.
  • ๐Ÿ”’ Pรตgenemine vรตi sidumine: mysqli_real_escape_string pรครคseb pรคringu sisendi eest, kuid parameetritega ettevalmistatud laused on SQL-sรผstimise vastu tugevam kaitse.
  • ๐Ÿ”‘ Rรคsi paroolid รตigesti: ร„rge kunagi salvestage paroole MD5 vรตi SHA1-ga; kasutage password_hash ja password_verify, mis rakendavad aeglast, soolatud bcrypt rรคsimist.
  • ???? Sรผgavkaitse: Kombineeri valideerimine, escaping, HTTPS-i ja vรคhima privileegiga andmebaasikontosid, selle asemel et loota รผhele juhtelemendile.
  • ๐Ÿค– Tehisintellekti abi: Tehisintellekti tรถรถriistad saavad PHP-koodi turvanรตrkuste suhtes auditeerida ja aidata SQL-sรผstimise vรตi XSS-nรตrkuse ohutult parandada.

PHP turvalisus

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:

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

PHP strip_tags

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

PHP strip_tags

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 strip_tags

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.

PHP Md5 ja PHP sha1

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.

KKK

Kasutage MySQL-is vรตi PDO-s seotud parameetritega ettevalmistatud lauseid. Need saadavad pรคringu ja andmed eraldi, seega ei saa kasutaja sisend kunagi pรคringu struktuuri muuta. See on tugevam kui kรคsitsi esca sisestamine.ping sisend.

strip_tags eemaldab HTML- ja PHP-sildid tรคielikult, samas kui htmlspecialchars teisendab need turvalisteks รผksusteks, et neid tekstina kuvada. Vรคljundi esca jaoksping XSS-i vastu on htmlspecialchars tavaliselt turvalisem valik.

Genereerige iga seansi kohta unikaalne CSRF-token, lisage see peidetud vรคljana igale vormile ja kontrollige seda esitamisel. Lรผkake tagasi kรตik pรคringud, mille token puudub vรตi ei vasta salvestatud vรครคrtusele.

Jah. Tehisintellekt suudab skannida SQL-sรผstimist, XSS-i, ebaturvalist paroolide rรคsimist ja ohtlikku failide kรคitlemist ning seejรคrel iga riski selgitada ja lahendust pakkuda. Kรคsitle seda kui kasulikku esmast sammu, mitte turvaรผlevaatuse asendajat.

Jah. Kleepige haavatav kood ja tehisintellekt saab selle ettevalmistatud lausetega รผmber kirjutada, vรคljastades esca.pingja sisendi valideerimine. Testige parandatud koodi ja kinnitage parandust algse rรผnnaku sisendi suhtes.

Vรตta see postitus kokku jรคrgmiselt: