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

Potențiale amenințări de securitate

Sunt practic două grupuri de oameni 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 nevinovat parametri greșiți în formulare care pot avea efecte negative asupra unui site web sau aplicație 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 folosind fie formulare de introducere a utilizatorului, fie adrese URL care folosesc variabile.

Codul atașat comentează condiția din clauza WHERE a unei instrucțiuni SQL. Codul anexat 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 - acest tip de atac inserează de obicei cod dăunător JavaScenariul. Acest lucru se realizează folosind formulare de introducere a utilizatorului, cum ar fi formularele de contact și de comentarii. Acest lucru se face pentru a;

  • Preluați informații sensibile, cum ar fi date cookie
  • Redirecționați utilizatorul către o adresă URL diferită.
  • Alte amenințări pot include – injectarea codului PHP, injectarea Shell, injectarea e-mailului, divulgarea codului sursă script etc.

Cele mai bune practici de securitate a aplicațiilor PHP

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

PHP strip_tags

Funcțiile strip_tags elimină HTML, JavaScenariu sau etichete PHP dintr-un șir.

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 comments.php în folderul phptuts, navigați la adresa URLhttp://localhost/phptuts/comments.php

PHP strip_tags

Să presupunem că primiți următoarele ca intrare de utilizator alert(‘Your site sucks!’);

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo "<h4>My Commenting System</h4>";

echo $user_input;

?>

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

PHP strip_tags

Acum să ne securizăm aplicația de astfel de atacuri folosind funcția strip_tags.

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo strip_tags($user_input);

?>

Navigați la adresa 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 este pentru sistemul de comentarii.

Utilizează funcția filter_var și constanta FILTER_SANITIZE_STRIPPED pentru a elimina etichetele.

<?php

$user_input = "<script>alert('Your site sucks!');</script>";

echo filter_var($user_input, FILTER_SANITIZE_STRIPPED);

?>

ieșire:

alert('Your site sucks!');

Funcția mysqli_real_escape_string Această funcție este folosită pentru a proteja o aplicație împotriva injectării 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 introduce următorul cod în caseta de text ID utilizator. ' SAU 1 = 1 — Și 1234 în caseta de text pentru parolă Să codificăm modulul de autentificare

<?php

$uid = "' OR 1 = 1 -- ";

$pwd = "1234";

$sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';";

echo $sql;

?>

Rezultatul final va fi

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

AICI,

  • „SELECT * FROM users WHERE user_id = ”” 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 conectare.

<?php

$uid = mysqli_real_escape_string("' OR 1 = 1 -- ");

$pwd = mysqli_real_escape_string("1234");

$sql = "SELECT uid,pwd,role FROM users WHERE uid = '$uid' AND password = '$pwd';";

echo $sql;

?>

Codul de mai sus va ieși

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

notițe a doua ghilimă simplă a fost scăpată pentru noi, va fi tratată ca parte a ID-ului de utilizator și parola nu va fi comentată.

PHP Md5 și PHP sha1

Md5 este acronimul pentru Message Digest 5 și sha1 este acronimul pentru Secure Hash Algorithm 1.

Ambele sunt folosite pentru a cripta șiruri.

Odată ce un șir a fost criptat, este plictisitor să-l decriptați.

Md5 și sha1 sunt foarte utile la stocarea parolelor în baza de date.

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 adresa URL

PHP Md5 și PHP sha1

După cum puteți vedea din hashurile de mai sus, dacă un atacator ar obține acces la baza dvs. de date, tot nu ar ști parolele pentru a se autentifica.

Rezumat

  • Securitatea se referă la măsurile puse în aplicare pentru a proteja o aplicație de atacuri accidentale și rău intenționate.
  • Funcția strip_tags este folosită pentru a elimina etichete precum din datele de intrare
  • Funcția filter_var validează și php igienizează datele de intrare
  • mysqli_real_escape_string este folosit pentru a dezinfecta instrucțiunea SQL. Îndepărtează caracterele rău intenționate din declarații
  • atât MD5, cât și SHA1 sunt folosite pentru a cripta parola.