Scrie pe autentificarea utilizatorului PHP, Web developer blog-

În primul rând trebuie să impună pagina de start și puneți-l în rădăcina site-ului în dosarul șablon. Pentru această lecție, este suficient ca acest fișier are o conectare formular de intrare și parola, precum și butonul „Conectare“. Următoarele este codul acestei forme:







Fișierul va fi numit index.html.

Odată ce forma este gata, vom crea cel mai important dosar al viitorului site-ului - controlerul principal, și anume, fișierul care se află la rădăcina site-ului - .. index.php. Că el va începe la intrarea în site-ul. La momentul scrierii acestui articol pe codul nostru proiect al acestui fișier are 92 de linii, avem de asemenea nevoie acum doar aproximativ 25 de linii. Aici este codul:

Acum, o privire mai atentă la modul în care funcționează.

În primele trei linii, vom conecta doar fișiere cu funcții care vor fi folosite mai târziu, în cod. Despre ei un pic mai târziu. Apoi, verificați, acțiunea get-parametru = daca transmis. Când a fost transferat, atunci utilizatorul a făcut clic pe link-ul de la site-ul de eliberare. În acest fel, codul acestei referință. Adăugați-l într-un fișier cu un formular pentru a introduce codul.

în sine funcție, la fel ca toți ceilalți, va lua în considerare mai târziu. În primul rând, logica ...

Acum vom înțelege toate funcțiile numite în acest cod. În primul rând, voi descrie caracteristica site-ul de conectare:

Și crea două cookie: parola de conectare și cu o durată de viață - 50.000 secunde. Pe primul am scrie de conectare, iar al doilea - parola hash.

În această linie vom efectua o funcție care este responsabil pentru setarea timpului ultimei activități a utilizatorului. Aici este codul acestei funcții:

Totul. $ Array Variantele pot fi folosite pentru a introduce în browser-ul și căutarea. Cred că nu se va potrivi în mod necesar. Manual cu siguranță dur, dar atacator abil automatizează procesul.

3. Furtul de cookie-uri pot fi prevenite prin criptarea conexiunii (https), cel puțin cele mai importante pagini de pe site.
Pentru această abordare pentru a pune în aplicare astfel de pagini numai pe https. Pentru a identifica utilizatorul de a utiliza o altă linie pe aceste pagini, probabil, cu o lungime mai mare. Acesta este un timp necesar. Fura acest cookie de trafic trage cu urechea este imposibilă (foarte, foarte dificil ca - o altă poveste).

Prea multe „buts“. În locul tău ar fi bine să fiți atenți la linia:
mysql_query ( «SELECT * FROM utilizatori WHERE de conectare = ''»)

Există o vulnerabilitate foarte mare. Sau, mai degrabă - posibilitatea injecție MySQL. Utilizatorul poate înregistra în cererea malitios Cook. Aceasta este de fapt o vulnerabilitate. Ne pare rau, doar codul sooo a fost scris mult timp în urmă și de mult timp rescris în proiecte reale.







Îmi pare rău, din nou, nu a funcționat (dacă puteți elimina mesajul anterior). Încercați din nou, codul complet al primului mesaj:

Yuri, de ce ai confundat parola MD5 cu săpun, sare și așa mai departe. D. să-mi placă? Conform complexității aceasta nu conduce la un șir de caractere aleatoare.
În timp ce, cu toate acestea, ideea este de a menține constant în diferite rânduri cookie interesant.

Despre SQL-injectare - Da, ai dreptate. Dar, în acest caz, eu vorbesc despre schema de autentificare a utilizatorului. Cele mai multe mod invulnerabil - să fie stocate într-un cookie aleatoriu, este greu de ghicit linia. Toate manipulările de sare - doar de la o neînțelegere a esenței. Tu doar a lua, și devine clar :).

În cazul în care selecția efectuată pe PC-ul, acesta va fi în mod natural mai rapid în mai multe ori, dar din cauza tocare multiple cu un amestec de diferiți parametri, inclusiv aleatoare, reduce la „nu“ o șansă. tabele Rainbow nu va ajuta, deoarece materialul pentru hash - hash, de asemenea, dar aceste tabele sunt construite pentru a curăța parole.

Dacă ne dăm seama de selecție, generează o secvență de hash-uri de toate combinațiile posibile de caractere și compararea hash rezultat la hash cookie-ului, și având în vedere că acest lucru este parola într-un cookie trunchiată doar o singură dată și fără să observe, atunci ...
16 ^ 32 - numărul de variante (minus o cantitate mică de coliziune). Nu vor fi luate în considerare, și abia ieși)

ghicirea parolei despre. Aceasta este o altă întrebare. Pur și simplu nu am atins până acum. Vorbeam despre modul matematic simplu și sigur pentru a identifica utilizatorul.
ghicirea parolei despre. Am dat seama că este. După 3 eșecuri de ieșire CAPTCHA. Și puteți fi, de asemenea, aplicat la intervalul de întârziere.

Mulțumesc mult. De ce aveți nevoie. Subscriu la actualizări :)

Cu toate acestea, în locul tău nu aș lăuda și sună ceva idiot, pentru că eroarea reală în codul nu ați observat, și tocmai în linie, pe care ați citat în post 🙂 În opinia mea, idioție - să acorde o atenție asterisc, care, cu toate acestea, în proiectul de testare are dreptul de a exista și eroarea nu este, prin definiție, dar nu să se uite la vulnerabilitatea reală ...

În stilul meu de Popov în față ...
greșeli teribile Formatirovanie- ... +
În primul rând este există o variabilă generală este verificată prin isset (),
și mențineți și verificați gol () și nu == înainte de a verifica valabilitatea lor ar fi frumos prin trim ()
Acest lucru este în plus față de încălcări grave de securitate

Anatoly nu goduet

- Prea multe interogări care nu sunt necesare în baza de date
- Mica inspecție și prelucrare a rândurilor
- Nope încercați / captura - lasa excepții mâner frumos!
- În general, nu au suficient cross-platform. Regekspy, desigur, exclud caractere rămase, dar aceeași includere de verificare kavychem magică nu trebuie să
- conectare și parola într-un modul cookie, în general, nu exista magazine. Păstrați-l hash aleatoare și aydishnik în timpul zilei, de exemplu.
- În codul citat conține erori, ceea ce face necesară pentru a face față cu corecturile sale

Singurul lucru pe care mi-a placut - este algoritmul de operare într-adevăr intuitiv + deși ceea ce sortare script care prin foldere / subfoldere.

$ Rez = mysql_query ( "SELECT * FROM utilizatori WHERE autentificare = $ autentificare"); // rânduri de interogare din baza de date cu datele de conectare, utilizatorul a intrat

Lol. În cazul în care cererile de screening-ul? Unde place?