Ultimate PHP Security Best Practices

php security guide

deoarece PHP este coloana vertebrală pentru aproape fiecare site web, prin urmare, securitatea PHP nu ar trebui considerată neglijabilă cu orice preț. Cu toate acestea, dezvoltatorii PHP au privilegiul de a evita amenințările comune, cum ar fi falsificarea cererilor între site-uri, injecțiile SQL și manipularea datelor. Și toate acestea sunt utile cu ajutorul funcțiilor de securitate încorporate în PHP, care facilitează dezvoltatorii să protejeze site-ul web.

se spune că PHP este cel mai puternic limbaj de server, PHP utilizează 80% din web-ul mondial, cu top 10 milioane de domenii. Din acest motiv, trebuie să înțelegeți că PHP vă va ajuta să vă protejați împotriva atacatorilor.

securizarea aplicațiilor web de la tot felul de încercări de atac falsificate este datoria finală a unui dezvoltator web. Ar trebui să vă construiți aplicațiile web suficient de protectoare pentru a nu avea probleme de securitate sau lacune.

PHP este cel mai folosit limbaj de programare web din întreaga lume. Diferite aplicații PHP împărtășesc diferite părți ale codului și scripturilor lor cu alte aplicații web. În cazul în care bucata de cod partajată este găsită detectată vulnerabilă, toate aplicațiile care utilizează acea bucată de cod partajată sunt puse în pericol și considerate vulnerabile.

Păstrați-vă aplicațiile în siguranță în Cloud

Cloudways oferă 2FA, SSL gratuit și funcții de securitate mai avansate pe serverele gestionate care vă mențin aplicația în siguranță.

PHP este cel mai criticat limbaj de scripting când vine vorba de securitate. O mare parte din dezvoltatori și experți QA consideră că PHP nu are tehnici robuste pentru a securiza aplicațiile. Verdictul are și un motiv, deoarece PHP este cel mai vechi și utilizat pe scară largă limbaj pentru dezvoltarea aplicațiilor web. Dar de mult timp de la PHP 5.6, nu am văzut nicio actualizare majoră în ceea ce privește securitatea și, prin urmare, limbajul se confruntă cu unele probleme de securitate.

cât de sigur este PHP

PHP este la fel de sigur ca orice altă limbă majoră. PHP este la fel de sigur ca orice limbaj major de pe server. Cu noile cadre și instrumente PHP introduse în ultimii ani, acum este mai ușor ca niciodată să gestionați securitatea de top.

dacă facem o comparație PHP este securizat uniform. Rails, Java, Javascript și alte limbi, toate au avut vulnerabilitățile lor de-a lungul anilor. „Dacă găsiți un limbaj care nu a avut o vulnerabilitate de o anumită formă sau formă, puteți scrie cod securizat în PHP perfect.

probleme de securitate în PHP CMS

CMS populare precum WordPress, Joomla, Magento și Drupal sunt construite în PHP și conform Sucuri, majoritatea vulnerabilităților din PHP CMS au ieșit la iveală în cursul anului 2017:

  • problemele de securitate WordPress au crescut de la 74% în 2016 T3 la 83% în 2017.
  • problemele de securitate Joomla au scăzut de la 17% în 2016 T3 la 13,1% în 2017.
  • problemele de securitate Magento au crescut marginal de la 6% în T3 2016 la 6,5% în 2017.
  • problemele de securitate Drupal au scăzut ușor de la 2% în T3 2016 la 1,6% în 2017.

comparație infecție cms

comparație infecție cms

situația actuală nu este suficient de bun, dar datorită contribuabili open source, care încearcă din greu pentru a depăși problemele și am văzut unele schimbări drastice în PHP de întârziere. PHP 7.x a fost lansat anul trecut cu diverse actualizări și remedieri. Cel mai bun lucru despre PHP 7.x se referă la actualizările de securitate care au reînnoit cu adevărat protocolul de securitate al limbii.

ce conține acest tutorial de securitate PHP?

lucrez la probleme de securitate și performanță PHP de foarte mult timp, fiind foarte activ în comunitatea PHP întrebând dezvoltatorii de top despre sfaturile și trucurile pe care le folosesc în proiectele lor live. Prin urmare, scopul principal al acestui tutorial de securitate PHP este de a vă face conștienți de cele mai bune practici de securitate în aplicațiile web PHP. Voi defini următoarele probleme și voi menționa soluțiile posibile pentru acestea.

  • actualizare PHP regulat
  • Cross Site scripting (XSS)
  • SQL Injection atacuri
  • Cross Site cerere fals XSRF/CSRF
  • sesiune deturnarea
  • ascunde fișierele din Browser
  • siguranță încărcați fișiere
  • utilizați certificate SSL pentru https
  • implementați aplicații PHP pe nori

Notă: Vă rugăm să nu o considerați ca o foaie de înșelăciune completă. Trebuie să existe modalități mai bune și mai multe soluții unice dezvoltatorii ar fi aplicarea pe aplicațiile lor pentru a face perfect securizat.

cele mai bune practici de securitate PHP

în timp ce creați o aplicație web PHP, un inginer web ar trebui să fie preocupat de cele mai bune practici de securitate. O aplicație web nesigură oferă hackerilor șansa de a lua date valoroase, cum ar fi informații despre client sau detalii despre cardul de credit. În plus, o încălcare a datelor poate avea un efect extrem asupra valabilității organizației dvs. și a operațiunilor viitoare.

actualizați PHP în mod regulat

chiar acum, cea mai stabilă și cea mai recentă versiune de PHP disponibilă este PHP 8. Vă recomandăm să vă actualizați aplicația PHP la aceasta nouă. Dacă utilizați în continuare PHP 5.6 sau 7, atunci veți avea o mulțime de deprecieri în timp ce actualizați aplicațiile PHP. De asemenea, va trebui să vă actualizați codul și să schimbați unele logici funcționale, cum ar fi hashing-ul parolei etc. Există, de asemenea, câteva instrumente disponibile pentru a verifica deprecierea codului dvs. și pentru a vă ajuta în migrarea acestora. Am enumerat câteva instrumente de mai jos:

  1. verificator de compatibilitate PHP
  2. PHP Mar
  3. Phan

dacă utilizați PHPStorm, atunci puteți utiliza inspecția de compatibilitate PHP 7, care vă va arăta ce cod vă va cauza probleme.

Citeste Mai Mult: PHP Hosting pe Cloudways

Cross-site scripting (XSS)

Cross site scripting este un tip de atac web rău intenționat în care un script extern este injectat în codul sau ieșirea site-ului web. Atacatorul poate trimite codul infectat utilizatorului final, în timp ce browserul nu îl poate identifica ca un script de încredere. Acest atac are loc mai ales pe locurile în care utilizatorul are capacitatea de a introduce și trimite date. Atacul poate accesa cookie-uri, sesiuni și alte informații sensibile despre browser. Să ne uităm la exemplul unei cereri GET care trimite unele date prin URL:

URL: http://example.com/search.php?search=<script>alert('test')</script>$search = $_GET ?? null;echo 'Search results for '.$search;

puteți afla acest atac folosind htmlspecialchars. De asemenea, prin utilizarea ENT_QUOTES, puteți scăpa de ghilimele simple și duble.

$search = htmlspecialchars($search, ENT_QUOTES, 'UTF-8');echo 'Search results for '.$search;

între timp, atacurile XSS pot fi executate și prin atribute, scheme URI codificate și codificare de cod.

Citeste mai mult: Prevenirea XSS în Laravel

SQL Injection atacuri

SQL injection este cel mai frecvent atac în PHP scripting. O singură interogare poate compromite întreaga aplicație. În SQL injection attack, atacatorul încearcă să modifice datele pe care le treceți prin interogări. Să presupunem că procesați direct datele utilizatorului în interogări SQL și, brusc, un atacator anonim folosește în secret caractere diferite pentru a-l ocoli. Consultați interogarea SQL menționată mai jos:

$sql = "SELECT * FROM users WHERE username = '" . $username . "';

$numele de utilizator poate conține date modificate care pot deteriora baza de date, inclusiv ștergerea întregii baze de date în clipi din ochi. Deci, care este soluția? Dop. Vă recomandăm să utilizați întotdeauna declarații pregătite. Dop vă ajută în asigurarea interogări SQL.

$id = $_GET ?? null;

conexiunea dintre baza de date și aplicație se face cu declarația de mai jos:

$dbh = new PDO('mysql:dbname=testdb;host=127.0.0.1', 'dbusername', 'dbpassword');

puteți selecta numele de utilizator pe baza ID-ului de mai sus, dar așteptați! Aici codul SQL ‘GET data’ este injectat în interogarea dvs. Aveți grijă să evitați o astfel de codificare și să folosiți în schimb declarații pregătite:

$sql = "SELECT username, email FROM users WHERE id = ".$id." ;foreach ($dbh->query($sql) as $row) { printf ("%s (%s)\n", $row, $row);}

acum puteți evita posibilitatea de injectare SQL de mai sus folosind

$sql = "SELECT username, email FROM users WHERE id = :id";$sth = $dbh->prepare($sql, );$sth->execute();$users = $sth->fetchAll();

de asemenea, o bună practică este să folosiți ORM ca doctrină sau elocvent, deoarece există cea mai mică posibilitate de a injecta interogări SQL în ele.

Citeste Mai Mult: Protejați site-ul PHP de la SQL Injection

Cross Site cerere fals XSRF/CSRF

atacul CSRF este destul de diferit de atacurile XSS. În CSRF attack, utilizatorul final poate efectua acțiuni nedorite pe site-urile autentificate și poate transfera comenzi rău intenționate pe site pentru a executa orice acțiune nedorită. CSRF nu poate citi datele de cerere și vizează cea mai mare parte cererea de schimbare de stat prin trimiterea orice link sau date modificate în tag-uri HTML. Poate forța utilizatorul să efectueze cereri de schimbare a stării, cum ar fi transferul de fonduri, schimbarea adreselor de e-mail etc. Să vedem această adresă URL în care GET requests trimite bani într-un alt cont:

GET http://bank.com/transfer.do?acct=TIM&amount=100 HTTP/1.1

acum, dacă cineva dorește să exploateze aplicația web, va schimba adresa URL cu numele și suma ca aceasta

http://bank.com/transfer.do?acct=Sandy&amount=100000

acum, această adresă URL poate fi trimisă prin e-mail în orice fișier, imagine etc., iar atacatorul vă poate cere să descărcați fișierul

sau să faceți clic pe imagine. Și, de îndată ce faci asta, te termina instantaneu cu trimiterea sumă uriașă de bani nu știi niciodată despre.

deturnarea sesiunii

deturnarea sesiunii este un anumit tip de atac web rău intenționat în care atacatorul fură în secret ID-ul sesiunii utilizatorului. Acel ID de sesiune este trimis serverului unde matricea $ _SESSION asociată validează stocarea în stivă și acordă acces la aplicație. Deturnarea sesiunii este posibilă printr-un atac XSS sau când cineva obține acces la folderul de pe un server unde sunt stocate datele sesiunii.

pentru a preveni deturnarea sesiunii legați întotdeauna sesiunile la adresa dvs. IP pentru a:

$IP = getenv ( "REMOTE_ADDR" );

urmăriți-l atunci când lucrați la localhost, deoarece nu vă oferă IP-ul exact, ci valorile de tip :::1 sau :::127. Ar trebui să anulați rapid sesiunea (dezactivarea cookie-ului, dezactivarea stocării sesiunii, eliminarea urmelor) ori de câte ori apare o încălcare și ar trebui să încercați întotdeauna să nu expuneți ID-urile în niciun caz.

pentru cookie-uri, cea mai bună practică este să nu folosiți niciodată datele serializate stocate într-un cookie. Hackerii pot manipula cookie-urile cu ușurință, ceea ce duce la adăugarea de variabile în domeniul dvs. de aplicare. Ștergeți în siguranță cookie-urile astfel:

setcookie ($name, "", 1);setcookie ($name, false);unset($_COOKIE);

prima linie a codului asigură că cookie-ul expiră în browser, a doua linie descrie modul standard de eliminare a unui cookie (astfel nu puteți stoca fals într-un cookie). A treia linie elimină cookie-ul din scriptul dvs.

Citeste mai mult: Redis Server ca un handler sesiune PHP

ascunde fișierele din Browser

dacă ați folosit micro-cadre de PHP, atunci trebuie să fi văzut structura de directoare specifice care asigură plasarea fișierelor în mod corespunzător. Cadrele permit să aibă fișiere diferite, cum ar fi controlere, modele, fișier de configurare(.yaml) etc în acel director, dar de cele mai multe ori browserul nu procesează toate fișierele, dar acestea sunt disponibile pentru a fi văzute în browser. Pentru a rezolva această problemă, nu trebuie să plasați fișierele în directorul rădăcină, ci într-un folder public, astfel încât acestea să nu fie accesibile tot timpul în browser. Uită-te la structura de directoare a cadrului subțire de mai jos:

structura subțire a directorului

structura subțire de directoare

încărcați în siguranță fișiere

încărcarea fișierelor este o parte necesară a oricărei aplicații de procesare a datelor Utilizatorului. Dar amintiți-vă în unele puncte, fișierele sunt folosite și pentru atacurile XSS, așa cum am explicat deja mai sus în articol. Revenind la elementele de bază, utilizați întotdeauna cererea POST în formular și declarați proprietatea enctype=”multipart/form-data” în eticheta <form>. Apoi validați tipul de fișier folosind clasa finfo ca aceasta:

$finfo = new finfo(FILEINFO_MIME_TYPE);$fileContents = file_get_contents($_FILES);$mimeType = $finfo->buffer($fileContents);

dezvoltatorii își pot crea propriile reguli de validare a fișierelor personalizate și ultra-sigure, dar unele cadre precum Laravel, Symfony și codeigniter au deja metode predefinite pentru a valida tipurile de fișiere.

să ne uităm la un alt exemplu. HTML-ul formularului ar trebui să fie astfel:

<form method="post" enctype="multipart/form-data" action="upload.php"> File: <input type="file" name="pictures" multiple="true"> <input type="submit"></form>

și încărcați.php conține următorul cod:

foreach ($_FILES as $key => $error) { if ($error == UPLOAD_ERR_OK) { $tmpName = $_FILES; $name = basename($_FILES); move_uploaded_file($tmpName, "/var/www/project/uploads/$name"); }}

declararea corectă a UPLOAD_ERR și basename () poate preveni atacurile de traversare a directorului, dar câteva alte validări – cum ar fi dimensiunea fișierului, redenumirea fișierului și stocarea fișierelor încărcate în locație privată – sunt, de asemenea, necesare pentru a consolida securitatea aplicațiilor.

Citeste mai mult: Imagine și fișier de încărcare în PHP

utilizați certificate SSL pentru HTTPS

toate browserele moderne, cum ar fi Google Chrome, Opera, Firefox și altele, recomandăm să utilizați protocolul HTTPS pentru aplicații web. HTTPs oferă un canal de acces securizat și criptat pentru site-urile care nu sunt de încredere. Trebuie să includeți HTTPS prin instalarea certificatului SSL pe site-ul dvs. web. De asemenea, vă întărește aplicațiile web împotriva atacurilor XSS și împiedică hackerii să citească datele transportate folosind coduri. Cloudways oferă certificate SSL gratuite cu un singur clic, care sunt valabile timp de 90 de zile și le puteți revoca sau reînnoi cu ușurință cu un clic. Puteți urma ghidurile pentru configurarea certificatelor SSL în aplicațiile PHP, WordPress, Magento și Drupal.

implementați aplicații PHP pe nori

găzduirea este pasul final și primordial pentru orice aplicație web, deoarece creați întotdeauna proiectul pe servere PHP locale și le implementați pe servere live care oferă găzduire partajată, cloud sau dedicată. Vă recomandăm întotdeauna să utilizați cloud hosting cum ar fi DigitalOcean, Linode, AWS. Acestea sunt rapide, sigure și sigure pentru orice tip de site și aplicație. Ele oferă întotdeauna strat securizat pentru a preveni atacurile DDOS, Brute force și phishing, care sunt extrem de dăunătoare pentru aplicațiile web.

s-ar putea să vă placă și: capcanele găzduirii partajate Laravel pentru proiectele dvs.

pentru a implementa aplicații PHP pe serverele cloud, trebuie să aveți abilități Linux bune pentru a crea stive web puternice precum LAMP sau LEMP, care vă costă adesea timp și buget pentru profesioniștii Linux. În schimb, platforma de găzduire PHP și MySQL gestionată de Cloudways vă oferă modalitatea ușoară de a implementa servere cu Thunderstack în câteva clicuri pe furnizorii de cloud menționați mai sus. Thunderstack vă ajută aplicația PHP să fie complet securizată de diverse atacuri rău intenționate și garantează performanțe optimizate.

Read more: Enhanced Cloudways stadializare mediu este acum disponibil pentru toți utilizatorii

Document Root Setup

rădăcină document pentru aplicații PHP pe orice server trebuie să fie setat la var/www/html, astfel încât utilizatorii pot accesa site-ul dvs. prin intermediul browser-ului. Dar, în unele cazuri, atunci când dezvoltați API-uri cu cadre precum Laravel, Symfony și Slim, trebuie să actualizați Webroot în folderul `/public.

/public servește ieșire de aplicare similar cu site-ul PHP simplu cu index.fișier php. Scopul de a seta webroot la var/www/html/public este de a ascunde fișierele sensibile cum ar fi .htaccess și .env care conțin variabilele de mediu și acreditările bazei de date, poștă, API-uri de plată.

de asemenea, cadre precum Laravel, Symfony recomandă să nu mutați toate fișierele în folderul rădăcină, creând în schimb o structură de directoare frumoasă pentru a salva fișierele conexe, cum ar fi vizualizarea, modelele și controlerele, este o abordare mai rezonabilă.

Log toate erorile și ascunde în producție

odată ce ați dezvoltat site-ul și implementat pe server live. Primul lucru pe care trebuie să-l faceți este să dezactivați afișarea erorilor, deoarece hackerii ar putea obține aceleași informații valoroase din erori. Setați acest parametru în php.fișier ini:

display_errors=Off

acum, după ce a făcut afișare Off, log erori PHP la un anumit fișier pentru nevoile viitoare:

log_errors=Onerror_log=/var/log/httpd/php_scripts_error.log

evident, puteți schimba numele fișierului după cum doriți.

s-ar putea să vă placă și: simplificați înregistrarea erorilor Laravel cu integrarea Rollbar PHP

lista albă IP publică pentru Mysql

atunci când lucrați cu aplicații PHP, trebuie frecvent să configurați baza de date mysql în scripturi interne, precum și în clienții mysql. Majoritatea clienților sunt utilizați pentru a configura conexiunea la distanță MySQL care are nevoie de adresa IP sau alt nume de gazdă furnizat de serverul de găzduire pentru a crea conexiunea.

IP-ul public pentru conexiunea Mysql la distanță trebuie să fie pe lista albă pe serverul dvs. de găzduire, astfel încât un utilizator anonim să nu poată avea acces la baza de date. De exemplu, pe Cloudways puteți lista albă IP ca:

acum vă puteți conecta SQLyog sau Mysql workbench pentru a lucra de la distanță cu baza de date.

Î: Cum să testați securitatea PHP?

A: există puține instrumente de scanare a codurilor disponibile pe piață care vă pot ajuta să analizați calitatea și securitatea codului aplicațiilor PHP. PHP Malware Finder (PMF) este unul dintre instrumentele de testare de securitate de top care ajută la găsirea codurilor rău intenționate în fișiere. De asemenea, puteți utiliza RIPS, care este un instrument popular de analiză a codului care ajută la găsirea vulnerabilităților codului în timp real.

Î: Cum se asigură securitatea bazei de date PHP?

A: pentru a asigura securitatea bazei de date, ar trebui să utilizați întotdeauna practici cum ar fi SQL injection protection, firewall-uri de baze de date, criptări regulate de date și altele similare.

Î: Care este o metodă sigură de criptare a parolei în PHP?

A: Md5 este acronimul pentru Message Process 5, iar sha1 este acronimul pentru Secure hash algoritm 1. Ambele sunt utilizate pentru a cripta șiruri de caractere. Odată ce un șir a fost criptat, devine repetitiv pentru a-l decoda. Md5 și sha1 sunt extrem de utile atunci când stocarea parolelor în baza de date.

Î: Ce este o vulnerabilitate PHP?

a: PHP Object Injection este o vulnerabilitate la nivel de aplicație care pare să permită unui atacator să efectueze diverse tipuri de atacuri nocive, cum ar fi injecția de cod, injecția SQL, traversarea căii și refuzul serviciului.

un atac DDoS compromite mai multe atacuri ale sistemelor informatice. Țintele obișnuite sunt serverele, site-urile web sau alte resurse de rețea.

acest lucru se întâmplă atunci când intrarea furnizată de utilizator nu este gestionată înainte de a fi transmisă funcției unserialize() PHP. Deoarece PHP permite serializarea obiectelor, agresorii pot trece șiruri serializate ad-hoc la un apel unserialize() fără apărare.

Împachetez!

Ei bine, cele mai bune practici de securitate PHP este un subiect foarte vast. Dezvoltatorii din întreaga lume tind să dezvolte diferite cazuri de utilizare pentru a securiza aplicațiile web. În timp ce multe companii rulează diferite programe de recompense pentru a afla lacunele și vulnerabilitățile de securitate din aplicațiile lor și astfel recompensează acei experți în securitate care subliniază lacunele critice din aplicații. Acest articol acoperă problemele de bază de securitate PHP, pentru a vă ajuta să înțelegeți cum să vă asigurați proiectele PHP de diferite atacuri rău intenționate. Voi scrie, de asemenea, despre câteva sfaturi și trucuri de securitate PHP în viitor. Până atunci puteți contribui gândurile și practicile de securitate în secțiunea de comentarii de mai jos.

Împărtășește-ți părerea în secțiunea de comentarii. Comentariu Acum

partajați acest articol

revizuirea clienților la

„Cloudways hosting are una dintre cele mai bune servicii pentru clienți și viteza de găzduire”

Sanjit C

Shahroze Nawaz

Shahroze este un manager de comunitate PHP la Cloudways – o platformă de găzduire PHP gestionată. Pe lângă viața profesională, iubește filmele și călătoriile. Puteți să-l trimiteți prin e-mail la

Conectați-vă la: Twitter Community Forum

Leave a Reply

Adresa ta de email nu va fi publicată.