Cum să dezvoltați programe securizate pentru web
Securitatea în aplicațiile web este un aspect critic. Dacă aplicațiile web pe care le dezvoltați au găuri de securitate, alte persoane le-ar putea deteriora, ceea ce ar fi destul de jenant. Ar putea fura informațiile personale ale utilizatorilor dvs., ceea ce este foarte iritant și poate chiar să vă aducă probleme juridice grave în jurisdicția dvs. S-ar putea întâmpla, de asemenea, să utilizeze serverul dvs. pentru a trimite mesaje nedorite sau pentru a efectua atacuri de negare a serviciilor sau pentru a răspândi programe rău intenționate și pentru toate acele lucruri care fac Internetul un loc mai rău pentru restul oamenilor. Prin intermediul unor pași simpli și având o conștiință adecvată, puteți reduce riscul ca acest lucru să vi se întâmple datorită securității pe care o puteți adăuga la programele dvs.
conținut
pași
declarație: "SELECT * FROM userinfo WHERE id = " + a_variabilă + "-"
Acest lucru funcționează bine dacă variabila declarație: "a_variable", este de încredere. Cu toate acestea, dacă un utilizator este cel care oferă această variabilă, un atacator ar putea să intre:
1-DROP utilizatori
Care ar determina executarea acestei interogări:
SELECT * FROM userinfo WHERE id = 1-DROP TABLE users -
Acest lucru ar fi în mod evident teribil. Soluția ar fi dezinfectează cu desăvârșire orice variabilă pe care o oferă un utilizator. PHP oferă funcția
mysql_real_escape_string
pentru MySQL. Alte biblioteci de baze de date pentru alte limbi de programare au același lucru. Utilizați-l și veți fi mult mai protejați. Există, de asemenea, maparea obiectului relațional (cum ar fi Django pentru Python), care vă scutește de a fi nevoit să scrieți cod SQL și să vă ocupați de lanțurile de evacuare înainte de a le transmite în baza de date. Luați în considerare posibilitatea utilizării unui instrument care o implementează.display.php? file = algo.txt
. Dacă ați făcut acest lucru, codul dvs. PHP ar include această afirmație:cer ("/ www / awesomeapp / text-fișiere /" . $ _GET ["fișier"]) -
Acest lucru ar fi extrem de periculos, deoarece i-ai permite să folosească secvențe "../" (pentru a ajunge la directorul părinte) și ar putea include orice fișier care aparține sistemului de fișiere, de exemplu, merge la
display.php? file = .. / .. / .. / .. / .. / etc / passwd
.În cel mai bun caz, acest lucru le-ar permite să adune informații despre configurația serverului dvs., care ar putea oferi informații utile pentru un alt atac diferit. În cel mai rău caz, în cazul în care funcția
necesita
sau include
din PHP (sau alt echivalent în limba pe care o folosiți) vor fi folosite pentru a include conținutul fișierului, acestea ar putea permite executarea codului (manipularea antetului User-Agent și apoi includerea fișierului / proc / auto / mediu
).Soluția este găsirea unui alt mod de a include un fișier care nu face acest lucru în funcție de ceea ce intră utilizatorul sau prin dezinfectarea cu atenție a numelui de fișier furnizat. Verificați valabilitatea fiecărui caracter și aruncați cele care sunt interzise folosind principiul că interzicerea caracterelor care nu sunt permise, în loc să elimine pur și simplu cele care sunt periculoase. Cu alte cuvinte, nu încercați să înlocuiți caractere rău într-un șir. Creați o listă a celor care sunt admise în mod explicit și scanați lanțul pentru a vedea dacă utilizează numai acelea, eliminând cele care nu se află în lista permisă. Aceasta, pe de o parte, este mai simplă și, pe de altă parte, vă va apăra de vectorii de atac pe care nu i-ați luat în considerare.
index.php? person = Bob
) și ar conține ceva de genul:Bună ziua,
Acest lucru ar permite unui atacator să scrie în mod arbitrar coduri jаvascript pe pagină, ceea ce înseamnă că dacă aceștia vor convinge pe cineva să urmeze un link către site, ar putea cauza declanșarea unei acțiuni care are un efect secundar (de exemplu, postați un comentariu). sau trimiteți orice altă formă). Înlocuiește orice caracter greșit cunoscut (citate, <și >
) cu entitatea sa echivalentă în HTML înainte de a scrie pe o pagină.
Multe motoare șablon pot face acest lucru automat și ați putea permite doar acele caractere HTML ale unei variabile de ieșire care sunt explicit declarate sigure. Ar fi bine să luăm în considerare posibilitatea de a utiliza unul.
Dacă trebuie să permiteți un anumit HTML limitat (de exemplu, pentru a permite formatarea textului în comentarii), dezinfectați codul HTML pentru a permite etichetelor considerate sigure și cu efecte secundare minore (cum ar fi ), elimină toate celelalte și, de asemenea, aruncă orice alt atribut HTML nedorit. Încă o dată, principiul ar trebui să fie acceptați doar ceea ce este explicit permis și eliminați orice altceva (dacă acest principiu ar fi fost urmat, una dintre cele mai notorii vulnerabilități WordPress ar fi putut fi evitate, unde codul CSS al unui atribut a fost dezinfectat "stil", dar dacă numele atributului a fost scris cu majuscule, acesta a fost lăsat intact).
ping.php? host = 127.0.0.1
) și astfel puteți fi tentat să utilizați codul:sistem ("ping " . $ _GET ["gazdă"]) -
`Acest lucru este extrem de periculos, deoarece prin furnizarea unui parametru "gazdă" cu o bară verticală sau cu punct și virgulă, le-ați permite utilizatorului să execute orice comandă din sistemul dvs. (de exemplu, oferind gazdei "
127.0.0.1 | wget https://wikihow.com/
").Soluția este aceea de a evita utilizarea funcțiilor sistemului atunci când este posibil. Invocă programul în alt mod. Comanda
pcntl_exec
Este o idee mai bună în PHP. Dacă trebuie să utilizați sistem
, Îndepărtează cu atenție toate datele furnizate de utilizator înainte de al trece în coajă (un exemplu pentru codul de "ping" ar verifica fiecare caracter pentru a vă asigura că este un număr, o literă sau o perioadă, și aruncați orice alt caracter care nu este unul dintre acestea).eval
în PHP cu foarte multă grijă. Dacă șirul include o variabilă furnizată de utilizator, atunci acesta ar permite utilizatorului să execute codul arbitrar. De fapt, aproape Nu există niciodată un motiv valid pentru a face acest lucru. Dacă îl utilizați, Codul dvs. este probabil greșit și trebuie să îl reformulați.1. Utilizatorul cere să efectueze anumite acțiuni.
2. Verificați dacă utilizatorul are permisiunea de a efectua această acțiune și a afișa o pagină care spune "A fost refuzată permisiunea" în cazul în care nu aveți.
3. Arătați o pagină care spune "Sigur vrei să faci asta?" exprimată în câmpuri ascunse ale formularului.
4. Această pagină este apoi trimisă unui cod care execută operația.
Trucul este că, dacă ați verificat permisiunea de a efectua acele operații la pasul 2, dar nu în codul la care ați trimis pagina la pasul 4, acest lucru ar conta ca utilizatorul să nu poată schimba formularul în care i-ați arătat pasul 3 (în care încrederea, în mare măsură, este deplasată greșit) sau chiar mergând direct la pasul 4.
Pentru a fi mai precaut, ar fi o idee bună de a stoca, de asemenea, tipul de algoritm folosit, în cazul în care trebuie să migrați la un algoritm de hashing diferit în cazul în care sunt detectate deficiențe grave în algoritmul curent. Acest lucru sa întâmplat cu MD5 și SHA-1 și s-ar putea întâmpla și cu cei mai fiabili algoritmi de hash de astăzi.
https://tu-fabuloso-sitio.ejemplo.com/config.ini
pentru a afla informațiile de conectare la baza de date (dar nu se poate opri un atacator care și-a găsit un fișier de incluziune vulnerabilitate, cum ar fi menționat în pasul 3 sau codul de exploatare a cochilie de executie menționat în pasul 4).poartă
pe paginile pe care nu doriți să le indexați (de exemplu, paginile administrative din partea serverului). De exemplu:sfaturi
- Deși nu există substitute care să vă permită să înțelegeți amenințările de securitate pentru dvs., faptul de a utiliza cadre (cum ar fi Ruby pe șine) și platforme de hosting (de exemplu, Heroku) este o alternativă bună, care va ajuta să vă îmbunătățiți și să înțelegeți practicile de dezvoltare în condiții de siguranță, deoarece acestea vin cu instrumente integrate și metodologii de atenuare a vulnerabilităților cea mai comună securitate.
avertismente
- Nu vă bazați pe cereri AJAX. Amintiți-vă că cineva care știe cum să folosească Wireshark (pentru a afla ce parametri pentru a utiliza într-o cerere HTTP) și să știe cum să folosească ondularea sau wget, dar ar putea falsifica foarte ușor.
- Nu presupuneți niciodată că aplicația dvs. este 100% sigură. Sunt noi exploatează că atacatorii ar putea folosi în mod necorespunzător. Asigurați-vă că rămâneți la curent cu noul "bune practici" pentru a putea garanta securitatea aplicațiilor dvs. până la limita posibilităților.
- Cum să accesați site-urile securizate
- Cum se accesează directorul activ în Windows Server 2008
- Cum să actualizați aplicațiile pe Android
- Cum se blochează spyware-ul
- Modificarea numărului de cod de verificare a securității iCloud pe un iPhone
- Cum se închide aplicațiile Android
- Cum se configurează accesul la programe în Windows 8
- Cum să devii un hacker adolescent
- Cum să dezactivați procesele care fac computerul să funcționeze lent
- Cum se dezinstalează Advanced Systemcare 7
- Cum se detectează virușii în aplicațiile Android
- Cum să vă dublezi viteza de Internet
- Cum să eliminați aplicațiile
- Cum se elimină fbDownloader
- Cum se stabilește un nivel de securitate de către utilizatori în Microsoft Access
- Cum să împiedicați hackerii să invadeze rețelele
- Cum se face Windows 7 să pornească mai repede
- Cum să minimalizați întârzierea atunci când jucați online
- Cum de a optimiza un calculator lent
- Cum să actualizați aplicațiile pe Kindle Fire
- Cum de a începe o afacere de marketing de afaceri