Best Practices für die Authentifizierung / Sicherheit von Webanwendungen (beliebige Plattform)

12

Ich habe heute eine Frage von meinem Vorgesetzten erhalten, in der ich gefragt werde, was als akzeptables Design für die Authentifizierung einer Webformularanwendung angesehen wird, insbesondere in Bezug auf die Art vieler gängiger Browser, Kennwort für Ihre typischen Benutzername-Kennwort-Anmeldefelder zu speichern .

Mir fällt es schwer, eine Antwort zu finden, die ich für akzeptabel halte. Angesichts der peinlichen Sicherheitslücken von Sony möchte ich wirklich vorsichtig sein, auch wenn die Daten, die auf Personen gespeichert werden, eine geringere Empfindlichkeit aufweisen. Wir speichern keine Sozialversicherungsnummern oder Adressen, jedoch Telefonnummern, E-Mail-Adressen und ein Foto eines Besuchers.

Er befürchtet, dass sich ein Benutzer das Passwort einfach an einem öffentlichen Terminal merken und dann einfach auf dieses Terminal springen kann, um unbefugt Daten anzuzeigen oder zu ändern. Ich bin mir jedoch ziemlich sicher, dass zumindest auf Windows-Arbeitsstationen der Browser das Kennwort nicht für alle Windows-Benutzerkonten "merkt".

Darüber hinaus implementiere ich eine Einwegkennwortverschlüsselung auf der Serverseite (verschlüsseltes Kennwort in der Datenbank speichern, vom Benutzer eingegebenes Kennwort auf dem Server verschlüsseln, mit verschlüsselter Zeichenfolge aus der Datenbank vergleichen). Es gibt keine unmittelbaren Pläne, eine SSL-Verschlüsselung einzubauen, dies ist jedoch immer noch eine Option.

Gibt es bei diesem Ansatz größere Sicherheitslücken? Haben Sie bessere Vorschläge?

maple_shaft
quelle
Stellen Sie beim Speichern des in eine Richtung verschlüsselten (dh gehashten) Passworts sicher, dass Sie entweder einen starken Hash (dh kein MD5) verwenden oder das Passwort verkürzen (siehe stackoverflow.com/questions/420843/… ) oder beides.
Jordan Reiter
Besuchen Sie die OWASP-Website ( owasp.org ). Sie haben viele sehr nützliche Sicherheitsinformationen, einschließlich "Spickzettel" für verschiedene Protokolle.
Ralph
Hier finden Sie einige Richtlinien für die formularbasierte
Only You

Antworten:

13

Einige gute Tipps:

  1. Speichern Sie nur die Daten, die Sie benötigen
  2. Verschlüsseln Sie sensible Daten (SSN, Passwort, Kreditkartennummer usw.) immer, wenn Sie sie speichern
  3. Verschlüsseln Sie den Datenverkehr immer mit SSL, wenn Sie vertrauliche Daten senden / empfangen
  4. Wenn Sie Zweifel an der Vertraulichkeit von Informationen haben, verschlüsseln Sie diese
  5. Traue keinen Benutzereingaben (jemand wird versuchen, etwas Schlechtes einzugeben)
  6. Traue deinen Daten nicht (jemand kann sie in der Datenbank ändern - zum Beispiel bösartige Skripte einschleusen)
  7. Rollen Sie nicht Ihre eigene Verschlüsselung
  8. Sichern Sie die Server, auf denen sich die Anwendungen / Datenbanken befinden
  9. Erhöhen Sie die Belastung der Endbenutzer aus Sicherheitsgründen (Kennwortbeschränkungen, machen Sie niemals Kennwörter zugänglich, senden Sie keine URLs per E-Mail, reduzieren Sie die Sitzungszeit usw.).

Mein Vorschlag an Sie wäre, ein Buch über das Sichern von Webanwendungen zu erhalten. Es gibt einfach zu viele Informationen, um sie in einer einzigen Antwort / einem einzigen Blog / Artikel wiederzugeben. Das Thema Verschlüsselung allein ist umfangreich.

Mayo
quelle
Was ist der Grund für die Verwendung von SSL anstelle der Übertragung der eigenen Verschlüsselung? Möchten Sie WS-Security verwenden, um Ihre eigene Verschlüsselung zu implementieren? Das Einrichten von SSL kann mühsam sein.
Mr. Jefferson
Das ist eine gute Checkliste. Ich bin überrascht, dass es nicht mehr Gegenstimmen gibt.
Kristofer Hoch
2
@ Mr.Jefferson Ich würde sagen, 99,999999% der Zeit möchten Sie NIEMALS "Ihre eigene Verschlüsselung rollen".
Zach Leighton
2

Sie können versuchen, das Browserverhalten außer Kraft zu setzen - hier einige gute Tipps:

/programming/32369/disable-browser-save-password-functionality

Chad Thompson
quelle
1
Guter Link. Ich persönlich glaube nicht, dass es unsere Aufgabe als Entwickler ist, solche Benutzerentscheidungen außer Kraft zu setzen, aber ich habe eine Website für einen Kunden erstellt, der dies verlangt, daher ist es wichtig zu wissen, wie das geht.
Carson63000
1

Ich würde sagen, es sollte dir gut gehen.

Die meisten Benutzer werden intelligent genug sein, um ihr Kennwort nicht auf einem öffentlichen Terminal zu speichern, und die Kennwörter werden pro Profil gespeichert. Denken Sie daran, sie könnten es genauso einfach auf einen Notizzettel schreiben oder ein schwaches Passwort verwenden.

Wenn die Anmeldeseite nicht über SSL verschlüsselt ist, ist es für einen Angreifer nicht zu schwierig, dieses Kennwort zu ermitteln, während es über das Netzwerk übertragen wird. Ein guter Job hat jedoch das Kennwort in der Datenbank gespeichert, wodurch ein potenzieller Angreifer daran gehindert wird, die Kennwörter aller zu sehen (die er mit der E-Mail-Adresse verwenden könnte, um sich bei anderen Websites anzumelden, auf denen sich der Benutzer möglicherweise befindet).

Wenn Sie es dennoch möchten, gibt es Möglichkeiten, das Verhalten des Browsers zu deaktivieren, wie Chad hervorgehoben hat. Ich habe das nur auf der Website meiner Bank und im Microsoft Live-System gesehen.

David Hogue
quelle
Toller Beitrag, ich habe vergessen hinzuzufügen, dass der Benutzername nicht die E-Mail-Adresse ist, aber ein Benutzer wird eine E-Mail-Adresse im System gespeichert haben. Witzigerweise erwähnen Sie dies, weil selbst beliebte Websites wie Facebook für E-Mail-Addys und -Kennwörter anfällig sind.
maple_shaft
Ich möchte auch hinzufügen, dass ich die Sicherheitslücken in Facebook nicht unbedingt als "Ausrede" für ein schlechtes Sicherheitsmodell in meiner Anwendung nenne. Nur weil Joeys Mutter es
zulässt,
1

Ab einem bestimmten Punkt können Sie einen Benutzer nicht vor sich selbst schützen (und sind gesetzlich nicht dazu verpflichtet). Die Funktion "Kennwort speichern" ist zwar riskant, aber ein Risiko, das der Benutzer eingeht. Wenn der Benutzer beschließt, sein Kennwort für mehrere Dienste erneut zu verwenden, übernimmt er dieses Risiko ebenfalls. Sie müssen sie auch nicht warnen, ihr Kennwort nicht auf einen Notizzettel zu schreiben und an ihren Monitor zu kleben, auch wenn Benutzer dies häufig tun.

Das heißt, bis jemand erfolgreich Rechtsstreitigkeiten führt und die Regeln ändert. Siehe auch: "Warnung: Inhalte können heiß sein".

Rein Henrichs
quelle
0

Ich glaube nicht, dass Sie zuverlässig kontrollieren können, ob sich der Browser ein Passwort merkt oder nicht. Es liegt einfach in Ihrer Hand, ob der Browser dies tut oder nicht. Es ist auch nicht unbedingt ein großes Sicherheitsrisiko für Sie . Sie sollten immer davon ausgehen, dass Angriffe von gültigen Anmeldungen ausgehen können. Gehen Sie nicht davon aus, dass jemand, der einen gültigen Login-Benutzer / -Pass hat, nichts Gutes tut. Es gibt viele Möglichkeiten, wie Passwörter in die falschen Hände geraten können.

Sie könnten die Feldnamen in Ihrem Anmeldeformular jedes Mal nach dem Zufallsprinzip sortieren. <input name="username"Verwenden Sie stattdessen so etwas wie <input name="user658667587". Das würde zwischengespeicherte Benutzernamen ziemlich unbrauchbar machen. Aber ich weiß nicht, ob sich der Aufwand lohnen würde. Ganz zu schweigen von unangenehmen Benutzern, die sich nicht auf öffentlichen Maschinen aufhalten .

Wenn Sie sich in einer äußerst sicherheitsrelevanten Situation befinden (Bankgeschäfte, Investitionen), können Sie während der Anmeldung einfach die Leute fragen, ob es sich um eine öffentliche Maschine handelt. Sie können bekannte IP-Adressen auch zwischenspeichern, wenn sich Benutzer anmelden. Wenn Sie sich von einem anderen Ort aus anmelden, benötigen Sie zusätzlich zum normalen Benutzer / Ausweis eine nicht tippbare PIN-Nummer (z. B. Bilder anklicken). Meine Bank macht so etwas.

GroßmeisterB
quelle