Frage

Stellen Sie sich vor, Sie haben eine einfache Website mit nur 2 Seiten:login.aspx und Secret.aspx.Ihre Website wird nur durch ASP.net-Formularauthentifizierung und eine ASP.net-Anmeldeserversteuerung auf login.aspx gesichert.Die Einzelheiten sind wie folgt:

  • Die Site ist für die Verwendung von SqlMembershipProvider konfiguriert
  • Die Website lehnt alle anonymen Benutzer ab
  • Cookies sind deaktiviert

Natürlich gibt es in Bezug auf die Sicherheit viele Dinge zu beachten, aber ich bin mehr an der Zero-Code-Out-of-Box-Erfahrung interessiert, die das .net-Framework mit sich bringt.

Wenn, um dieser Frage willen, die einzigen Angriffspunkte die Benutzernamen-/Passwort-Textfelder in login.aspx sind, kann ein Hacker dann Code einschleusen, der es ihm ermöglicht, Zugriff auf unsere Seite „secret.aspx“ zu erhalten?

Wie sicher ist das Zero-Code-Out-of-Box-Erlebnis, das Microsoft bietet?

War es hilfreich?

Lösung

Sie haben noch einige Variablen, die nicht berücksichtigt werden:

  • Sicherheit in den Datenspeicher durch Ihre Mitgliedschaft Anbieter verwendet (in diesem Fall die SQL Server-Datenbank).
  • Sicherheit anderer Websites im gleichen IIS gehostet
  • allgemeine Netzwerksicherheit der beteiligten Maschinen in die Website-Hosting, oder auf dem gleichen Netzwerk, in dem die Website gehostet wird
  • physische Sicherheit der Maschinen die Website
  • Hosting
  • Sind Sie mit geeigneten Maßnahmen Authentifizierungsdatenverkehr zu verschlüsseln? (HTTPS / SSL)

Nicht alle diese Fragen sind MS spezifisch, aber sie sind erwähnenswert, weil jeder von ihnen leicht das Problem überwiegen könnten Sie sind gefragt, wenn nicht gesorgt. Aber für den Zweck Ihrer Frage werde ich nehme an, es gibt keine Probleme mit ihnen.

In diesem Fall bin ich ziemlich sicher, dass die Formularauthentifizierung tut, was es tun soll. Ich glaube nicht, dass es irgendein derzeit aktiv ausnutzen gibt.

Andere Tipps

Soweit ich weiß Passwort im Klartext gesendet werden (aber verschlüsselt). So ist die wichtigste Sache zu tun ist, HTTPS-Protokoll-Bildschirme auf der Anmeldung zu verwenden.

Die andere Einstellung scheint mir sicher zu sein.

Mit HTTP-Basic-Authentifizierung, das, was grundlegende .NET ist die Formularauthentifizierung verwendet, um die secret.aspx Seite zu sehen, muss der Browser eine Base64 codiert Verkettung von Benutzername und Passwort.

Wenn Sie SSL verwenden, jeder, der Zugriff hat das Netzwerk zwischen dem Server zu scannen und den Browser können diese Informationen lesen. Sie können den Benutzernamen und das Passwort entschlüsseln. Sie können wiederholen Sie den Benutzernamen und das Passwort in Zukunft Zugriff auf die secret.aspx Seite zu gewinnen.

Wie gesagt, es sei denn, Sie SSL verwenden, jemand auch die gesamte Sitzung von jemandem scannen kann sonst secret.aspx verwenden, so in der Tat, sie Zugriff auf den Inhalt der Seite als auch haben.

Schauen Sie mal hinter die Kulissen:

Passwortschutz

Anwendungen, die Benutzernamen, Kennwörter und andere Authentifizierungsinformationen in einer Datenbank speichern, sollten niemals Kennwörter in PlainText speichern, damit die Datenbank nicht gestohlen oder beeinträchtigt wird.Zu diesem Zweck unterstützt SQLMemberShipProvider drei Speicherformate ("Encodings") für Kennwörter und Kennwortantworten.Die von der PasswordFormat -Konfigurationsattribut initialisierte Kennwortformat -Eigenschaft des Anbieters bestimmt, welches Format verwendet wird:

  • MitgliederpasswordFormat.Clear, die Kennwörter und Passwort -Antworten in PlainText speichert.
  • MitgliederpasswordFormat.Hashed (der Standard), in dem gesalzene Hashes gespeichert sind, die aus Kennwörtern und Kennwortantworten generiert werden.Das Salz ist ein Zufall 128-Bit-Wert, der von .NET generiert wird RNGCryptoServiceProvider des Frameworks Klasse.Jedes Passwort/jede Passwortantwort Paar ist mit diesem eindeutigen Wert gesalzen, und das Salz wird in der PasswordSalt aspnet_Membership Tabelle Feld.Das Ergebnis des Hashings der Passwort und das Salt wird im Verzeichnis Kennwort-Feld.Ähnlich verhält es sich mit dem Ergebnis des Hashings der Kennwortantwort und der salt wird in der PasswordAnswer gespeichert Feld.
  • MembershipPasswordFormat.Verschlüsselt, die verschlüsselte Passwörter speichert und Passwort-Antworten.SqlMembershipProvider verschlüsselt Passwörter und Passwortantworten mit Die symmetrische Ver- und Entschlüsselung Schlüssel, der in der decryptionKey des Konfigurationsabschnitts -Attribut und die Verschlüsselung Algorithmus, der in der Konfigurationsabschnitt decryption-Attribut.SqlMembershipProvider löst eine Ausnahme, wenn sie zur Verschlüsselung aufgefordert wird Passwörter und Passwortantworten, und wenn decryptionKey ist auf Autogenerate festgelegt.Dadurch wird verhindert, dass eine Mitgliedschaftsdatenbank verschlüsselte Passwörter enthalten und Kennwortantworten werden nicht ungültig wenn sie auf einen anderen Server oder einen anderen Anwendung.

Die Stärke Ihrer Sicherheit (im Auslieferungszustand) hängt also davon ab, welche Passwortschutzformatstrategie Sie verwenden:

  • Wenn Sie Klartext verwenden, ist es natürlich einfacher, in Ihr System einzudringen.
  • Bei Verwendung von Encrypted hingegen hängt die Sicherheit vom physischen Zugriff auf Ihren Computer (oder zumindest auf machine.config) ab.
  • Die Verwendung von Hash-Passwörtern (Standardeinstellung) gewährleistet Sicherheit, abhängig von:a) bekannte Umkehrungen der Hashing-Strategie der RNGCryptoServiceProvider-Klasse und b) Zugriff auf die Datenbank, um den zufällig generierten Salt zu gefährden.

Ich weiß nicht, ob es möglich ist, eine Art Rainbow-Table-Hack in das Standard-Hash-Basissystem zu verwenden.

Weitere Informationen finden Sie unter diesem Link:http://msdn.microsoft.com/en-us/library/aa478949.aspx

Wenn es richtig durch den Mitgliedschaftsanbieter konfiguriert ist, werden Sie ein angemessenes Maß an Sicherheit haben. Außerhalb, dass der Zugang zu dieser Seite könnte durch cannonical Angriffe zugänglich sein, aber das hat mit dem allgemeinen Sicherheit zu tun. Ich hielt einen Vortrag über die Verwendung der Sicherheit Enterprise Application Blocks . Sie könnten auf die lesen wollen und in diesen Blick, wenn die Sicherheit auf Ihrer Website Implementierung und nur von gemeinsamen Sicherheitsbedrohungen bewusst sein. Kein Standort wird immer 100% unhackable, gegeben sein, dass Sie auf einem offenes gemeinsames Netzwerk und totale Sicherheit wäre ein unplugged-Server in einem sicheren bewacht 24/7 durch das Militär (um DoD „A“ Level-Sicherheit, basierend Orange Buch gesperrt sein ). Aber die aus der Box Funktionalität der Membership Provider (wenn sie richtig konfiguriert) wird eine gute Menge an Sicherheit bieten.

Edit: Ja, ich mit dem anderen Kommentar zustimmen, die gemacht wurde, HTTPS auf mindestens das Protokoll in Bildschirmen wird eine bestimmte, wenn Sie die Benutzername / Passwörter von Packet-Sniffer und Netzwerk-Monitore schützen wollen.

Asp.Net unterstützt Sitzungen ohne Cookies, wie diesem Blog-Eintrag zeigt . Anstelle eines Session-Cookie, verwendet er eine Kennung in der URL-Benutzer zu verfolgen.

Ich bin nicht sicher, wie sicher das ist, aber ich würde denken, dass es eine sichere wie die Schwierigkeit, die Identität Zeichenfolge zwingen Brute ist.

Es sieht aus wie es mehr oder weniger aus der Box funktioniert, aber wenn ein Benutzer umleiten und will Sitzungszustand aufrecht zu erhalten, müssen Sie den Session-ID enthalten. Der Blog-Beitrag zeigt, wie das zu tun, wie auch viele andere Artikel im Web.

Cookies über URL ist nicht sicher genug, es gibt so viele verschiedene Probleme mit ihm (vor allem Referrer Leckage, wenn du hast überhaupt) und die Verwendung von HTTPS.

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