Cuprins
PHP a apărut ca un limbaj versatil care ne permite să manipulăm datele introduse printr-un formular HTMLDesigur, în cadrul constituției sale există mai multe instrumente și capabilități decât aceasta.Versatilitatea și ușurința de utilizare îl fac una dintre cele mai utilizate limbi la nivel mondial pentru proiecte web care variază de la simple forme de contact, până la a fi baza aplicațiilor mari la început, cum ar fi Facebook.
Problema cu versatilitatea și ușurința de utilizare este că dezvoltatorul nu este obligat să scrie cod securizat, dar cu caracteristici foarte nesigure codul va rula perfect și de aici apar problemele.
Securitatea aplicațiilor web este ceva ce nu aveți de la început PHPCu toate acestea, acest lucru nu îl face un limbaj nesigur, deoarece securitatea corespunde unui set de tehnici și stiluri de lucru pe care un programator trebuie să le cunoască pentru a le aplica scripturilor lor.
CadreEste adevărat că odată cu apariția cadre Multe caracteristici de securitate sunt incluse în mod implicit, totuși nu toți dezvoltatorii au folosit un cadru în aplicații mai vechi și este posibil ca pentru unele funcții să utilizați un cadru fii un exces.
Cheile pentru a obține securitate în aplicațiile noastre cu PHP Acestea sunt: controlează și rafinează datele pe care utilizatorul le introduce în formular, verifică originea cererilor HTTP pe care aplicația noastră o primește și, în cele din urmă, evită executarea directă a instrucțiunilor prin intermediul formularelor.
Există o regulă în programare și este universală, adică nu se aplică numai PHPToate datele care nu sunt generate de aplicație sunt potențial rău intenționate, ceea ce înseamnă că, dacă nu este un rezultat pe care l-am programat, nu putem avea încredere.
Acest principiu se aplică valorilor formularelor, fișierelor, Baze de date, deci un prim pas pentru a ne îmbunătăți securitatea este să filtrăm datele dacă trebuie să interacționăm cu aceste elemente.
Vom enumera câteva dintre cele mai bune practici pe care le putem aplica atunci când filtrăm datele introduse în formularul nostru:
Utilizați liste de valori permiseCu această practică știm că, dacă datele care vin prin formular nu trec prin lista noastră de valori permise și sigure, nu ar trebui să treacă la procesare, în acest moment trebuie trimis utilizatorului un mesaj pentru a-și corecta datele.
Nu corectați niciodată date nevalidePoate suna tentant să creăm un sistem foarte inteligent care să corecteze datele cu inconsecvențe, dar pe termen lung acest lucru ne poate aduce probleme și vulnerabilități, de aceea, dacă detectăm ceva neregulat, nu ar trebui să îl procesăm.
Folosiți convenția de denumireCu această practică putem distinge datele și valorile sigure de acele date și valori introduse de utilizator, cu aceasta vom consolida în cadrul programării utilizarea primelor pentru procesare.
Există două tipuri de filtrare ceea ce putem face, primul este al valorilor pe care le cunoaștem și al doilea al valorilor pe care nu le cunoaștem.
primul Este foarte ușor de făcut, trebuie doar să efectuăm rutine cu liste de elemente cunoscute și să le comparăm cu acestea, totuși acest lucru este greoi și dificil de realizat în aplicații mai mari. al doilea Implică crearea rutinelor care evaluează structura valorii și dacă corespunde cu cea pe care o considerăm sigură, o lăsăm să treacă la procesare, altfel aruncăm o eroare, fiind de natură dinamică acesta este formatul recomandat.
Să vedem mai jos un exemplu de cod al primului tip de filtrare:
În următorul cod vom vedea cum creăm un formular care are un element Selectați Pentru ca utilizatorul să selecteze o culoare, deoarece utilizatorul nu trebuie să scrie datele pentru a le introduce direct, putem cădea în eroarea de a nu valida informațiile, dar acest lucru înseamnă doar că avem un decalaj de securitate, deoarece cu un formular care se aplică aceleași nume putem primi informații potențial periculoase.
De aceea, odată ce valoarea formularului este trimisă POST, scriptul nostru evaluează valorile posibile și, în cazul în care suntem una dintre cele așteptate, îl trecem la matricea noastră de valori sigure, așa cum vedem mai jos.
Cu aceasta am rezolvat problema într-un mod simplu, cu toate acestea, dacă lista, în loc să aibă trei culori, ar fi avut o sută, povestea simplității ar fi fost diferită.
În exemplul următor vom valida dinamic un câmp introdus de utilizator într-un mod adecvat, pentru aceasta trebuie să îl folosim expresii obisnuite și în acest fel evitați introducerea de caractere care pun în pericol prelucrarea noastră, evaluați și dimensiunea intrării și evitați astfel revărsare sau suprasolicitarea tipului nostru de date în procesarea programului. Să vedem codul din imagine:
MARI
Aici cheia pentru a realiza validarea este să știm corect ce vrem să procesăm, de exemplu, în cazul unui nume de utilizator, ceea ce cerem în mod normal sunt caractere alfanumerice și cratime, de aceea în frază regulată Validăm acest lucru, de asemenea, trebuie să fie mai mare de 0 caractere și maximum 32, dacă ceea ce este introdus de utilizator îndeplinește toate acestea, trece validarea, cel mai bun dintre toate este că funcționează cu o valoare cum ar fi o sută, din moment ce este total dinamic.O altă amenințare împotriva căreia trebuie să ne protejăm este executarea de scripturi de pe alte site-uri, datorită AJAX Putem trimite formulare de la client către o rută, inclusiv tipul de cerere și valorile dorite.
Punct slabAcest tip de slăbiciune face foarte ușor pentru cineva să ne inspecteze formularul și să verifice câmpurile noastre, unde deținând aceste nume și metoda HTTP Încercați să trimiteți valori nesigure, pentru a evita acest lucru, trebuie să aplicăm tehnici care ne permit să validăm de unde provine solicitarea și dacă este sigur să permiteți executarea acesteia, altfel evitați continuarea căii în cadrul programului nostru.
Pentru a evita această problemă, un sistem de jetoane Da sesiuni, astfel încât, atunci când formularul este trimis, evaluăm dacă sesiunea este aceeași cu cea stabilită într-un mod sigur și, astfel, utilizatorul rău intenționat nu poate continua.
Un obiectiv cheie al unui atacator este să poată introduce codul său în mediul nostru, pentru aceasta ei folosesc injecții de cod SQL, acest atac este cunoscut sub numele de Injecție SQL, unde, cu formulare nesecurizate și prelucrări necorespunzătoare, putem primi instrucțiuni SQL direct fără limite. De exemplu, dacă evaluarea noastră SQL este următorul în scriptul nostru PHP:
Putem folosi orice utilizator al sistemului ca nume de utilizator și pentru parola folosim două scripturi “--” cu aceasta putem transmite securitatea fără probleme, deoarece două scripturi sunt un comentariu SQL și, prin urmare, parola nu va fi evaluată.
Modul corect de a evaluați un SQL care provine de la utilizator, elimină caracterele speciale și periculoase, evaluând doar expresii sigure. Să vedem un exemplu mai jos despre cum să evitați cazul anterior:
Primul lucru pe care trebuie să-l facem este un igienizarea datelor, adică împiedicați-l să ajungă pur din formă către a noastră SQL; Al doilea lucru este că trebuie să evaluăm că, dacă cele două valori corespund pentru a da acces, dar acesta din urmă corespunde logicii fiecăruia, să vedem în imagine cum atingem obiectivul:
MARI
Aici ceea ce am făcut este să folosim instrumentul declarații pregătite ce ne permite librăria DOP pentru conectare la Bază de date, cu aceasta realizăm că ceea ce este introdus nu este luat niciodată într-un alt context care nu sunt date, vedem, de asemenea, că, în loc să folosim metoda POST Am folosit matricea noastră sigură, ceea ce înseamnă că datele noastre sunt deja verificate, astfel încât riscul este mai mic.Cu aceasta am terminat acest tutorial, deoarece vedem că acțiunile pe care le putem întreprinde pentru a face aplicația noastră mai sigură sunt simple, nu necesită un efort uman, totuși ne ajută să evităm cele mai frecvente atacuri și poate cele mai frecvente sunt date. Există o percepție proastă despre PHP dintre cei care spun că este un limbaj nesigur, dar realitatea este că nesiguranța este produsă de programator, deoarece limbajul are doar instrumente pe care le putem folosi pentru a îmbunătăți și preveni atacurile asupra aplicațiilor noastre prin intermediul datelor introduse de utilizator.