Ich habe eine Website-Registrierungsseite, und ich versuche eine Liste zu erstellen, was ich tun muss, um sie zu schützen. Wenn Sie einen Angriff kennen, nennen Sie ihn bitte und beschreiben Sie ihn am besten mit einer kurzen Beschreibung seiner Lösung. Alle hilfreichen Antworten / Kommentare erhalten eine Stimmenmehrheit.
Hier ist, was ich bis jetzt vorhabe: (und hinzuzufügen, was andere vorschlagen. Puh, fügte andere Eingaben hinzu, stellte sich als viel Arbeit heraus, aber bitte behalte sie, ich füge hier weiter hinzu)
[AviD] "Gespeicherte Prozeduren bieten auch zusätzliche Vorteile (oben vorbereitete Anweisungen), z. B. die Möglichkeit der geringsten Berechtigung für die DB"
Hashing des Passworts vor der Eingabe von db nicht. Lösung: Hash-Passwörter.
[Inshallah] "Eigentlich denke ich, es ist nicht wirklich wichtig, ob es Konflikte gibt oder nicht. Das Salz dient nur zur Verhinderung von Tabellen-Lookups, so dass selbst ein 2-Char-Salz ein (kleiner) Gewinn ist Wenn es Konflikte gibt, sprechen wir hier nicht von einer kryptografischen Nonce, die sich absolut nicht wiederholen darf, aber ich bin kein Kryptoanalytiker "
Dos-Attacken ?! (Ich vermute, das gilt auch für Anmeldeformulare)
[Pascal Thivent] "Verwenden Sie HTTPs, wenn Sie sensible Daten wie ein Passwort senden." "für Man-in-the-Middle-Attacken, sofern entsprechende Cipher-Suites verwendet werden"
[Koosha] "Verwenden Sie HTTPs oder verschlüsseln Sie Passwörter, bevor Sie sie mit MD5 und Javascript auf der Client-Seite absetzen."
[Dan Atkinson] Schließen Sie bestimmte Benutzernamen aus, um Konflikte mit bestehenden Seiten zu vermeiden, die denselben Namen haben (siehe Originalbeitrag für vollständige Antwort und Erklärung)
[rasputin] "E-Mail-Bestätigung verwenden"
[Andrew und epochwolf] xss attacks
Verwenden Sie HTTPS, d. h. eine Kombination aus HTTP und SSL, um eine Verschlüsselung und eine sichere Identifizierung des Servers zu gewährleisten, wenn Sie sensible Daten wie ein Passwort eingeben. Die Hauptaufgabe von HTTPS besteht darin, einen sicheren Kanal über ein unsicheres Netzwerk zu erstellen. Dies stellt einen angemessenen Schutz vor Lauschangriffen und Man-in-the-Middle-Angriffen sicher, vorausgesetzt, dass angemessene Verschlüsselungssammlungen verwendet werden und das Serverzertifikat verifiziert und vertrauenswürdig ist.
Verwenden Sie recaptcha oder asirra , um die automatische Übermittlung zu vermeiden. Das sollte die Bots und Script Kiddies stoppen.
Um zu verhindern, dass Horden von Menschen Spam verschicken (über mechanischen Türken oder Ähnliches), protokolliert jeden Versuch in memcached und sobald du eine maximale Anzahl von Einreichungen von derselben IP in einem bestimmten Zeitraum erreichst, blockiere diese IP für ein paar Minuten (oder Stunden, Tage, was auch immer ...).
Sie sollten die E-Mail-Bestätigung verwenden
und Ergänzung zu Kooshas Antwort: Wenn Sie Nutzernamen einschließlich solcher Zeichen "# & amp;; /" zulassen und Benutzerseiten wie diese site.com/user?me&you/ erstellen, kann dies ein ernsthaftes Problem in Browsern sein. Bitte denken Sie daran, in der URL-Adressleiste von Browsern.
Wenn die Routen auf Ihrer Website auf eine bestimmte Art und Weise festgelegt sind (dh indem Sie den Benutzernamen anstelle ihrer ID verwenden), könnte ein Benutzername wie "admin" zu Problemen führen. Sie sollten wahrscheinlich eine Ausschlussliste möglicher Benutzernamen haben.
Dies führte in der Vergangenheit zu Problemen mit MySpace und Leuten, die Benutzernamen wie Login hatten und dann ihre Seite mit einem Phishing-Formular dekorierten.
Bearbeiten:
Wie in den Kommentaren von AviD und Peter Boughton , es ist auch eine Möglichkeit, Benutzer irrezuführen. Nehmen wir an, ein Benutzer hat den Benutzernamen 'admin'. Dann haben sie auf ihrer Benutzerinformationsseite (vorausgesetzt, dass sie jeweils eine erhält, die für alle verfügbar ist, wie SO), eine Verknüpfung in ihrem About-Abschnitt, die wie folgt lautet:
Für weitere Informationen besuchen Sie unseren Entwickler Blog unter mysite.cn/loginpage
Jemand sieht vielleicht "mysite" in der URL, schaut aber nicht wirklich auf die TLD, die China wäre (Entschuldigung China!), anstatt auf die .com TLD, auf der Ihre Seite gehostet wird. Also klicken sie sich durch und nehmen an, dass es in Ordnung ist (sie kamen schließlich von der Admin-Benutzerseite), und diese Seite sieht genauso aus wie deine, hat aber eine Login-Seite. Sie geben Ihre Daten also erneut ein, aber nichts passiert. Oder es leitet Sie woanders hin.
Dies ist oft die Taktik von Bankbetrügern, die Kunden ansprechen möchten und sie auffordern, ihre Website aufzurufen, um ein Banking-Passwort erneut einzugeben.
Dies ist nur eine weitere Form eines Sicherheitstyps, der als Social Engineering bekannt ist.
PS. Clientseitige Verschlüsselung ist keine sichere Methode. Wenn Sie jedoch keine HTTPs verwenden können, ist die clientseitige Verschlüsselung besser als nichts.
Begrenzende Zeichen, es ist eine einfache Möglichkeit, Ihre Software vor Injektionen zu schützen (SQL / XSS).