HTTP Succinct Starea și securitatea HTTP

În acest ultim capitol vom examina aspectele de securitate ale HTTP, inclusiv modul de identificare a utilizatorilor, cum funcționează autentificarea HTTP și de ce unele scenarii necesită HTTPS (HTTP securizat). Pe parcurs, vom învăța, de asemenea, un pic despre cum să gestionăm statul cu HTTP.


Webul fără stat (încă statal)

HTTP este un protocol fără stat, ceea ce înseamnă că fiecare tranzacție de solicitare-răspuns este independentă de orice tranzacție anterioară sau viitoare. Nu există nimic în protocolul HTTP care să impună unui server să păstreze informații despre o solicitare HTTP. Tot ce trebuie să faceți serverul este să generați un răspuns pentru fiecare solicitare. Fiecare solicitare va purta toate informațiile pe care un server trebuie să le creeze.

Natura apatridă a HTTP este unul din factorii determinanți ai succesului web-ului. Serviciile stratificate pe care le-am analizat în capitolul anterior, servicii cum ar fi cache-ul, sunt toate posibile (sau cel puțin ușor), deoarece fiecare mesaj conține toate informațiile necesare procesării mesajului. Proxy serverele și serverele web pot inspecta, transforma și cache mesaje. Fără caching-ul, web-ul nu putea să scadă pentru a răspunde cerințelor internetului.

Cu toate acestea, majoritatea aplicațiilor web și a serviciilor pe care le construim pe HTTP sunt extrem de clare.

O aplicație bancară va dori ca un utilizator să se conecteze înainte de a permite utilizatorului să-și vizualizeze resursele legate de cont. Pe măsură ce fiecare cerere de apatridie ajunge pentru o resursă privată, aplicația dorește să se asigure că utilizatorul a fost deja autentificat. Un alt exemplu este când utilizatorul dorește să deschidă un cont și să completeze formularele într-un expert de trei pagini. Aplicația va dori să se asigure că prima pagină a expertului este completă înainte de a permite utilizatorului să trimită a doua pagină.

Din fericire, există multe opțiuni pentru stocarea stării într-o aplicație web. O abordare este aceea de a încorpora statul în resursele care sunt transferate clientului, astfel încât toată starea cerută de aplicație să revină la următoarea solicitare. Această abordare necesită în mod obișnuit câteva câmpuri de intrare ascunse și funcționează cel mai bine pentru starea de scurtă durată (cum ar fi starea necesară pentru a trece printr-un expert în trei pagini). Starea de încorporare în resursă păstrează întreaga stare în interiorul mesajelor HTTP, deci este o abordare extrem de scalabilă, dar poate complica programarea aplicațiilor.

O altă opțiune este de a stoca starea pe server (sau în spatele serverului). Această opțiune este necesară pentru o stare care trebuie să fie îndelungată. Să presupunem că utilizatorul trimite un formular pentru a-și schimba adresa de e-mail. Adresa de e-mail trebuie să fie întotdeauna asociată cu utilizatorul, astfel încât aplicația să poată lua noua adresă, să confirme adresa și să stocheze adresa într-o bază de date, un fișier sau să apeleze un serviciu web pentru a permite altcuiva să aibă grijă de salvarea adresei.

Pentru spațiul de stocare de pe server, multe cadre de dezvoltare web precum ASP.NET oferă și acces la o "sesiune de utilizatori". Sesiunea poate trăi în memorie sau într-o bază de date, dar un dezvoltator poate stoca informații în sesiune și poate prelua informațiile pentru fiecare solicitare ulterioară. Datele stocate într-o sesiune sunt destinate unui utilizator individual (de fapt, în sesiunea de navigare a utilizatorului) și nu sunt distribuite între mai mulți utilizatori.

Sesiunea de stocare are un model ușor de programare și este bună doar pentru starea de scurtă durată, deoarece în cele din urmă serverul trebuie să presupună că utilizatorul a părăsit site-ul sau a închis browser-ul, iar serverul va renunța la sesiune. Sesiunea de stocare, dacă este stocată în memorie, poate avea un impact negativ asupra scalabilității, deoarece solicitările ulterioare trebuie să se adreseze aceluiași server unde se află datele de sesiune. Unele balansoare de sarcină ajută la susținerea acestui scenariu prin implementarea "sesiunilor lipicioase".

S-ar putea să te întrebi cum un server poate urmări un utilizator să implementeze starea sesiunii. Dacă două cereri ajung la un server, cum știe serverul dacă acestea sunt două solicitări de la același utilizator sau dacă există doi utilizatori diferiți, fiecare făcând o singură cerere?

În primele zile ale web-ului, software-ul de server ar putea avea utilizatori diferențiate prin vizionarea adresei IP a unui mesaj de solicitare. Aceste zile, totuși, mulți utilizatori trăiesc în spatele dispozitivelor utilizând Traducerea adreselor de rețea, iar din acest motiv și din alte motive puteți avea mai mulți utilizatori eficient pe aceeași adresă IP. O adresă IP nu este o tehnică sigură pentru diferențierea utilizatorilor.

Din fericire, există tehnici mai fiabile.


Identificarea și cookie-urile

Site-urile web care doresc să urmărească utilizatorii se vor adresa de multe ori fursecuri. Cookie-urile sunt definite de RFC6265 (http://tools.ietf.org/html/rfc6265), iar acest RFC este denumit în mod corespunzător "Mecanismul de gestionare a stării HTTP". Când un utilizator vizitează mai întâi un site web, site-ul poate oferi browserului utilizatorului un cookie utilizând un antet HTTP. Browserul știe apoi să trimită cookie-ul în anteturile fiecărei solicitări suplimentare pe care o trimite pe site. Presupunând că site-ul web a plasat un fel de identificator unic în cookie, atunci site-ul poate urmări acum un utilizator ca el sau ea face cereri și să diferențieze un utilizator de altul.

Înainte de a intra în mai multe detalii despre cum arată cookie-urile și cum se comportă, merită să remarcați câteva limitări. În primul rând, modulele cookie pot identifica utilizatorii în sensul că cookie-ul este diferit de cookie-ul meu, dar modulele cookie nu autentifică utilizatorii. Un utilizator autentificat și-a dovedit identitatea de obicei prin furnizarea de acreditări precum un nume de utilizator și o parolă. Cookie-urile despre care vorbim până acum ne dau un identificator unic pentru a diferenția un utilizator de altul și pentru a urmări un utilizator pe măsură ce se solicită site-ul.

În al doilea rând, deoarece cookie-urile pot urmări ceea ce face un utilizator, ele ridică probleme de confidențialitate în anumite cercuri. Unii utilizatori vor dezactiva cookie-urile în browserele lor, adică browserul va respinge toate cookie-urile unui server care trimite un răspuns. Cookie-urile dezactivate prezintă o problemă pentru site-urile care au nevoie să urmărească utilizatorii, desigur, iar alternativele sunt dezordonate. De exemplu, o abordare a sesiunilor "cookieless" este plasarea identificatorului de utilizator în adresa URL. Modelele cookieless necesită ca fiecare adresă URL pe care un site le dă unui utilizator să conțină identificatorul adecvat, iar adresele URL devin mult mai mari (de aceea această tehnică este denumită adesea tehnica "adaos de grăsime"),.


Setarea modulelor cookie

Atunci când un site dorește să dea unui utilizator un cookie, acesta folosește a Set-Cookie antet într-un răspuns HTTP.

 HTTP / 1.1 200 OK Tip de conținut: text / html; charset = utf-8 Set-Cookie: fname = Scott $ lname = Allen; domeniu = .mywebsite.com; path = / ... 

Există trei zone de informații în cookie-ul afișat în acest eșantion. Cele trei zone sunt delimitate prin punct și virgulă (;). Mai întâi, există una sau mai multe perechi de nume-valoare. Aceste perechi de nume-valoare sunt delimitate de un semn de dolar ($) și arată foarte asemănătoare cu modul în care parametrii interogării sunt formatați într-o adresă URL. În cookie-ul de exemplu, serverul a dorit să stocheze numele și prenumele utilizatorului în cookie. A doua și a treia zonă sunt domeniul și calea, respectiv. Vom reveni mai târziu pentru a vorbi despre domeniu și cale.

Un site web poate pune orice informație dorită într-un cookie, deși există o limită de dimensiune de 4 KB. Cu toate acestea, multe site-uri pun doar într-un identificator unic pentru un utilizator, poate un GUID. Un server nu poate avea încredere în nimic stocat pe client decât dacă este securizat criptografic. Da, este posibil să stocați date criptate într-un modul cookie, dar de obicei este mai ușor să stocați un cod.

 HTTP / 1.1 200 Set OK-Cookie: GUID = 00a48b7f6a4946a8adf593373e53347c; domeniu = .msn.com; path = /

Presupunând că browserul este configurat să accepte modulele cookie, browserul va trimite cookie-ul la server în fiecare solicitare HTTP ulterioară.

 GET ... HTTP / 1.1 Cookie: GUID = 00a48b7f6a4946a8adf593373e53347c; ... 

Când ID-ul ajunge, software-ul de servere poate căuta rapid orice date asociate utilizatorilor dintr-o structură de date în memorie, o bază de date sau o memorie cache distribuită. Puteți configura majoritatea cadrelor de aplicații web pentru a manipula modulele cookie și pentru a căuta automat starea sesiunilor. De exemplu, în ASP.NET, Sesiune Obiectul expune un API ușor pentru citirea și scrierea unei stări de sesiune a utilizatorului. În calitate de dezvoltatori, nu trebuie niciodată să ne facem griji cu privire la trimiterea unui mesaj Set-Cookie antet sau citirea cookie-urilor primite pentru a găsi starea sesiunilor asociate. În spatele scenei, ASP.NET va gestiona cookie-ul sesiunii.

 Sesiune ["firstName"] = "Scott"; // scrie starea sesiunii ... var lastName = Sesiunea ["lastName"]; // citirea starea sesiunii

Din nou, merită subliniat faptul că Nume și numele de familie datele stocate în obiectul sesiunii sunt nu intră în cookie. Cookie-ul conține doar un identificator de sesiune. Valorile asociate identificatorului de sesiune sunt sigure pe server. În mod implicit, datele sesiunii intră într-o structură de date în memorie și rămân în viață timp de 20 de minute. Când un cookie de sesiune ajunge într-o cerere, ASP.NET va asocia datele corecte de sesiune cu Sesiune după găsirea datelor utilizatorului utilizând ID-ul stocat în cookie. Dacă nu există niciun cookie primit cu un ID de sesiune, ASP.NET va crea unul cu a Set-Cookie antet.

O preocupare de securitate în jurul identificatorilor de sesiune este modul în care pot deschide posibilitatea ca cineva să-i deturneze sesiunea unui alt utilizator. De exemplu, dacă folosesc un instrument ca Fiddler pentru a urmări traficul HTTP, s-ar putea să văd a Set-Cookie antetul vine de la un server cu Sessionid = 12 interior. S-ar putea să cred că un alt utilizator are deja o Sesiune ID din 11 și să creați o solicitare HTTP cu acel cod doar pentru a vedea dacă pot fura sau vizualiza codul HTML destinat altui utilizator. Pentru a combate această problemă, majoritatea aplicațiilor web vor folosi numere aleatorii mari ca identificatori (ASP.NET utilizează 120 de biți de aleatorie). Un identificator al sesiunii ASP.NET arată după cum urmează, ceea ce face mai greu să ghiciți cum va arăta ID-ul sesiunii altcuiva.

 Set-cookie: ASP.NET_SessionId = en5yl2yopwkdamv2ur5c3z45; path = /; HttpOnly

HttpOnly cookie-uri

O altă preocupare de securitate în jurul cookie-urilor este cât de vulnerabile sunt acestea la un atac scripting (XSS). Într-un atac XSS, un utilizator rău intenționează să injecteze codul JavaScript rău intenționat în site-ul altcuiva. În cazul în care celălalt site trimite scriptul malware către utilizatorii săi, scriptul malitios poate modifica sau inspecta și fura informațiile cookie (care pot duce la deturnarea sesiunii sau, mai rău).

Pentru a combate această vulnerabilitate, Microsoft a introdus HttpOnly steag (văzut în ultimul Set-Cookie exemplu). HttpOnly steagul spune agentului utilizator să nu permită codului de script să acceseze cookie-ul. Cookie-ul există pentru "numai HTTP" - adică. pentru a ieși în antetul fiecărui mesaj de solicitare HTTP. Browserele care implementează HttpOnly nu va permite JavaScript să citească sau să scrie cookie-ul pe client.


Tipuri de cookie-uri

Cookie-urile pe care le-am văzut până acum sunt sesiuni cookie. Cookie-urile pentru sesiuni există pentru o singură sesiune de utilizator și sunt distruse atunci când utilizatorul închide browserul. Cookie-uri persistente poate supraviețui unei singure sesiuni de navigare și un agent de utilizator va stoca cookie-urile pe disc. Puteți închide un computer și vă puteți întoarce o săptămână mai târziu, mergeți la site-ul dvs. preferat și un cookie persistent va mai fi acolo pentru prima solicitare.

Singura diferență dintre cele două este că un cookie persistent are nevoie de unul expiră valoare.

 Set-Cookie: nume = valoare; expiră = luni, 09-iulie-2012 21:12:00 GMT

Un modul cookie de sesiune poate adăuga în mod explicit a decarta atribui unui cookie, dar fără un cookie expiră valoare, agentul utilizator ar trebui să elimine cookie-ul în orice caz.


Căi și domenii de cookie

Până acum, am spus că odată ce un cookie este setat de un site web, cookie-ul va călători pe site-ul web cu fiecare solicitare ulterioară (presupunând că cookie-ul nu a expirat). Cu toate acestea, nu toate cookie-urile călătoresc pe fiecare site web. Singurele module cookie pe care un agent utilizator trebuie să le trimită unui site sunt cookie-urile furnizate agentului utilizator de către același site. Nu ar avea sens ca cookie-urile de la amazon.com să fie într-o cerere HTTP către google.com. Acest tip de comportament ar putea deschide doar probleme suplimentare legate de securitate și confidențialitate. Dacă setați un cookie într-un răspuns la o solicitare la www.server.com, cookie-ul rezultat va călători numai în cererile la www.server.com.

O aplicație web poate modifica, de asemenea, domeniul de aplicare al unui modul cookie pentru a restricționa cookie-ul la o anumită gazdă sau domeniu și chiar la o anumită cale de resurse. Aplicația web controlează domeniul de aplicare utilizând domeniu și cale atribute.

 HTTP / 1.1 200 OK Set-Cookie: nume = valoare; domeniu = .server.com; path = / chestii ... 

domeniu atributul permite unui modul cookie să cuprindă subdomeniile. Cu alte cuvinte, dacă setați un cookie de la www.server.com, agentul utilizator va livra cookie-ul numai la www.server.com. Domeniul din exemplul precedent permite, de asemenea, cookie-ului să călătorească către orice adresă URL din domeniul server.com, inclusiv images.server.com, help.server.com și doar server.com. Nu puteți folosi atributul de domeniu pentru a include domenii, așadar setarea domeniului la .microsoft.com într-un răspuns la .server.com nu este legal și agentul de utilizator ar trebui să respingă cookie-ul.

cale atributul poate restricționa un modul cookie într-o anumită cale de resurse. În exemplul precedent, modulul cookie va călători numai pe un site server.com, la care se îndreaptă adresa URL a solicitării /chestie, sau o locație dedesubt /chestie, ca / chestii / imagini. Setările pentru căi pot ajuta la organizarea cookie-urilor atunci când mai multe echipe construiesc aplicații web pe diferite căi.


Cookie Dezavantaje

Cookie-urile permit site-urilor web să stocheze informații în client și informațiile vor călători înapoi la site-uri în cererile ulterioare. Beneficiile dezvoltării web sunt extraordinare, deoarece cookie-urile ne permit să urmărim ce solicitare aparține acelui utilizator. Dar, cookie-urile au unele probleme pe care le-am atins deja.

Cookie-urile au fost vulnerabile la atacurile XSS așa cum am menționat mai devreme și, de asemenea, primim publicitate proastă când site-urile (în special site-urile de publicitate) utilizează terțe părți cookie pentru a urmări utilizatorii de pe Internet. Mărimile cookie terță parte sunt cookie-urile care se stabilesc dintr-un domeniu diferit de domeniul din bara de adrese a browserului. Terță parte au această posibilitate, deoarece multe site-uri web, atunci când trimite o resursă de pagină înapoi la client, vor include linkuri către scripturi sau imagini de la alte adrese URL. Solicitările care merg către celelalte adrese URL permit celorlalte site-uri să configureze modulele cookie.

De exemplu, pagina de pornire de pe server.com poate include a > etichetă cu o sursă setată la bigadvertising.com. Acest lucru permite bigadvertising.com să furnizeze un cookie în timp ce utilizatorul vizionează conținut de pe server.com. Cookie-ul poate merge doar înapoi la bigadvertising.com, dar dacă suficiente site-uri utilizează bigadvertising.com, atunci Big Advertising poate începe să prezinte profilul utilizatorilor individuali și site-urile pe care le vizitează. Majoritatea browserelor web vă vor permite să dezactivați cookie-urile terță parte (dar acestea sunt activate în mod implicit).

Două dintre cele mai mari dezavantaje ale cookie-urilor, totuși, sunt modul în care acestea interferează cu caching-ul și modul în care transmit date cu fiecare cerere. Orice răspuns cu a Set-Cookie antetul nu ar trebui să fie stocat în cache, cel puțin nu anteturile, deoarece acestea pot interfera cu identificarea utilizatorilor și pot crea probleme de securitate. De asemenea, rețineți că orice fișiere stocate într-un modul cookie este vizibil pe măsură ce se deplasează în rețea (și în cazul unui cookie persistent, deoarece se află în sistemul de fișiere). Din moment ce știm că există o mulțime de dispozitive care pot asculta și interpreta traficul HTTP, un cookie nu trebuie să stocheze niciodată informații sensibile. Chiar și identificatorii de sesiuni sunt riscanți, deoarece dacă cineva poate intercepta ID-ul altui utilizator, el sau ea poate fura datele de sesiune de la server.

Chiar și cu toate aceste dezavantaje, cookie-urile nu merg departe. Uneori avem nevoie de stat pentru a călători prin HTTP, iar cookie-urile oferă această capacitate într-o manieră ușoară, mai ales transparentă. O altă capacitate de care avem nevoie uneori este abilitatea de a autentifica utilizatorul. În continuare vom discuta despre caracteristicile de autentificare.


Autentificare

Procesul de autentificare obligă un utilizator să-și dovedească identitatea introducând un nume de utilizator și o parolă sau un e-mail și un cod PIN sau alt tip de acreditări.

La nivel de rețea, autentificarea urmează de obicei un format de provocare / răspuns. Clientul va solicita o resursă securizată, iar serverul va provoca clientul să se autentifice. Apoi, clientul trebuie să trimită o altă solicitare și să includă acreditări de autentificare pentru validarea serverului. Dacă acreditările sunt bune, cererea va reuși.

Extensibilitatea HTTP permite HTTP să suporte diferite protocoale de autentificare. În această secțiune vom examina pe scurt topul 5: bază, digest, Windows, formulare și OpenID. Din cele cinci, doar două sunt "oficiale" în specificația HTTP - protocoalele de bază și digestul de autentificare. Vom privi mai întâi la cei doi.


Autentificare de bază

Cu autentificare de bază, clientul va solicita mai întâi o resursă cu un mesaj HTTP normal.

 GET http: // localhost / html5 / HTTP / 1.1 Gazdă: localhost

Serverele Web vă permit să configurați accesul la anumite fișiere și directoare. Puteți permite accesul tuturor utilizatorilor anonimi sau puteți restricționa accesul, astfel încât numai anumiți utilizatori sau grupuri să poată accesa un fișier sau un director. Pentru solicitarea anterioară, să presupunem că serverul este configurat să permită anumitor utilizatori să vizualizeze / Html5 / resursă. În acest caz, serverul va emite o provocare de autentificare.

 HTTP / 1.1 401 Authenticate neautorizat WWW: Realmul de bază = "localhost"

401 codul de stare indică clientului că solicitarea este neautorizată. WWW-autentificaþi antetul îi spune clientului să colecteze acreditările utilizatorului și să încerce din nou. tărâm atributul dă agentului utilizator un șir pe care îl poate utiliza ca descriere a zonei protejate. Ceea ce se întâmplă în continuare depinde de agentul utilizator, dar majoritatea browserelor pot afișa un interfață utilizator pentru ca utilizatorul să introducă acreditările.

Autentificare dialog

Cu acreditările în mână, browserul poate trimite o altă solicitare serverului. Această solicitare va include o Autorizare antet.

 GET http: // localhost / html5 / HTTP / 1.1 Autorizație: Basic bm86aXdvdWxkbnRkb3RoYXQh

Valoarea antetului de autorizare este numele de utilizator și parola clientului într-o codare de bază 64. Autentificarea de bază este nesigură în mod implicit, deoarece oricine are un decodor de bază 64 care poate vedea mesajul poate fura parola unui utilizator. Din acest motiv, autentificarea de bază este rar utilizată fără a utiliza HTTP securizat, la care ne vom uita mai târziu.

Depinde de server să decodeze antetul de autorizare și să verifice numele de utilizator și parola cu sistemul de operare sau cu orice sistem de gestionare a creditelor de pe server. Dacă acreditările se potrivesc, serverul poate face un răspuns normal. Dacă acreditările nu se potrivesc, serverul ar trebui să răspundă cu a 401 starea din nou.


Digest Autentificare

Verificarea autentificării este o îmbunătățire față de autentificarea de bază deoarece nu transmite parolele utilizatorilor utilizând codarea de bază 64 (care transmite în mod esențial parola în text simplu). În schimb, clientul trebuie să trimită a digera din parola. Clientul calculează digestul utilizând algoritmul de hash MD5 cu un nonce furnizat de server în timpul provocării de autentificare (un nonce este un număr criptografic folosit pentru a preveni atacurile replay).

Răspunsul provocării digest este similar cu răspunsul la provocarea de autentificare de bază, dar cu valori suplimentare provenite de la server în WWW-autentificaþi antet pentru utilizarea în funcțiile criptografice.

 HTTP / 1.0 401 Authenticate neautorizat pe WWW: Digest realm = "localhost", qop = "auth, auth-int", nonce = "dcd98b7102dd2f0e8b11d0f600bfb0c093", opaque = "5ccc069c403ebaf9f0171e9517f40e41"

Digestul de autentificare este mai bun decât autentificarea de bază atunci când HTTP securizat nu este disponibil, dar este încă departe de a fi perfect. Digestul de autentificare este încă vulnerabil la atacurile de tip "om-in-the-middle", în care cineva detectează traficul de rețea.


Autentificare Windows

Autentificarea integrată Windows nu este un protocol de autentificare standard, dar este popular printre produsele și serverele Microsoft. Deși Windows Authentication este acceptat de multe browsere moderne (nu doar Internet Explorer), nu funcționează bine pe Internet sau unde se află serverele proxy. Veți găsi că este comun pe site-urile interne și intranet unde există un server Microsoft Active Directory.

Autentificarea Windows depinde de protocoalele de autentificare suportate de Windows, inclusiv NTLM și Kerberos. Pașii de provocare / răspuns de autentificare Windows sunt foarte asemănători cu ceea ce am văzut deja, însă serverul va specifica NTML sau A negocia în WWW-autentificaþi antet (A negocia este un protocol care permite clientului să selecteze Kerberos sau HTML).

 HTTP / 1.1 401 Authenticate neautorizat pe WWW: Negociați

Autentificarea Windows are avantajul de a fi sigură chiar fără a utiliza HTTP securizat și de a fi discret pentru utilizatorii Internet Explorer. IE va autentifica automat un utilizator atunci când este provocat de un server și va face acest lucru utilizând datele de identificare ale utilizatorului pe care le-a folosit pentru conectarea la sistemul de operare Windows.


Formularul de autentificare

Forma de autentificare este cea mai populară abordare a autentificării utilizatorilor pe Internet. Autentificarea bazată pe formulare nu este un protocol standard de autentificare și nu se utilizează WWW-autentificaþi sau Autorizare antetele. Cu toate acestea, multe cadre de aplicații web oferă un sprijin din partea casetei pentru autentificarea bazată pe formulare.

Cu ajutorul autentificării bazate pe formulare, o aplicație va răspunde la o solicitare pentru o resursă sigură de către un utilizator anonim prin redirecționarea utilizatorului către o pagină de conectare. Redirecționarea este o redirecționare temporară HTTP 302. În general, adresa URL pe care utilizatorul o solicită ar putea fi inclusă în șirul de interogare al locației de redirecționare, astfel încât, după ce utilizatorul a terminat autentificarea, aplicația poate redirecționa utilizatorul la resursa securizată pe care încerca să o atingă.

 HTTP / 1.1 302 S-a găsit locația: /Login.aspx?ReturnUrl=/Admin.aspx

Pagina de autentificare pentru autentificarea bazată pe formulare este un formular HTML cu intrări pentru ca utilizatorul să introducă acreditările. Când utilizatorul face clic pe trimiteți, valorile formularului vor fi POST la o destinație în care aplicația trebuie să ia acreditările și să le valideze pe baza unei înregistrări de baze de date sau a unui sistem de operare.

 
...

Rețineți că autentificarea pe bază de formulare va transmite acreditările unui utilizator în text simplu, ca de exemplu autentificarea de bază, autentificarea bazată pe formulare nu este sigură dacă nu utilizați HTTP securizat. Ca răspuns la POST mesajul cu acreditările (presupunând că acreditările sunt bune), aplicația va redirecționa utilizatorul înapoi la resursa securizată și, de asemenea, va seta un cookie indicând faptul că utilizatorul este acum autentificat.

 HTTP / 1.1 302 S-a găsit locația: /admin.aspx Set-Cookie: .ASPXAUTH = 9694BAB ... path = /; HttpOnly

Pentru ASP.NET, biletul de autentificare ( .ASPXAUTH valoarea cookie) este criptat și hashed pentru a preveni manipularea. Cu toate acestea, fără un HTTP securizat, modulul cookie este vulnerabil la interceptare, deci deturnarea sesiunii este încă o problemă potențială. Cu toate acestea, autentificarea formularelor rămâne populară, deoarece permite aplicațiilor controlul complet asupra experienței de autentificare și validării acreditărilor.


OpenID

În timp ce autentificarea bazată pe formulare oferă unei aplicații un control total asupra autentificării utilizatorului, multe aplicații nu doresc acest nivel de control. În mod specific, aplicațiile nu doresc să gestioneze și să verifice numele de utilizator și parolele (și utilizatorii nu vor să aibă un nume de utilizator și o parolă diferită pentru fiecare site web). OpenID este un standard deschis pentru autentificare descentralizată. Cu OpenID, un utilizator se înregistrează cu un furnizor de identitate OpenID, iar furnizorul de identitate este singurul site care trebuie să stocheze și să valideze acreditările utilizatorului. Există numeroși furnizori OpenID, inclusiv Google, Yahoo și Verisign.

Atunci când o aplicație trebuie să autentifice un utilizator, acesta funcționează cu utilizatorul și furnizorul de identitate al utilizatorului. În final, utilizatorul trebuie să-și verifice numele de utilizator și parola cu furnizorul de identitate, dar aplicația va ști dacă autentificarea este reușită datorită prezenței token-urilor și a secretului criptografic. Google are o imagine de ansamblu a procesului pe pagina de web "Conectarea federată pentru utilizatorii de cont Google" (https://developers.google.com/accounts/docs/OpenID).

În timp ce OpenID oferă multe avantaje potențiale în comparație cu autentificarea formularelor, se confruntă cu o lipsă de adopție din cauza complexității implementării, depanării și menținerii dansului de autentificare OpenID. Trebuie să sperăm că seturile de instrumente și cadre continuă să evolueze pentru a facilita abordarea OpenID pentru autentificare.


Secure HTTP

Anterior, am menționat modul în care mesajele text HTTP care descriu în mod automat unul dintre punctele forte ale web-ului. Oricine poate citi un mesaj și înțelege ce este înăuntru. Dar, există multe mesaje pe care le trimitem pe web pe care nu le vrem să le vadă nimeni altcineva. Am discutat despre câteva dintre scenariile din această carte. Nu vrem ca altcineva din rețea să vadă parolele noastre, de exemplu, dar, de asemenea, nu vrem să vadă numerele cărților de credit sau numerele contului bancar. Secure HTTP rezolvă această problemă prin criptarea mesajelor înainte ca mesajele să înceapă să călătorească în rețea.

Secure HTTP este, de asemenea, cunoscut ca HTTPS (pentru că folosește un https schemă în adresa URL în locul unei adrese obișnuite http sistem). Portul implicit pentru HTTP este portul 80, iar portul implicit pentru HTTPS este portul 443. Browserul se va conecta la portul corespunzător, în funcție de schemă (dacă nu trebuie să utilizeze un port explicit care este prezent în URL). HTTPS funcționează utilizând un strat de securitate suplimentar în stackul de protocoale de rețea. Stratul de securitate există între straturile HTTP și TCP și utilizează protocolul TLS (Transport Layer Security) sau predecesorul TLS cunoscut sub numele de Secure Sockets Layer (SSL).

Secure straturi de protocol HTTP

HTTPS cere ca un server să aibă un certificat criptografic. Certificatul este trimis clientului în timpul configurării comunicării HTTPS. Certificatul include numele gazdei serverului și un agent utilizator poate folosi certificatul pentru a valida faptul că acesta este cu adevărat vorbit cu serverul cu care se crede că vorbește. Validarea este posibilă folosind criptografia cu chei publice și existența autorităților de certificare, cum ar fi Verisign, care vor semna și garanta integritatea unui certificat. Administratorii trebuie să achiziționeze și să instaleze certificate de la autoritățile de certificare.

Există multe detalii criptografice pe care le putem acoperi, dar din perspectiva dezvoltatorului, cele mai importante lucruri pe care trebuie să le cunoaștem despre HTTPS sunt:

  • Tot traficul prin HTTPS este criptat în cerere și răspuns, inclusiv anteturile HTTP și corpul mesajelor, precum și tot ce urmează după numele gazdei în adresa URL. Aceasta înseamnă că datele din șirul căii și ale șirului de interogare sunt criptate, precum și toate modulele cookie. HTTPS împiedică deturnarea sesiunii, deoarece niciunul dintre cei care interceptează nu poate inspecta un mesaj și poate fura un cookie.
  • Serverul este autentificat de client datorită certificatului de server. Dacă vorbești cu mybigbank.com prin HTTPS, poți fi sigur că mesajele tale vor merge într-adevăr la mybigbank.com și nu pe cineva care a blocat un server proxy în rețea pentru a intercepta solicitările și a răspunde la traficul de răspuns de la mybigbank.com
  • HTTPS nu autentifică clientul. Aplicațiile trebuie încă să implementeze autentificarea formularelor sau unul dintre celelalte protocoale de autentificare menționate anterior, dacă au nevoie să cunoască identitatea utilizatorului. HTTPS face autentificarea bazată pe formulare și autentificarea de bază mai sigură, deoarece toate datele sunt criptate. Există posibilitatea de a utiliza certificate de client cu HTTPS, iar certificatele de pe partea clientului ar autentifica clientul în cel mai sigur mod posibil. Cu toate acestea, certificatele pe partea clientului nu sunt utilizate, în general, pe Internet deschis, deoarece mulți utilizatori nu vor achiziționa și instala un certificat personal. Corporațiile ar putea solicita certificate de clienți pentru angajați să
    Cod