4 reguli de siguranță de bază în PHP

host23 0

Pentru a utiliza cât mai bine PHP pe site-ul dvs. web, trebuie să aveți în vedere câteva reguli simple de securitate de bază despre modul în care scriem codul nostru și gestionăm software-ul pe site-urile noastre.

Aveți grijă la introducerea utilizatorului
Când creăm un formular sau interpretăm variabilele unui șir de interogare într-o adresă URL, trebuie să avem întotdeauna în vedere faptul că datele trimise pot fi manipulate într-un mod arbitrar pentru a încerca să exploatăm orice găuri de securitate din codul nostru.

De obicei, cei care manipulează aceste date o fac inițial pentru a verifica modul în care aceste excepții din intrare sunt tratate de noi. De exemplu, dacă nu am implementat corect tratarea erorilor și excepțiilor, persoana care efectuează aceste teste va trebui pur și simplu să verifice dacă serverul web returnează o eroare HTTP 500. Această eroare este ceea ce returnează PHP în mod implicit, ca în mediul de producție, afișarea erorilor este dezactivată și aceste erori sunt înregistrate în fișierele jurnal care pot fi consultate de la panoul de control.

Scenariul descris tocmai poate fi considerat pur ideal, deoarece foarte des aceste verificări rău intenționate sunt efectuate de instrumente de analiză automată. Aceste instrumente se bazează pe o bază de date imensă cu vulnerabilități cunoscute și necesită o interacțiune minimă cu utilizatorul. Odată ce adresa site-ului nostru a fost introdusă, aceste instrumente procedează în mod sistematic la scanarea paginilor noastre, testând prezența vulnerabilităților menționate anterior.

Atunci când se constată o vulnerabilitate, instrumentul oferă utilizatorului și un link de unde îi poate vizualiza detaliile și poate descărca adesea codul pe care îl va folosi pentru a-l exploata. De aici înainte, acțiunile unui atacator pot fi ușor ghicite.

Cele 4 reguli de securitate din PHP
Din fericire pentru noi, există reguli de securitate pe care le putem adopta pentru a bloca aceste tipuri de atacuri asupra codului PHP. Să le vedem împreună.

  1. FILTRAȚI Intrarea utilizatorului
    Un filtru se bazează pe o serie de reguli care numai dacă sunt satisfăcute permit intrării primite să treacă la nivelul următor, adică la procesare.

Să presupunem că avem un formular de contact. Trebuie să fim siguri că e-mailul furnizat este valid. Putem folosi funcția PHP filter_var () astfel:

123456$email = trim($_POST[‘email’]);$errors = []; if(!filter_var($email, FILTER_VALIDATE_EMAIL)){    $errors[] = ‘Indirizzo email non valido.’;}
Filtrele pot și trebuie implementate nu numai pe șiruri, ci mai general pe toate tipurile de date gestionate de PHP.
Să presupunem că dorim să permitem descărcarea documentelor PDF. Trebuie să fim siguri că un atacator nu poate descărca alte tipuri de fișiere. Prin urmare, trebuie să verificăm dacă există un fișier într-un anumit director și că este într-adevăr un fișier PDF.
2345678910111213141516171819$filename = trim($_GET[‘f’]);if(!ctype_alnum($filename)) {    exit;}if(strlen($filename) > 21) {    exit;}$download_dir = $_SERVER[‘DOCUMENT_ROOT’] . ‘/downloads/’;$file = $download_dir . $filename;if(!file_exists($file)) {    exit;}if(mime_content_type($file) !== ‘application/pdf’) {    exit;}
Filtrul nostru constă dintr-o serie de reguli implementate în ordine. Primul verifică dacă numele fișierului este compus doar din caractere alfanumerice, al doilea că numele fișierului are o anumită lungime, al treilea că fișierul există și al patrulea că tipul MIME al fișierului solicitat este conform cu formatul PDF. Nu am folosit extensia de fișier, deoarece acest tip de verificare este absolut nesigur. De asemenea, ar putea cauza diverse probleme datorită prezenței unei eventuale extensii duble.
SANEȘTEZĂ INTRAREA UTILIZATORULUI
Igienizarea introducerii utilizatorului are loc atunci când acceptăm introducerea utilizatorului, dar totuși dorim să eliminăm orice tip de font care ar putea fi periculos.
Un exemplu tipic în PHP este prevenirea injecției SQL cu MySQL. În acest caz, putem folosi atât instrucțiuni pregătite, cât și metode de clasă pentru a elimina din șiruri acele caractere care au o semnificație specială pentru MySQL.

$mysqli = new mysqli(„localhost”, „username”, „password”, „database”);$name = trim($_POST[‘name’]);$query = sprintf(„SELECT code FROM regions WHERE name=’%s'”,    $mysqli->real_escape_string($name));$result = $mysqli->query($query);  // Sanificazione tramite prepared statements  $dsn = ‘mysql:dbname=database;host=localhost’;$user = ‘username’;$password = ‘password’; $dbh = new PDO($dsn, $user, $password);$name = trim($_POST[‘name’]);$query = ‘SELECT code FROM regions WHERE name = :name’;$sth = $dbh->prepare($query, [PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY]);$sth->execute([‘:name’ => $name]);$result = $sth->fetch();

Un alt exemplu mult mai complex este acela de a preveni atacurile XSS. Deși mulți cred că pentru a preveni acest tip de atac este necesar doar să apelăm la unele funcții PHP, cum ar fi strip_tags () sau htmlspecialchars (), în realitate acesta este cazul în care trebuie să apelăm la comunitatea PHP și să adoptăm o soluție care ne evită nu numai să reinventăm roata, ci și să ne expunem riscurilor potențiale.

HTML Purifier este o soluție conformă standardelor pentru a filtra datele introduse de utilizator și pentru a preveni generarea de HTML rău intenționat. Această bibliotecă ia în considerare și codul JavaScript și CSS care pot conține șiruri periculoase și îl filtrează înainte ca acesta să fie trimis la ieșirea unei pagini.

  1. ACTUALIZAȚI SOFTWARE-UL ÎN UTILIZARE
    În cazul în care folosim un CMS precum WordPress sau un framework precum Laravel pentru a gestiona site-ul nostru web, ar trebui să avem întotdeauna grijă să ne actualizăm software-ul imediat ce este lansată o nouă actualizare. Și dacă această actualizare conține remedieri de securitate, actualizarea este obligatorie.

Pentru a face acest lucru fără probleme, ne putem clona domeniul, baza de date și fișierele într-un subdomeniu. Pentru a-l proteja, utilizăm caracteristica Directory Privacy din panoul Fișiere al cPanel, pur și simplu adăugând o parolă în directorul rădăcină al subdomeniului nostru.

Dacă actualizarea a avut succes și nu s-au găsit probleme sau defecțiuni, putem șterge subdomeniul nostru de copiere și putem repeta procedura de actualizare de pe site-ul principal.

  1. ACTUALIZAȚI SIGUR VERSIUNEA PHP
    Pentru a actualiza PHP în cel mai bun mod, trebuie să verificăm pe site-ul oficial PHP ce știri și modificări au fost introduse cu versiunea pe care dorim să o activăm.

Dacă am dezvoltat site-ul nostru de la zero, va fi suficient să citim notele de versiune și să verificăm dacă codul nostru este conform.

Dacă, în schimb, folosim un CMS precum WordPress, cea mai complexă parte nu privește nucleul, ci modulele, temele și pluginurile instalate. De fapt, acestea nu sunt întotdeauna conforme cu cea mai recentă versiune PHP. Ce putem face dacă nu suntem siguri este să așteptăm următoarea actualizare a acestor componente. De asemenea, este important să verificăm întotdeauna, pe site-urile dezvoltatorilor, dacă există probleme cunoscute cu versiunea de PHP pe care dorim să o activăm.

Concluzie
Folosind unele măsuri de precauție și un minim de prudență, putem folosi în siguranță PHP pentru a dezvolta și gestiona site-urile noastre web. Puteți începe urmând aceste 4 reguli simple de securitate de bază în PHP.

Faci un comentariu sau dai un răspuns?

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *