Frage

Meine Web-Anwendung Homepage hat eine RememberMe Checkbox. Wenn der Benutzer überprüft es, willl ich speichern E-Mail-ID und das Passwort in Cookies. Dies ist mein Code:

if (this.ChkRememberme != null && this.ChkRememberme.Checked == true)
   {
     HttpCookie cookie = new HttpCookie(TxtUserName.Text, TxtPassword.Text);
     cookie.Expires.AddYears(1);
     Response.Cookies.Add(cookie);
   }

Was ich wissen möchte, ist:

  • Ist es sicher, Passwörter in Cookies zu speichern?
  • Was ist die richtige Art und Weise das gleiche zu tun?
  • Was sind die besten Praktiken in Abbindezeit für einen Cookie sind?
War es hilfreich?

Lösung

Es ist sicher nicht zum Speichern von Passwörtern in Cookies, weil sie als Klartext zur Verfügung stehen.

Ein guter Ort, um einige Antworten über Cookies zu finden, ist Cookie-Central. Für die Mitgliedschaft in der Regel verwendet wird, ein Cookie mit einer langen Zeichenfolge ‚token‘ genannt, die von der Website ausgegeben, wenn Sie Ihre Benutzername und ein Kennwort angeben. Mehr über den Prozess, den Sie in diesem Artikel finden. Wenn die Formularauthentifizierung in ASP.NET verwenden, können Sie das Authentifizierungscookie wie folgt festgelegt:

FormsAuthentication.SetAuthCookie(userName, isPersistanceCookie);

Der zweite Parameter ist für „Remember Me“ Funktionalität verwendet - wenn sie wahr wird es persistente Cookies erstellen, nachdem Sie die Website verlassen dauern wird. Sie können auch das Cookie wie diese programmatisch manipulieren:

HttpCookie authCookie =
  HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];

Andere Tipps

Nein! Speichern Sie keine Passwörter in Cookies!

In ASP.NET Verwendung

FormsAuthentication.SetAuthCookie(username, true);

Der Wert des zweiten Arguments bestimmt, ob das Cookie persistent ist (das erinnere mich Checkbox Wert).

Nein, nicht aus der Ferne sichern. Sie haben keine Garantie, dass Cookies nicht im Klartext gespeichert werden (und in der Tat, die meisten Implementierungen tun speichern sie als Klartext).

Wohlgemerkt, „remember me“ von Natur aus unsicher ist, wie jemand das Abfangen der Cookies Zugriff auf die Anwendung erhält. Aber das Kennwort eines Benutzers Belichtung geht noch einen Schritt weiter unten in der Unsicherheit Leiter. :-) Und wahrscheinlich der Benutzer wirklich verrückt macht, wenn sie herausfinden.

Ich verwende ein Cookie-String verschlüsselte, die die Kontonamen mit einem Token kombiniert des Benutzers enthält, die in keine (anderen) Art und Weise mit dem Benutzerkonto zugeordnet ist, außer in einer Tabelle auf meinem Server. Wenn der Benutzer kehrt an den Ort, entschlüsseln wir das Cookie und nachschauen, ob das Token in der Tat mit diesem Konto zugeordnet ist. Das Token (und damit Cookie) ändert sich bei jedem Auto-Login und entkräftet den einen für die Auto-Login verwendet. (Es gibt eine viele-zu-eins-Beziehung zwischen den Token und dem Konto für die automatische Anmeldung von mehreren Standorten zu ermöglichen. Sie können begrenzen, wenn Sie so wollen.) Tokens Zeit heraus, wenn sie innerhalb von X Tagen nicht verwendet werden. (Dies wird nicht nur durch die Begrenzung der Dauer des Cookies getan,. Es ist getan serverseitige als auch) Es gibt ein paar andere Dinge, die ich in dort werfen Leben ein machen Bit schwierig für jemanden, der versucht zu dekodieren das Cookie (mit ihm erfolgreich entschlüsselt) oder einen gestohlenen Cookie verwenden (was nicht Entschlüsselung benötigt), aber es gibt keinen Punkt in Overkill geht (wieder „remember me“ von Natur aus unsicher ist).

ich, dass auf einer Website, wo robuste Sicherheit nicht wirklich notwendig ist (natürlich) und die eine große Anzahl von dynamischen IP-Clients, und so versuche ich nicht, es zu sperren, um eine IP-unten. Aber auch sie nach unten in einem IP-Sperren sie nicht machen sicher, es reduziert nur die Angriffsfläche etwas.

Sie können sich fragen, warum ich den Benutzernamen in den Cookie haben. Für gerade „remember me“ Zwecke, ich würde es nicht empfehlen, dort mit, auch wenn es (schließlich ist es die Hälfte des Authentifizierungs-Paares in einem Benutzername + Passwort-System) verschlüsselt ist. Ich war ein bisschen es in unserer Online-Cookie zu finden überrascht, als ich im Format ausgesehen, als ich daran erinnerte, wie wir dies für diese Frage taten; aber dann sah ich die Kommentare zu erklären, warum es da ist und es gibt Gründe, die nichts mit „remember me“ (nicht unbedingt überzeugend Gründen, im Nachhinein, aber Gründe).

Ein letzter Punkt ist die Tatsache, dass „remember me“ ist von Natur aus unsicher ist einer der vielen Gründe, warum Website-Protokolle sind sehr wichtig, und warum sollten Sie das Kennwort Nacheichung im Prozess der so dass Änderungen an wichtigen Kontoinformationen (zu machen erfordern es schwieriger für jemanden, den die Cookie Eigentum an der Rechnung zu tragen, gestohlen zu haben).

Dies ist, was sollten Sie nie tun, weil es sehr einfach ist, den Wert eines Cookies zu ändern und zurück an den Server senden. Auch „Benutzer looged in als‚naivists‘“ in einem Cookie gespeichert ist falsch, weil ich es dann „in als‚Pandiya Chendur‘angemeldeten Benutzer“ ändern.

Was Sie in Cookies zu tun ist, geben Informationen an Kunden, die, auch wenn geändert wird, macht keinen Sinn an den Server. Zum Beispiel - Lieblingsfarbe, erste Seitenlayout et cetera.

Sie können die Session-ID geben, die in einem Cookie gespeichert wird, weil sie nichts besser für sich selbst machen können, wenn sie den Wert auf etwas ändern andere (es sei denn, sie wissen, eine gültige Session-ID aus einer anderen Sitzung).

Was Microsofts MSDN sagt über die Verwendung von Cookies :

  

Die Sicherheitsprobleme mit Cookies   ähnlich denen von Daten immer aus   der Kunde. In Ihrer Anwendung   Cookies sind eine andere Form von Benutzereingaben   und unterliegen daher einer Prüfung   und Spoofing. Ein Benutzer kann als Minimum   siehe die Daten, die Sie in einem Geschäft   Cookie, da das Cookie vorhanden ist   auf den Computer des Benutzers. Der Benutzer   kann auch das Cookie vor der Änderung   Browser sendet es Ihnen.

     

Sie sollten niemals sensible Daten speichern   in einem Cookie, wie Benutzername,   Passwörter, Kreditkartennummern usw.   auf. Legen Sie nicht alles in einem Cookie   Das sollte nicht in die Hände von a   Benutzer oder von jemandem, der vielleicht irgendwie   stehlen das Cookie.

     

In ähnlicher Weise wird misstrauisch   Informationen, die Sie erhalten aus einem Cookie.   Gehen Sie nicht davon, dass die Daten die   gleiche wie wenn Sie es schreiben; verwenden Sie die   gleiche Garantien in mit Cookie Arbeits   Werte, dass man es mit Daten, die ein   Benutzer hat in eine Webseite eingegeben haben. Das   Beispiele in diesem Thema früher gezeigt   HTML-Codierung der Inhalt eines Cookies   bevor der Wert in einer Seite anzeigt,   wie Sie vor der Anzeige würde jeder   Informationen, die Sie von den Benutzern erhalten.

     

Cookies werden zwischen Browser gesendet und   Server als Klartext, und jeder,   Ihre Web-Verkehr kann abfangen   Lesen Sie das Cookie. Sie können ein Cookie gesetzt   Eigenschaft, die das Cookie verursacht zu sein   nur übertragen, wenn die Verbindung   verwendet die Secure Sockets Layer (SSL).   SSL schützt nicht das Cookie von   gelesen oder manipuliert werden, während es   auf den Computer des Benutzers, aber es funktioniert   verhindern, dass das Cookie gelesen wird   während des Transports, da das Cookie ist   verschlüsselt. Weitere Informationen finden Sie   Basic Security Practices für Web   Anwendungen.

Es ist sicher nicht zum Speichern von Passwörtern in Cookies, weil sie als Klartext zur Verfügung stehen. aber wenn Sie Ihre bevorzugten Kriterien so zu tun ist, oder jede Anforderung Benutzer ist dort können Sie tun, indem Sie die Saiten zu verschlüsseln. mit dem diese sicher genug machen kann.

, aber es wird nicht empfohlen,

Ich glaube, Sie müssen ein Token mit Benutzername und einer verschlüsselten Authentifizierungszeichenfolge erstellen, die Sie von Windows-Identität erhalten. Keine Notwendigkeit zu speichern Passwort auf Cookie. Wir haben unsere Anwendung, die Benutzernamen gespeichert und authentifiziert Zeichenfolge

Btw, speichern Passwörter nicht überall sichern, sowohl Client als auch Server-Seite.

Sie brauchen nicht zu tun.

Was Branislav sagte, und ...

Neben keine sensiblen Daten in Cookies setzen, sollten Sie sie auch sichern, indem sie in Ihrer web.config mindestens folgende Platzierung:

<httpCookies httpOnlyCookies="true" />

Weitere Informationen finden Sie unter: Wie Sie genau tun configure httpOnlyCookies in ASP.NET?

Es ist haupt nicht sicher. Cookies werden in dem Client-Computer gespeichert, die manipuliert werden können.

  • Wenn Sie SSL verwenden, die Sie sollten, wenn Sie eine sichere Informationen senden, dass eliminiert einen Dritten zu Ihrem Web-Traffic zu hören. Dies würde das gleiche Problem sein, unabhängig ein Benutzer-Anmeldeinformationen in einem Cookie zu speichern, weil, wenn sie einloggen, um Ihre Benutzernamen und Passwort an den Server sendet sowieso, wo ich die Server-Hashes es annehmen, und vergleicht sie mit dem Hash-Passwort, das Sie für den Benutzer haben.

  • Andere Domänen werden nie wegen Quer Herkunft der Lage sein, Ihre Cookie zu lesen, damit das ist kein Problem.

  • Also wirklich die einzige „Sicherheitslücke“, wenn Sie es nennen wollen, das ist, wenn jemand physisch Zugang zu seinem Computer erhält. Wenn das passiert sind sie höchstwahrscheinlich keine Informationen in Gang zu bringen, die ohnehin von dieser Person soll. Wie erklären Sie sich, wenn Chrom Auto füllt Login-Formulare für Sie, das ist sicher? Ich bin sicher, sie sind nicht im Klartext zu speichern, aber das ist nicht einmal wichtig. Wenn Sie auf eine Seite gehen, dass Chrom Auto füllt Sie nur an das Passwort aus der Form und das Aussehen kopieren können, dass Sie jetzt, dass Personen ein Passwort.

  • Es kommt wirklich darauf an, wie „sicher“ Sie es brauchen. Ich bin damit einverstanden, dass als Zeichen eines Benutzer Informationen mit einem Ablauf Verschlüsselung ist der beste Weg zum Authentifizieren Service-Anrufen und bietet Flexibilität. Ich sehe nur nicht das Problem mit Login-Daten in einem Cookie gespeichert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top