Warum brauchen wir sowohl die clientseitige als auch die serverseitige Validierung? [geschlossen]

7

Das Argument für die Verwendung sowohl der clientseitigen Validierung (JavaScript) als auch der serverseitigen Validierung mithilfe eines Validators lautet wie folgt: Wenn der Clientbrowser JavaScript nicht unterstützt, kann der Benutzer die clientseitige Validierung nicht verwenden.

Meine Frage ist, wie gut ist dieses Argument in der Praxis? In der Theorie macht es Sinn, aber in der Praxis, wenn JavaScript im Browser deaktiviert ist, werden die meisten Website-Funktionen nicht einmal funktionieren. Der Benutzer kann die Seite wahrscheinlich nicht einmal ohne JavaScript laden, geschweige denn ein Formular senden.

    
Victor 06.04.2013, 20:37
quelle

5 Antworten

29

Die clientseitige Validierung vermeidet nur, dass der Client "geht, aber ich habe das alles ausgefüllt und es hat mir nichts gesagt!". Es ist nicht wirklich verpflichtend, und in Wirklichkeit ist clientseitige Validierung eine sehr neue Sache (gelesen: 5 Jahre alt oder weniger). In der Praxis verhindert es lediglich, dass Ihr Client (mit JS aktiviert) vor dem erneuten Laden einer Seite weiß, ob das Formular in Ordnung ist. Wenn AJAX im Spiel ist, ist es anders - es erlaubt Ihnen, Bandbreite zu sparen und dem Benutzer Feedback zu geben, bevor Sie ihn einreichen. Schließlich, wenn Sie streng clientseitige Peer-to-Peer-Austausch-Apps (Think Games) entwickeln, sollten Sie eine clientseitige Validierung durchführen, um die Clients vor Betrug zu bewahren.

Die serverseitige Validierung ist auch deshalb wichtig, weil die clientseitige Validierung durch Abschalten von JavaScript vollständig umgangen werden kann. In gewisser Weise ist die JS-gesteuerte Validierung eine Annehmlichkeit und eine ästhetische / kosmetische Verbesserung und sollte nicht sein. Außerdem ist es trivial, die Quelle einer Seite lokal zu bearbeiten, um selbst die komplexeste JS-Validierung zu deaktivieren oder zu umgehen.

Was könnte ein Benutzer tun, wenn Sie nicht serverseitig validieren? Alles, abhängig davon, wie Sie Ihre Daten verwenden. Sie könnten Benutzern erlauben, ganze Datenbanken fallen zu lassen (oder noch schlimmer, sie zu verlieren), alles ändern, was sie wollen (oder noch schlimmer, alles lesen, was sie mögen. Fehler beim Durchlaufen von Verzeichnissen sind extrem häufige Einstiegspunkte für ungezogene Leute) und ihre Privilegien nach Belieben erweitern. Möchten Sie dieses Risiko eingehen? Nicht die Benutzereingaben zu validieren, ist wie Menschen zu vertrauen und keine Schlösser in Ihrem Haus zu installieren.

    
Sébastien Renauld 06.04.2013, 20:41
quelle
7

Validierung sollte immer serverseitig durchgeführt werden - Sie können der clientseitigen Validierung niemals vertrauen.

Clientseitige Validierung ist immer in dem Sinne, dass eine bessere User Experience (UX) bereitgestellt wird, so dass der Benutzer eine Seite nicht einfach übergeben und neu laden muss, weil ein Wert in einem Formular steht 't gültig - es macht die Dinge dynamischer.

Da Sie nicht einmal einen Browser benötigen, um Anfragen zu stellen, benötigen Sie unabhängig von Ihrer Website, die auf JS basiert, eine serverseitige Überprüfung und bereinigen alle Benutzereingaben für den Fall, dass Sie die Datenbanken nicht benötigen.

Nun liegt es an Ihnen, ob Sie eine Benutzeroberfläche mit dynamischen clientseitigen Validierungshinweisen bereitstellen möchten oder nicht.

    
Fabrício Matté 06.04.2013 20:45
quelle
2

Schützen Sie immer Ihre Eingaben auf dem Server . Es geht nicht immer darum, dass Benutzer JavaScript deaktiviert haben, sondern auch, dass sie den Server beschädigen könnten.

Wenn zum Beispiel eine Website eine maximale JavaScript-Länge für <input> hat, kann ein Benutzer diese Prüfung deaktivieren und dadurch mehr Daten senden, als Ihr Server und / oder Ihre Datenbank erwartet. Dies könnte den Server überladen, indem ein großer POST lange Zeit einen Serverthread belegt. Dies könnte eine Schwachstelle in der Datenbank offenlegen, die beispielsweise eine Datenbankeinschränkung verletzt, wodurch möglicherweise Details über Persistenzinformationen offengelegt werden. Schlimmer noch: Wenn es keine Einschränkung gibt, kann ein Benutzer Injektionsattacken ausführen.

Ein anderes Beispiel ist jemand, der ein externes HTTP-Tool verwendet, um Anfragen an Ihren Server zu senden, wobei JavaScript komplett umgangen wird. Ich verwende den erweiterten REST-Client für Chrome in der Entwicklungsphase, um JSON-APIs zu testen.

Die Validierung der Kundenseite durch JavaScript ist nur eine Möglichkeit, eine schnellere Rückmeldung an eine Person zu geben, die Informationen über ihre Interaktion mit der Website nutzt. In der traditionellen Client-Server-Kommunikation sollte nicht aus den oben genannten Gründen die einzige Validierung sein.

    
andyb 06.04.2013 20:51
quelle
1

Wenn ein Benutzer javascript deaktiviert hat, ist das ein Problem von sich selbst und er hat sich entschieden, das Javascript aus einem bestimmten Grund zu deaktivieren ... Dafür müssen Sie beim Erstellen einer Website immer daran denken, dass Ihre Website gültig sein muss Benutzer mit und ohne Javascript. Die Validierung beider Seiten wird aus verschiedenen Gründen benötigt. Einige davon sind:

  • Der Benutzer hat Javascript deaktiviert
  • Ein böser Benutzer hat das Javascript entfernt, um das System auszunutzen
  • Mit der Javascript-Validierung reduzieren Sie den Datenverkehr zwischen der Website und dem Client.
  • Und natürlich stellen Sie bei der Servervalidierung einmal sicher, dass die Daten korrekt sind

Es ist möglich, dass eine Website sowohl JavaScript als auch "ältere" Technologien verwendet, um für jeden Benutzer und jeden Browser gültig zu sein.

    
CodeArtist 06.04.2013 20:52
quelle
0

Die clientseitige Validierung ist eine Lösung für hochinteraktive Formulare mit sofortiger Feldvalidierung, verhindert jedoch nicht, dass ein böswilliger Benutzer ungültige formatierte Daten auf den Server injiziert und posten kann. Es ist wichtig, dass Ihr serverseitiges Skript alles validiert, was der Benutzer tut, andernfalls werden Sie Ihre Site SQL-Injection-Angriffen, XSS-Angriffen, Benutzern, die Dinge tun, die sie nicht tun sollten, usw. aussetzen.

    
Havenard 06.04.2013 20:45
quelle