2010-06-22 5 views
5

Gerade jetzt schreibe ich ein Projekt, und ich beschloss, es mit jquery und ajax Anfragen zu schreiben.Sicherheit von AJAX-Anfragen

einzige Sache, ich weiß nicht, ist es sicher genug?

zum Beispiel, wenn ich den Benutzernamen überprüfen, wenn neue Benutzer registrieren, verwende ich jQuery Ajax-Request,

bekomme ich die Reihe von bestehenden Benutzernamen von db (mit json) und dann überprüfen, ob new_username nicht inArray() von vorhandenen username s, mache ich eine andere Anfrage und registriere den Benutzer.

aber was ist mit Sicherheit? Meybe Hacker kann den Weg finden, einige meiner if-else Aussagen zu ändern, und meine ganze securite bremst.

vielleicht helfen Sie mir, diese Situation zu verstehen?

Dank

+1

vielen dank für interessante diskussion. und vielleicht kennen Sie die Methoden zum Ändern des clientseitigen Skripts? Gibt es ein Werkzeug dafür? – Simon

Antwort

6

Warum setzen Sie jede dieses clientseitige?

Sie sollten den Benutzernamen/das Passwort über HTTPS in einer AJAX-Abfrage senden und den Server nur mit den Daten antworten lassen, die für den Benutzer erforderlich sind, nicht die gesamte Benutzernamenliste.

Selbst die Sicherheit beiseite legen, was ist, wenn Sie Millionen von Benutzern haben? Du wirst diese Liste an alle Clients senden, damit sie sich einloggen können?

+0

Auch wenn ich HTTPS verwende, würde ich diese ganze Liste nicht an den Benutzer senden; Wenn Besucher diese Liste (mit einem beliebigen Tool) anzeigen können, können sie sehen, wer sich auf Ihrer Website registriert hat. Darüber hinaus verlassen Sie sich nicht nur auf die clientseitige Validierung. Es ist einfach, JavaScript zu umgehen. –

+0

es ist nur ein Beispiel, ich versuche nur, die Arbeit von Jquery aus Sicherheitsgründen zu verstehen (Entschuldigung für englische Sprachfehler :) – Simon

+2

Denken Sie daran, dass alles, was Sie auf dem Client tun, vom Benutzer geändert und angezeigt werden kann. Jedes Mal, wenn Sie eine sichere Operation durchführen müssen, müssen Sie den Server überprüfen lassen. –

12

(Im Folgenden Ich gehe davon aus, dass die username die ID ist, mit dem ein Benutzer anmelden kann, nicht irgendeine Art von Spitznamen;))

  1. bekommen alle Benutzernamen als JSON schlecht . Dann erhält ein Angreifer alle registrierten Benutzernamen sofort!
    Senden Sie einfach den Benutzernamen an den Server, validieren Sie dort und senden Sie entweder "gültig" oder "ungültig" als Antwort. Das heißt, überprüfen Sie die Verfügbarkeit auf der Serverseite.

  2. Always validieren die Benutzereingabe auf der Server-Seite . JavaScript kann deaktiviert werden.

Update:

Es spielt keine Rolle, ob jQuery beteiligt ist oder nicht. Alles, was Sie an den Client senden (und ist nicht gehasht oder verschlüsselt) kann vom Client gelesen werden kann, ist es egal, ob es sich um ein XMLHttpRequest ist oder eine „normale“ Anfrage.

Möchten Sie eine HTML-Tabelle mit allen Nutzernamen an einen Besucher Ihrer Website senden?Ich hoffe :) nicht


Zusammenfassung:

  • nur Daten senden, dass der Client Zugriff haben darf.
  • Überprüfen Sie die Benutzereingabe auf der Serverseite.
  • Vertraue niemals Benutzereingaben.
+2

+1 für die HTML-Tabelle! : D –

+0

Nein, ich sende es als eine Liste, nicht als Tabelle: D – Simon

+0

BTW, ich kenne eine Menge Websites, die alle Benutzernamen an den Besucher senden; Es wird in vielen Foren als "Mitgliederliste" bezeichnet. [Auch SO tut] (http://stackoverflow.com/users) ;-) –

2

Sicherheit ist eines der Dinge, die am besten Server-Seite getan wird, wenn möglich. Mein typischer Ansatz für die AJAX-Anmeldung besteht darin, den Benutzernamen und ein MD5- oder SHA1-Hash-Passwort an eine Methode auf dem Server zu senden, die sich dann um alle Anmeldedetails kümmert. Die Details dieser Implementierung hängen wirklich von Ihrer serverseitigen Technologie ab, aber die meisten Webanwendungs-Frameworks verfügen über entsprechende Einrichtungen. Es kann sogar einige Lösungen geben, die Javascript-Bibliotheken enthalten, um auch die Client-Seite zu bearbeiten.

5

Ajax ist kein Ersatz für serverseitigen Code. Während es möglich ist, Anmelde- und Registrierungsfunktionen mit ajax zu implementieren, müssen Sie dennoch Daten auf dem Server validieren und speichern.

Eine vernünftigere Implementierung würde einfach eine https-Anfrage an den Server senden, die den Benutzernamen und das Passwort enthält, auf die der Server mit einem Yay oder Nein antworten würde.

+0

Ajax ist kein Ersatz für Server-Side-Code <<< DIESES !!! – Incognito