Welche Angriffe können auf eine Registrierungsseite gelenkt werden?

8

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)

  • SQL-Injektionen: vom Benutzereingabedatum. Lösung: vorbereitete Aussagen.
  • [AviD] "Gespeicherte Prozeduren bieten auch zusätzliche Vorteile (oben vorbereitete Anweisungen), z. B. die Möglichkeit der geringsten Berechtigung für die DB"

    • Guter Punkt, bitte erläutern. Ich dachte, gespeicherte Prozeduren wären die gleichen wie vorbereitete Aussagen. Was ich meine diese Anweisungen waren Sie bindParam die Variablen. Sind sie anders?
  • Hashing des Passworts vor der Eingabe von db nicht. Lösung: Hash-Passwörter.

  • [AviD] "Beim Hash-Vorgang benötigt das Passwort ein Salz (zufälliger Wert, der dem Passwort vor dem Hash hinzugefügt wurde), um Rainbow Table-Angriffe und Angriffe mit demselben Passwort zu verhindern."
  • "Das verwendete Salz sollte für jeden Benutzer unterschiedlich sein."
    • Guter Punkt, ich habe eine Frage dazu: Ich weiß, dass Salz zufällig sein sollte, aber auch einzigartig. Wie stellen wir den eindeutigen Teil her, um dem Angriff mit dem gleichen Passwort entgegenzuwirken? Ich habe darüber gelesen, aber noch keine klare Antwort darauf bekommen.
  • [Inshallah] "Wenn Sie ein langes Salz verwenden, wie 16 Zeichen für SHA-256 ($ 5 $), dann müssen Sie seine Eindeutigkeit nicht wirklich überprüfen"
  • [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 "

    • Guter Punkt, aber hat jemand in diesem Punkt Disclaimer?
  • 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"

    • Was sind die "passenden Cipher Suites", auf die hier Bezug genommen wird?
  • [Koosha] "Verwenden Sie HTTPs oder verschlüsseln Sie Passwörter, bevor Sie sie mit MD5 und Javascript auf der Client-Seite absetzen."

    • Ich stimme MD5 nicht zu und mag keine Verschlüsselung auf der Clientseite, macht mir überhaupt keinen Sinn. aber andere Eingabe willkommen.
  • [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)

  • [Koosha] "Begrenzen erlaubte Zeichen für Benutzername.für zB Alphabet und Zahlen, Bindestrich (-) und Punkt (.)"
    • Bitte genau erklären warum?
  • [Stu42] "Verwenden Sie Captcha, damit ein Bot nicht automatisch mehrere Konten erstellen kann"
  • [AviD] "Es gibt bessere Lösungen als Captcha, aber für eine Website mit geringem Wert kann es gut genug sein."
    • @AviD, bitte erwähnen Sie ein Beispiel?
  • [rasputin] "E-Mail-Bestätigung verwenden"

  • [Andrew und epochwolf] xss attacks

    • Obwohl ich Andrew und epochwolf nicht zustimme, einfach & lt; und & gt; oder um & lt; zu & amp; tl; und & gt; zu & gt ;. Die meisten Meinungen schlagen eine Bibliothek wie HTML Purifier vor. Irgendwelche Eingaben dazu?
Chris 10.10.2009, 16:30
quelle

8 Antworten

6

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.

    
Pascal Thivent 10.10.2009, 16:36
quelle
4

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 ...).

    
cfischer 10.10.2009 17:16
quelle
3

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.

    
rasputin 10.10.2009 16:43
quelle
2

Ich denke, du solltest ein Salz verwenden, wenn du die Passwörter hashst.

    
eWolf 10.10.2009 16:34
quelle
2

Verwende Captcha, damit ein Bot nicht automatisch mehrere Accounts erstellen kann

    
YeahStu 10.10.2009 16:35
quelle
2

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.

    
Dan Atkinson 10.10.2009 16:44
quelle
1

Filtern von Benutzerdaten, Entfernen von & lt; ',' & gt; ' - Einfach HTML-Tags. Wenn jemand das Profil des Benutzers sehen kann, gibt es mögliche XSS-Angriffe durch Daten.

    
Andrew 10.10.2009 16:39
quelle
1
  1. Verwenden Sie HTTPS
  2. Verwenden Sie Captcha.
  3. Begrenzen Sie zulässige Zeichen für den Benutzernamen auf der Serverseite. zum Beispiel Alphabet und Zahlen, Bindestrich (-) und Punkt (.).

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).

    
Kousha 10.10.2009 16:43
quelle

Tags und Links