Wie andere gesagt haben, sollten Sie beides tun. Hier ist der Grund:
Client-Seite
Sie möchten zuerst die Eingabe auf der Clientseite überprüfen, da Sie dem durchschnittlichen Benutzer ein besseres Feedback geben können . Wenn sie beispielsweise eine ungültige E-Mail-Adresse eingeben und zum nächsten Feld wechseln, können Sie sofort eine Fehlermeldung anzeigen. Auf diese Weise kann der Benutzer jedes Feld korrigieren, bevor er das Formular sendet.
Wenn Sie nur auf dem Server validieren, müssen sie das Formular senden, eine Fehlermeldung erhalten und versuchen, das Problem zu beheben.
(Dieser Schmerz kann gelindert werden, indem der Server das Formular mit der ursprünglichen Eingabe des Benutzers erneut rendert. Die clientseitige Validierung ist jedoch immer noch schneller.)
Serverseite
Sie möchten auf der Serverseite validieren, da Sie sich vor böswilligen Benutzern schützen können , die Ihr JavaScript leicht umgehen und gefährliche Eingaben an den Server senden können.
Es ist sehr gefährlich, Ihrer Benutzeroberfläche zu vertrauen. Sie können nicht nur Ihre Benutzeroberfläche missbrauchen, sondern auch Ihre Benutzeroberfläche oder sogar einen Browser überhaupt nicht verwenden . Was passiert, wenn der Benutzer die URL manuell bearbeitet, sein eigenes Javascript ausführt oder seine HTTP-Anforderungen mit einem anderen Tool optimiert? Was ist, wenn sie beispielsweise benutzerdefinierte HTTP-Anforderungen von curl
oder aus einem Skript senden ?
( Dies ist nicht theoretisch. Ich habe beispielsweise an einer Reisesuchmaschine gearbeitet, bei der die Suche des Benutzers erneut an viele Partnerfluggesellschaften, Busunternehmen usw. gesendet wurde, indem POST
Anfragen gesendet wurden, als hätte der Benutzer das Suchformular jedes Unternehmens ausgefüllt, dann gesammelt und sortiert Alle Ergebnisse. Das Formular JS dieser Unternehmen wurde nie ausgeführt, und es war für uns von entscheidender Bedeutung, dass sie Fehlermeldungen im zurückgegebenen HTML-Code bereitstellen. Natürlich wäre eine API nett gewesen, aber das mussten wir tun. )
Dies nicht zu berücksichtigen ist nicht nur aus Sicherheitsgründen naiv, sondern auch nicht standardisiert: Ein Client sollte HTTP mit allen gewünschten Mitteln senden dürfen, und Sie sollten korrekt reagieren. Das schließt die Validierung ein.
Die serverseitige Validierung ist auch wichtig für die Kompatibilität. Nicht für alle Benutzer, auch wenn sie einen Browser verwenden, ist JavaScript aktiviert.
Nachtrag - Dezember 2016
Es gibt einige Überprüfungen, die im serverseitigen Anwendungscode nicht einmal ordnungsgemäß durchgeführt werden können und im clientseitigen Code überhaupt nicht möglich sind , da sie vom aktuellen Status der Datenbank abhängen. Beispiel: "Niemand hat diesen Benutzernamen registriert" oder "Der Blog-Beitrag, den Sie kommentieren, ist noch vorhanden" oder "Keine vorhandene Reservierung überschneidet sich mit den von Ihnen angeforderten Daten" oder "Ihr Kontostand reicht noch aus, um diesen Kauf abzudecken . " Nur die Datenbank kann Daten zuverlässig validieren, die von verwandten Daten abhängen. Entwickler vermasseln dies regelmäßig , aber PostgreSQL bietet einige gute Lösungen .