2009-06-18 20 views
1

(Anmerkung: thesetwo Fragen sind ähnlich, aber präziser zu ASP.Net)Was ist der richtige Ort für die Validierung von Eingabedaten?

einen typischen Web-App mit einem Rich-Client-Betrachten (es ist Flex in meinem Fall), in dem Sie eine Form haben, zugrunde liegt ein Client-Logik, die die Eingabe des Formulars einem Datenmodell zuordnet, eine Möglichkeit, diese Objekte an eine Serverlogik zu übertragen, die sie normalerweise in einer Datenbank ablegt.

Wo sollte ich - allgemein gesprochen - die Validierungslogik setzen, d. e. das korrekte Format von E-Mail-Adressen, Nummern usw. sicherstellen?

  1. So früh wie möglich. Rich-Client-Frameworks wie Flex bieten eine integrierte Validator-Logik, mit der Sie direkt bei der Formularübermittlung validieren können, noch bevor sie Ihr Datenmodell erreicht. Dies ist nett und reaktionsschnell, aber wenn Sie etwas Erweiterbares entwickeln und die Validierung vor Programmierfehlern späterer Mitwirkender schützen soll, wird dies nicht verstanden.
  2. Im Datenmodell auf der Clientseite. Da dies die "offizielle" Darstellung Ihrer Daten ist und Sie bereits über Datentypen und Getter/Setter verfügen, erfasst diese Validierung Benutzerfehler und Programmierfehler von Personen, die Ihr System erweitern.
  3. Nach dem Empfang der Daten auf dem Server. Dies bietet zusätzlichen Schutz vor defekten oder böswilligen Clients, die später dem System beitreten können. Dies gibt Ihnen auch in einem Multi-Client-Szenario eine autorisierende Quelle der Validierung.
  4. Kurz bevor Sie die Daten im Backend speichern. Dies schließt den Schutz vor allen Fehlern ein, die irgendwo in der Kette gemacht werden (außer der Speicherlogik selbst), aber es kann erfordern, dass der Fehler den ganzen Weg zurückgespuckt wird.

Ich bin irgendwie in Richtung auf die Verwendung von 2 und 4, wie ich eine Anwendung erstellen, die verschiedene Punkte der potenziellen Erweiterung von Dritten hat. Die Verwendung von 2 zusätzlich zu 4 mag überflüssig erscheinen, aber ich denke, dass es die Client-App benutzerfreundlicher macht, da es keinen Roundtrip zum Server erfordert, um zu sehen, ob die Daten in Ordnung sind. Was ist dein Ansatz?

Antwort

1

Ohne zu spezifisch zu bekommen, ich denke, es sollte Validierungen aus den folgenden Gründen:

  1. der Benutzer wissen lassen, dass die Eingabe in irgendeiner Weise falsch ist.
  2. Schützen Sie das System vor Angriffen.

die Benutzer wissen zu lassen, dass einige Daten früh wäre freundlich falsch sind - zum Beispiel ein E-Mail-Eingabefeld einen roten Hintergrund haben kann, bis die @ Zeichen und ein Domain-Name eingegeben werden.Nur wenn eine E-Mail-Adresse dem Format in RFC 5321/5322 folgt, sollte das E-Mail-Feld grün werden und möglicherweise ein kleines Häkchen setzen, um dem Benutzer mitzuteilen, dass die E-Mail-Adresse gut aussieht.

Es ist auch hilfreich, den Benutzer darüber zu informieren, dass die bereitgestellten Informationen wahrscheinlich in gewisser Weise falsch sind. Fragen Sie beispielsweise den Benutzer, ob er oder sie wirklich den gleichen Empfänger zweimal für die gleiche E-Mail-Nachricht haben möchte.

Dann sollten die nächsten Prüfungen auf der Serverseite sein - und niemals davon ausgehen, dass die Daten, die durchkommen, wohlgeformt sind. Führen Sie Prüfungen durch, um sicherzustellen, dass die Daten fehlerfrei sind, und hüten Sie sich vor Angriffen.

Angenommen, der Client würde SQL-Injektionen vereiteln und blind Daten von Verbindungen zum Server akzeptieren, kann eine ernsthafte Sicherheitslücke sein. Wie erwähnt, könnte ein böswilliger Client, dessen einziger Zweck es ist, das System anzugreifen, leicht das System kompromittieren, wenn der Server zu vertrauenswürdig ist.

Und schließlich, was auch immer überprüft, um zu sehen, ob die Daten korrekt sind, und die Logik kann mit den Daten richtig umgehen. Wenn Probleme auftreten, benachrichtigen Sie den Benutzer über Probleme.

Ich denke, aus meiner Perspektive kommt es darauf an freundlich und defensiv zu sein.

+0

ziemlich perfekt :) Es erfüllt alle Web-Entwickler Teile meines Gehirns: D – jrharshath

+0

Danke für den Kommentar :) – coobird

1

Es gibt nur eine Regel, die mindestens eine Art Server Validierung wird mit immer (Nummer 3/4 in der Liste).

Client-Validierung (Nummer 2/1) macht den Benutzer Snapper und reduziert die Last (weil Sie nicht auf den Server-Zeug, die nicht Client-Validierung übergeben).

Eine wichtige Sache, darauf hinzuweisen ist, dass wenn Sie nur mit Client-Validierung gehen Sie ein großes Risiko sind (stellen Sie sich vor, wenn Ihre Client-Validierung auf Javascript beruht und Benutzer Javascript in ihrem Browser deaktivieren).

+3

Es gibt keine "geeigneten Maßnahmen", die Sie ohne Server-Validierung in einer Web-App vornehmen können. Sie haben keine Möglichkeit zu verhindern, dass jemand willkürlich manipulierte HTTP-Anfragen übermittelt. –

+0

Ich stimme zu - ich nahm das Stück zurück. – JohnIdol

0

Es sollte definitiv Validierung auf dem Server-Ende sein. Ich denke, dass die Validierung so früh wie möglich auf dem Server-Ende erfolgen sollte, so dass weniger Gefahr besteht, dass bösartige (oder falsche) Daten in das System gelangen.

Eingangsvalidierung auf Client-Seite ist hilfreich, da es die Schnittstelle schnapper macht, aber es gibt keine Garantie, dass die Daten auf dem Server durch die clientseitige Validierung übergeben wurden, daher MUSS die Validierung am Serverende erfolgen.

0

Wegen der Sicherheit eine Bequemlichkeit: Server-Seite und so früh wie möglich Aber was auch wichtig ist, ist einige globale Modell/Business-Logik-Validierung, wenn Sie zum Beispiel mehrere Formulare mit gemeinsamen Daten haben (zum Beispiel der Name der Produkt) sollte die Validierungsregel konsistent bleiben, sofern die Anforderungen nicht anders lauten.

Verwandte Themen