2010-12-02 13 views
6

Ich möchte ein Formular validieren, ohne die gesamte Seite neu laden zu müssen. Ich benutze derzeit JavaScript, das ist jedoch sehr unsicher. Um dies zu umgehen, möchte ich AJAX und ein PHP-Skript verwenden, um das Formular zu validieren. Kennt jemand irgendwelche Sicherheitsrisiken, die dies haben könnte?Sicherheitsrisiken von AJAX durch Validierung?

Ich nehme auch an, die AJAX-Methode ist viel sicherer als Vanille JS, aber ich könnte falsch liegen?

+1

Soweit ich weiß, nutzt AJAX XMLHttpRequest, die selbst ein Javascript-Objekt ist, so dass es seltsam klingt, wenn Sie AJAX und Javascript trennen. Aber wie auch immer, AJAX ist wie POST/GET ohne die Aktualisierung, so lange Sie Ihre Validierung serverseitig richtig machen, sollten Sie in Ordnung sein. Und nein, nichts ist sicher, wenn Sie nicht sicher codieren. –

+0

Danke :-) Das war auch mein Grund für die Verwendung von PHP/AJAX - es ist (relativ) in Echtzeit, hat aber die relative Sicherheit von PHP. – Bojangles

Antwort

5

Sie sind genau die gleichen wie die Risiken der Validierung mit reinem clientseitigem JavaScript. Der einzige Unterschied besteht darin, dass Sie den Server für einige Daten als Teil des Prozesses fragen.

Der Benutzer kann das JavaScript außer Kraft setzen, um das Formular zu senden, unabhängig davon, was das Validierungsergebnis ist.

Der einzige Grund, JavaScript überhaupt zu verwenden, wenn Daten für die Einreichung geprüft werden, ist, die Benutzerzeit zu sparen. Wenn Sie als Teil davon etwas wie den Server fragen wollen, ob ein Benutzername verwendet wird, während der Benutzer den Rest des Formulars ausfüllt, dann ist das großartig - das ist eine ziemlich nette Anwendung von Ajax. Ansonsten ist die Verwendung von Ajax ziemlich wertlos.

Wenn Sie clientseitige Überprüfung durchführen möchten, dann stellen Sie die gesamte Logik, die Sie dafür auf dem Client haben können, ein und machen Sie keine HTTP-Anfragen. Wenn Sie Dinge haben, die nur serverseitig überprüft werden können (da sie auf Daten basieren, wie das Beispiel mit Benutzernamen, die bereits vergeben sind), dann sollten Sie Ajax dafür verwenden. Die clientseitige Überprüfung ist die Bequemlichkeit Prüfung. Führen Sie die Sicherheitsüberprüfung immer auf der Serverseite und auf den endgültigen gesendeten Daten durch.

Beachten Sie, dass das Validieren von Daten, die tatsächlich mit Ajax übermittelt werden, eine andere Angelegenheit ist - da dies die endgültigen übermittelten Daten sind. Es führt Ajax-Validierung als Vorstufe für die endgültige Übermittlung durch, die den Daten kein Vertrauen hinzufügt.

+0

Danke dafür. Ich würde sagen, es ist marginal sicherer als JS auf Client-Seite - ein böswilliger Benutzer kann PHP-Code nicht so einfach ändern wie JS-Code auf seinem Computer, und solange ich anständige Sicherheitsmaßnahmen in meinem PHP-Skript verwende, sollten sie nicht in der Lage sein breche es mit schlechten POST-Daten. – Bojangles

+2

Der Benutzer muss den PHP-Code nicht ändern. Sie müssen nur das JavaScript ändern, das die Antwort behandelt. PHP sagt "Das ist inakzeptabel Daten!", Benutzer sagt JavaScript sagen "So was ?!". In diesem Fall kann der Benutzer das Senden der Anfrage einfach überspringen. – Quentin

+0

Sie müssen nicht einmal den JavaScript-Code ändern; Sie können Javascript einfach vollständig deaktivieren und sie haben * alle * clientseitigen Überprüfungen umgangen. Also nein, wie das OP sagt, es ist genau das gleiche wie reine Client-Seite JS. –

1

Sie können Daten in AJAX validieren sowie in reinem JavaScript, aber Sie müssen in Ihrem Skript überprüfen, nachdem es die Daten empfängt. Jede clientseitige Validierungsmethode kann vermieden werden, indem eine POST-Anfrage an Ihr Formularziel gesendet wird.

2

Alle AJAX ist ein Teil des Prozesses auf den Server, 'versteckt' vom Client (in dem Sinne die funktionale Handhabung Ihrer Daten/Variablen ist versteckt). Das heißt, Sie sollten vorsichtig sein, die Informationen an den Server gesendet werden, die erfasst werden können oder noch schlimmer, betrogen. Der Unterschied zu reinem JS ist, dass Ihre funktionale Handhabung für alle sichtbar ist und potenziell genutzt werden kann.

Die Validierung sollte nicht serverseitig durchgeführt werden, es sei denn, Sie validieren DB-Inhalt (d. H. Eindeutigkeit eines Benutzernamens usw.). Wenn Sie einfach überprüfen, ob etwas eine E-Mail ist, können Sie dies in JS tun, z. B. mit einer RegEx.

Wenn Sie DB-Daten validieren, stellen Sie sicher, dass alle DB-Variablen, die aus gesendet (POST/GET) Variablen stammen abfragt verwenden mysql_real_escape_string entkam SQL-Injection-

+2

Es gibt andere Datenbanken als MySQL, und die Verwendung von parametrisierten Abfragen führt im Allgemeinen zu eleganterem Code, bei dem es schwieriger ist, versehentlich eine Escape mit zu verpassen. – Quentin

+0

Absolut richtig - und sehr gültig +1 – SW4

0

Die Hauptsache zu verhindern, hier zu beachten ist, dass, wenn Mit AJAX stellen Sie im Wesentlichen eine Schnittstelle zu Ihrer Datenbank bereit. Zum Beispiel, wenn Sie nach doppelten Benutzernamen suchen (was Sie NICHT in Javascript tun können) oder doppelte E-Mails, um eine Nachricht wie "dieser Benutzername ist bereits in Verwendung ... bitte versuchen Sie eine andere", bieten Sie eine Schnittstelle für einen potentiellen Hacker, um sofort zu überprüfen, welche Benutzernamen und/oder E-Mails verfügbar sind. Die Sicherheitsaspekte sind nicht die gleichen wie für Javascript. Mein Rat an Sie zu diesem Thema ist (1) Verwenden Sie parametrisierte Abfragen für den Zugriff auf die Datenbank, wie jemand bereits vorgeschlagen hat. (2) Implementiere eine Verzögerung auf der ajax.php Seite - die Länge hängt vom Szenario ab - ich gehe für ungefähr 1 Sekunde (3) Führe Ajax bei Unschärfe aus, oder beim Verlieren des Fokus, nicht bei jedem Tastendruck, (4) Implementiere einen Check in Ihrem Ajax-Handler, der sicherstellt, dass die Anfrage von der erwarteten Seite kommt (dh: nicht irgendein zufälliges Skript, das ein Hacker geschrieben hat). (5) NUR den AJAX-Aufruf ausführen, wenn eine andere grundlegende Validierung des Formularelements stattgefunden hat [dh die grundlegende JavaScript-Validierung]

Ich hoffe, das hilft. Formularvalidierung mit Ajax ist absolut nichts, als auch nur im Entferntesten der JavaScript-Validierung ähnlich zu sein. Es ist eine Schnittstelle in Ihre Datenbank, und Sie müssen vorsichtig damit sein.

Es hilft, sich vorzustellen, wie Sie in Ihre eigene Website eindringen würden - zu wissen, welche E-Mail-Adressen auf Ihrer Website registriert sind, ist ein guter Anfang. So könnte ich ein Skript schreiben, um zufällige E-Mail-Adressen mit gebräuchlichen Wörtern und/oder Namen zu generieren und Ihren Ajax-Handler zu hämmern, um eine Liste der registrierten E-Mail-Adressen auf Ihrer Website zu erhalten. Ich könnte das schnell tun, WENN du den Ratschlägen nicht folgst (1) - (5), die ich oben angegeben habe. Sobald ich die E-Mails habe, google ich sie einfach ... Chancen sind, die mir einen Namen gibt. Ich kann den Benutzernamen von dort erraten. So, jetzt habe ich Benutzernamen und E-Mails. Passwörter würden zu lange dauern, um sie zu erklären, aber wenn ich die Benutzernamen oder E-Mails so leicht bekommen kann ... markiert sie dich als Ziel und du bekommst mehr Aufmerksamkeit, die du wirklich willst.

Ich arbeite gerade an einem Registrierungsvalidierungssystem - ich würde mich freuen, es mit Ihnen zu teilen, wenn Sie möchten. Vermutlich vermisse ich etwas Wichtiges!

Frieden raus.