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.

pași

Pbs2_343.jpg" class ="imagine lightbox">
Imaginea intitulată Pbs2_343.jpg
1
Evitați injecțiile de cod SQL. Injecțiile codului SQL eventual acestea sunt unul dintre principalele motive pentru care programele web de astăzi sunt compromise. Următorul exemplu vine de la Wikipedia. Gândiți-vă la următoarea linie de pseudocod:

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ă.
  • 2
    Nu deschideți niciun nume de fișier pe baza unui parametru pe care trebuie să îl furnizeze utilizatorul. De exemplu, dacă ar trebui să afișați un fișier unui utilizator, ar fi tentant să utilizați un URL de tip 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.
  • 3
    Dezinfectează toate datele pe care le scrieți pe pagină. Codul dvs. ar putea accepta un parametru numit "persoană" (de exemplu, 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).

  • 4
    Nu treceți niciodată o variabilă furnizată de un utilizator unei cochilii. De exemplu, este posibil să fi scris un cod pentru a trimite un ping la un anumit server. Acest lucru ar necesita un parametru numit gazdă (de exemplu, 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).
  • 5
    Utilizați funcții cum ar fi 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.
  • 6
    Verificați de unde provine trimiterea în toate cererile HTTP POST care au efecte secundare. Asigurați-vă că site-ul care face referință este site-ul dvs., în caz contrar, ar putea fi făcut de un utilizator care a făcut clic pe un buton al unui formular care aparține oricărui Un alt site web (poate că este convenabil să vă asigurați că site-ul de unde provine referința nu este necompletat sau poate nu.) Site-ul din care provine referința ar putea fi gol dacă pagina web controlată de către atacator folosește HTTP securizat și al tău nu). Un alt truc legat de utilizarea formularelor este de a genera un cod unic și de a le stoca într-o variabilă de sesiune și într-un câmp ascuns în formă. Când se trimite formularul, pur și simplu verificați dacă valoarea câmpului ascuns se potrivește cu valoarea stocată în variabila de sesiune.
  • 7


    Nu permiteți niciodată unei solicitări HTTP GET să aibă un efect secundar. De exemplu, nu scrieți într-o bază de date utilizând parametrii furnizați într-o solicitare GET. Amintiți-vă că o solicitare GET ar putea fi un utilizator al site-ului dvs. pe care atacatorul la păcălit să facă clic pe un link.
  • 8
    Verificați datele de identificare din fiecare pas Iată un exemplu:

    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.
  • 9
    Nu stocați parolele ca text simplu. Aceasta este o măsură de atenuare în cazul în care site-ul dvs. este compromis. Deoarece mulți utilizatori reutilizează parolele, acest lucru ar putea însemna că toate celelalte conturi online vor fi, de asemenea, compromise. Contramăsura standard pentru acest lucru este de a stoca a - hash criptografic (de exemplu, folosind algoritmul SHA-2) format de suma a câtorva octeți de date aleatoare plus parola. Acest lucru ar permite verificarea dacă o parolă furnizată de utilizator este corectă fără a fi nevoie să stocați parola în sine.

    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.
  • 10
    Când intenționați să utilizați o bază de date, nu stocați informațiile de conectare direct în directorul rădăcină al aplicației. În schimb, le stoca într-un alt director, ca un prim pas, restricționează accesul la directorul utilizând setările de pe serverul web sau .htaccess- ca un al doilea pas, fișierul stocat în afara rădăcinii documentului. Apoi includeți fișierul (aplicația dvs. nu va fi afectată de permisiunile serverului web). Acest lucru va împiedica intrarea persoanelor 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).
  • Pbs_robots.txt_223.jpg" class ="imagine lightbox">
    Imaginea intitulată Pbs_robots.txt_223.jpg
    11
    Nu depindeți de robots.txt pentru a ascunde zonele sensibile ale site-ului dvs. Uneori există un motiv bun pentru a face acest lucru (de exemplu, dacă întregul dvs. site este sensibil și nu doriți să îl indexați prin intermediul motoarelor de căutare). Dar amintiți-vă unul dintre primele lucruri pe care le va face un îndoit atacator de pe site-ul dvs. va compromite analiza robots.txt pentru a vedea ce este ascuns. O alternativă mai bună este de a utiliza o etichetă poartă pe paginile pe care nu doriți să le indexați (de exemplu, paginile administrative din partea serverului). De exemplu:

  • 12
    Aveți o conștiință adecvată. Acest articol nu este destinat să fie o listă completă a fiecărei probleme de securitate care ar putea afecta site-ul dvs. Cu toate acestea, oferă câteva exemple din lumea reală cu privire la modul de aplicare a unor principii importante:
  • Niciodată nu încredere în informațiile pe care le poate oferi utilizatorului. De fapt, se presupune că utilizatorul este un atacator și să aibă grijă de datele furnizate de către utilizator pe baza acestei ipoteze.
  • Când mergeți să dezinfectați datele, permite doar ceea ce este în siguranță și blochează totul. Acest lucru vă va apăra de datele introduse cu intenții proaste nu ați luat în considerare când ați scris codul. Ca un exemplu, imaginați-vă dezvolta software-ul pe și pentru un sistem bazat pe Unix și dvs. defendieras de vulnerabilități care există în ceea ce privește includerea fișierelor, ștergerea barele care apar în numele fișierului. Acest lucru ar funcționa bine până când cineva va implementat codul într-o casetă Windows (ceea ce vă va permite să includeți un backslash ca separator de cale).
  • Să presupunem că veți face greșeli și veți aplica în profunzime principiul apărării pentru a atenua aceste efecte (ceea ce spune mai sus despre asta) "permiteți doar ceea ce este sigur" este un caz particular al acestui fapt).
  • Să presupunem că un potențial atacator știe absolut tot ceea ce faci. Ceea ce înseamnă că trebuie scrie codul ca și în cazul în care un potențial atacator a fost așezat lângă tine citind ceea ce scrie. Acest lucru îi va încuraja să folosească bunele practici la fiecare pas din drum și de a atenua effects`d avea de suferit dacă cererea dumneavoastră este compromisă. Nu scrie cod rău gândindu-mă că nimeni nu va vedea sau afla cât de rău este. Cu toate că securitatea prin obscuritate servi ceva, nu trebuie să presupuiți că secretele vor rămâne ascunse. Gândiți-vă ca un atacator.
  • 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.
    Distribuiți pe rețelele sociale:

    înrudit
    Cum se accesează directorul activ în Windows Server 2008Cum se accesează directorul activ în Windows Server 2008
    Cum să actualizați aplicațiile pe AndroidCum să actualizați aplicațiile pe Android
    Cum se blochează spyware-ulCum se blochează spyware-ul
    Modificarea numărului de cod de verificare a securității iCloud pe un iPhoneModificarea numărului de cod de verificare a securității iCloud pe un iPhone
    Cum se închide aplicațiile AndroidCum se închide aplicațiile Android
    Cum se configurează accesul la programe în Windows 8Cum se configurează accesul la programe în Windows 8
    Cum să devii un hacker adolescentCum să devii un hacker adolescent
    Cum să dezactivați procesele care fac computerul să funcționeze lentCum să dezactivați procesele care fac computerul să funcționeze lent
    Cum se dezinstalează Advanced Systemcare 7Cum se dezinstalează Advanced Systemcare 7
    Cum se detectează virușii în aplicațiile AndroidCum se detectează virușii în aplicațiile Android
    » » Cum să dezvoltați programe securizate pentru web

    © 2011—2020 ertare.com