Funcția de securitate PHP: strip_tags, filter_var, Md5 și sha1

⚡ Rezumat inteligent

Securitatea PHP protejează aplicațiile web de atacatori și de datele introduse neglijent prin validarea, igienizarea și stocarea în siguranță a datelor. Această prezentare prezintă principalele amenințări, apoi prezintă strip_tags, filter_var, esca.pingși hashing modern al parolelor cu password_hash pentru a se apăra împotriva XSS, injecției SQL și a furtului de acreditări.

  • 🛡️ Cunoașteți amenințările: Principalele riscuri sunt injecția SQL, scriptarea cross-site și injecția de cod, de obicei prin intermediul formularelor sau URL parametri.
  • 🧹 Etichete de striptease: strip_tags elimină HTML-ul, JavaScript și etichete PHP din date de intrare, reducând riscul stocării scripturilor între site-uri.
  • ✅ Validați intrarea: filter_var validează și curăță datele, confirmând că o valoare este de tipul așteptat înainte ca codul să o considere de încredere.
  • 🔒 Evadare sau Legare: mysqli_real_escape_string elimină codul de intrare din interogare, dar instrucțiunile pregătite parametrizate reprezintă o apărare mai puternică împotriva injecției SQL.
  • 🔑 Parole hash corecte: Nu stocați niciodată parole cu MD5 sau SHA1; utilizați password_hash și password_verify, care aplică hashing lent, cu sare, pentru bcrypt.
  • ???? Apărare în profunzime: Validare combinată, escaping, HTTPS și conturi de bază de date cu privilegii minime, în loc să se bazeze pe un singur control.
  • 🤖 Asistență AI: Instrumentele de inteligență artificială pot audita codul PHP pentru a depista defecte de securitate și pot ajuta la remedierea în siguranță a unei vulnerabilități de tip injecție SQL sau XSS.

Securitate PHP

Potențiale amenințări de securitate

Există practic două grupuri de persoane care vă pot ataca sistemul:

  • Hackeri – cu intenția de a obține acces la date neautorizate sau de a întrerupe aplicația
  • Utilizatori – aceștia pot introduce în mod inocent parametri greșiți în formulare, ceea ce poate avea efecte negative asupra unui site web sau a unei aplicații web.

Următoarele sunt tipurile de atacuri la care trebuie să fim atenți.

Injecție SQL – acest tip de atac adaugă cod dăunător la SQL declarații.

Acest lucru se face fie folosind formulare de introducere a datelor de către utilizator, fie URLcare utilizează variabile.

Codul adăugat comentează condiția din clauza WHERE a unei instrucțiuni SQL. Codul adăugat poate, de asemenea:

  • introduceți o condiție care va fi întotdeauna adevărată
  • ștergeți datele dintr-un tabel
  • actualizați datele dintr-un tabel

Acest tip de atac este de obicei folosit pentru a obține acces neautorizat la o aplicație.

Cross-site scripting (XSS) – acest tip de atac introduce cod dăunător, de obicei JavaScript. Acest lucru se realizează folosind formulare de introducere a datelor de către utilizator, cum ar fi formularele de contact și de comentarii. Acest lucru se face pentru:

  • Preluați informații sensibile, cum ar fi date cookie
  • Redirecționează utilizatorul către o altă URL.

Alte amenințări pot include injecția de cod PHP, injecția de shell, injecția de e-mailuri și divulgarea codului sursă al scriptului.

Cele mai bune practici de securitate a aplicațiilor PHP

Să analizăm acum câteva dintre cele mai bune practici de securitate PHP pe care trebuie să le luăm în considerare atunci când dezvoltămping aplicațiile noastre.

PHP strip_tags

Funcția strip_tags elimină codul HTML, JavaScenariusau etichete PHP dintr-un șir de caractere.

Această funcție este utilă atunci când trebuie să ne protejăm aplicația împotriva atacurilor precum cross-site scripting.

Să luăm în considerare o aplicație care acceptă comentarii de la utilizatori.

<?php
 
$user_input = "Your site rocks";
 
echo "<h4>My Commenting System</h4>";
 
echo $user_input;
 
?>

Presupunând că ați salvat fișierul comments.php în folderul phptuts, navigați la URL http://localhost/phptuts/comments.php

PHP strip_tags

Să presupunem că primiți următoarele date de intrare din partea utilizatorului: alert(‘Your site sucks!’);

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo "<h4>My Commenting System</h4>";
 
echo $user_input;
 
?>

Navigați la URL http://localhost/phptuts/comments.php

PHP strip_tags

Să ne protejăm acum aplicația împotriva unor astfel de atacuri folosind funcția strip_tags.

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo strip_tags($user_input);
 
?>

Navigați la URL http://localhost/phptuts/comments.php

PHP strip_tags

Funcția PHP filter_var

Funcția filter_var este utilizată pentru a valida și igieniza datele.

Validarea verifică dacă datele sunt de tipul corect. O verificare de validare numerică a unui șir returnează un rezultat fals.

Igienizarea înseamnă eliminarea caracterelor ilegale din a şir.

Verificați acest link pentru referința completă: filter_var

Codul de mai jos este pentru sistemul de comentarii. Acesta folosește funcția filter_var și constanta FILTER_SANITIZE_STRIPPED pentru a elimina etichetele.

<?php
 
$user_input = "<script>alert(0);</script>";
 
echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);
 
?>

ieșire:

alert('Your site sucks!');

Notă: FILTER_SANITIZE_STRIPPED (un alias al FILTER_SANITIZE_STRING) este depreciat începând cu PHP 8.1. Pentru cod nou, utilizați strip_tags() sau, pentru afișare sigură, htmlspecialchars().

PHP mysql_real_escape_string

Funcția mysql_real_escape_string este utilizată pentru a proteja o aplicație împotriva injecțiilor SQL.

Să presupunem că avem următoarea instrucțiune SQL pentru validarea ID-ului de utilizator și a parolei.

<?php
SELECT uid,pwd,role FROM users WHERE uid = 'admin' AND password = 'pass';
?>

Un utilizator rău intenționat poate intra ' SAU 1 = 1 — în caseta de text pentru ID-ul utilizatorului și 1234 în caseta de text pentru parolă. Să codăm modulul de autentificare.

<?php
 
$uid = "0$uid1$pwd';";
 
echo $sql;
 
?>

Rezultatul final va fi:

SELECT uid,pwd,role FROM users WHERE uid = '' OR 1 = 1 -- ' AND password = '1234';

AICI,

  • „WHERE uid = ”” testează pentru un ID de utilizator gol
  • „SAU 1 = 1” este o condiție care va fi întotdeauna adevărată
  • „–” comentează partea care testează parola.

Interogarea de mai sus va returna toți utilizatorii. Să folosim acum funcția mysqli_real_escape_string pentru a securiza modulul nostru de autentificare. Rețineți că în codul real această funcție primește conexiunea la baza de date ca prim argument.

<?php
 
$uid = mysqli_real_escape_string($conn, "0$uid1$pwd';";
 
echo $sql;
 
?>

Codul de mai sus va afișa:

SELECT uid,pwd,role FROM users WHERE uid = '\' OR 1 = 1 -- ' AND password = '1234';

Notă: a doua apostrofă simplă a fost inclusă în caracterul escape, deci va fi tratată ca parte a ID-ului de utilizator, iar parola nu va fi comentată.

Cea mai buna practica: ESCAping ajută, dar instrucțiunile pregătite parametrizate în MySQL sau PDO sunt apărarea recomandată împotriva injecției SQL, deoarece datele nu sunt niciodată amestecate în textul interogării.

PHP Md5 și PHP sha1

MD5 este acronimul pentru Message Digest 5, iar SHA1 este acronimul pentru Secure Hash Algorithm 1. Ambele sunt funcții de hashing unidirecționale.

Codul de mai jos arată implementarea md5 și sha1.

<?php
echo "MD5 Hash: " . md5("password");
echo "SHA1 Hash: " . sha1("password");
?>

Presupunând că ați salvat fișierul hashes.php în folderul phptuts, navigați la URL.

PHP Md5 și PHP sha1

Important: MD5 și SHA1 sunt hash-uri rapide, nesărate și sunt nu mai este considerat sigur pentru stocarea parolelor, deoarece pot fi sparte rapid cu hardware modern și tabele Rainbow. Folosiți-le doar pentru sume de control care nu au legătură cu securitatea și folosiți metoda de mai jos pentru parole.

Cum să criptezi parolele în mod securizat în PHP

Pentru stocarea parolelor, PHP oferă password_hash și password_verify. Acestea aplică un algoritm lent, cu valori sărate (bcrypt în mod implicit), astfel încât fiecare hash este unic și costisitor de spart, chiar dacă baza de date este furată.

<?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() generează un hash sărat pentru stocarea în baza de date; PASSWORD_DEFAULT vă menține pe algoritmul recomandat curent.
  • verificare_parolă() verifică o încercare de autentificare în raport cu hash-ul stocat fără a-l decripta vreodată.

Deoarece sarea și algoritmul sunt stocate în hash, nu le gestionați niciodată singur, ceea ce face ca aceasta să fie modalitatea corectă și pregătită pentru viitor de a gestiona parolele în PHP.

Întrebări frecvente

Folosește instrucțiuni pregătite cu parametri legați în MySQL sau PDO. Acestea trimit interogarea și datele separat, astfel încât datele introduse de utilizator nu pot modifica niciodată structura interogării. Aceasta este o metodă mai puternică decât comanda manuală esca.ping intrare.

`strip_tags` elimină complet etichetele HTML și PHP, în timp ce `htmlspecialchars` le convertește în entități sigure, astfel încât să fie afișate ca text. Pentru ieșire, `esca`ping Împotriva XSS, htmlspecialchars este de obicei alegerea mai sigură.

Generați un token CSRF unic per sesiune, încorporați-l ca un câmp ascuns în fiecare formular și verificați-l la trimitere. Respingeți orice solicitare al cărei token lipsește sau nu corespunde cu valoarea stocată.

Da. Inteligența artificială poate scana injecțiile SQL, XSS, hashing-ul nesigur al parolelor și gestionarea nesigură a fișierelor, apoi poate explica fiecare risc și poate sugera o soluție. Tratați-o ca pe o primă trecere utilă, nu ca pe un înlocuitor pentru o analiză de securitate.

Da. Inserați codul vulnerabil, iar inteligența artificială îl poate rescrie cu instrucțiuni pregătite, generând codul ECA.pingși validarea intrării. Testați codul corectat și confirmați corecția în raport cu intrarea originală a atacului.

Rezumați această postare cu: