Frage

Ausgabe oder Eingabefilterung?

ich die Menschen ständig sehen zu schreiben „Filter, den Sie Eingänge“, „sanieren Ihre Eingaben“, nicht das Vertrauen von Benutzerdaten, aber ich stimme nur mit dem letzten, dem ich vertrauen, betrachten Sie alle externen Daten eine schlechte Idee, auch wenn es interne relativ zum System.

Eingabefilterung: Die häufigste, dass ich sehe. Nehmen Sie die Form Post-Daten oder andere externe Informationsquelle und einige Grenzen definieren, wenn es zu speichern, zum Beispiel dafür, dass Text Text, Zahlen sind Zahlen, dass SQL gültige SQL ist, dass html gültig html ist und dass es enthält keine schädlichen Markup, und speichern Sie die „sicheren“ Daten in der Datenbank.

Aber wenn Abrufen von Daten nur, um die Rohdaten aus der Datenbank verwenden.

In meiner persönlichen Meinung nach den Daten nie wirklich sicher. Obwohl es einfach klingt, nur Filter alles, was man von Formen und URLs erhalten, in Wirklichkeit schwieriger ist es viel als das, könnte es für eine Sprache sicher sein, aber nicht eine andere.

Ausgabe Filterung: Wenn es auf diese Weise spare ich den rohen unveränderten Daten zu tun, was immer es auch sein mag, mit vorbereiteten Anweisungen in die Datenbank und dann den problematischen Code herauszufiltern, wenn die Daten zugreifen, hat dies ist es eigenen Vorteile: Dies fügt eine Schicht zwischen HTML und der Server-Seite Skript. die ich für den Datenzugriff Trennung von Sorten sein.

Nun Daten gefiltert werden, abhängig vom Kontext, zum Beispiel ich die Daten aus der Datenbank in einem HTML-Dokument als Nur-escaped-Text oder als HTML oder als etwas überall vorgestellt habe.

Die Nachteile hier sind, dass Sie nicht immer müssen vergessen, die Filterung hinzuzufügen, die ein wenig härter als bei Eingabe Filterung und es wird ein bisschen mehr CPU, wenn Daten bereitstellt.

Dies bedeutet nicht, dass Sie nicht brauchen, Validierungsprüfungen zu tun, was Sie tun immer noch, es ist nur, dass Sie nicht speichern die gefilterten Daten, können Sie es zu validieren und bieten dem Benutzer eine Fehlermeldung, wenn die Daten irgendwie ist ungültig.

Also, anstatt zu gehen mit „filtern Sie Ihre Eingaben“ vielleicht sollte es sein, „Ihre Eingaben validieren, filtern Sie die Ausgänge“.

so soll ich mit „Input-Validierung und Filtern“ gehen oder „Input-Validierung und Ausgangsfilterung“?

War es hilfreich?

Lösung

Es gibt keine allgemeine „Filterung“ für die Eingabe und Ausgabe.

Überprüfen Sie Ihre Eingabe, escape Ausgabe aus. Wie Sie dies tun, auf Kontext abhängig ist.

Die Validierung ist darum, dass Eingang fällt in sensible Bereiche, wie die Länge der Saiten, die numericality von Dollar-Beträge oder dass ein Datensatz aktualisiert wird von dem Benutzer gehört die Durchführung der Aktualisierung. Hier geht es um die logische Konsistenz der Daten zu erhalten und Menschen, Dinge zu tun wie Nullstellung den Preis eines Produktes kaufen verhindern sie oder Löschen von Datensätzen sollten sie keinen Zugriff haben. Es hat nichts mit „Filterung“ oder entweichende bestimmte Zeichen in der Eingabe zu tun.

Escaping ist eine Frage des Kontextes, und nur dann wirklich sinnvoll, wenn Sie etwas mit den Daten tun, die durch die Injektion von bestimmten Zeichen vergiftet werden kann. Entfliehen Sie HTML-Zeichen in Daten, die Sie an den Browser senden. Entfliehen SQL Zeichen in Daten, die Sie an die Datenbank senden. Entfliehen Sie Anführungszeichen, wenn Sie Daten in JavaScript <script> Tags zu schreiben. Seien Sie einfach bewusst, wie die Daten, die Sie zu tun haben wird vom System interpretiert werden Sie vorbei, es zu und die Flucht entsprechend.

Andere Tipps

Die beste Lösung ist sowohl zu filtern. Doing nur einer macht es wahrscheinlicher, dass Sie einen Fall verpassen, und lassen Sie können auf andere Arten von Angriffen zu öffnen.

Wenn Sie nur Eingangsfilterung zu tun, kann ein Angreifer eine Art und Weise zu umgehen Ihre Eingaben finden und die Ursache einer Schwachstelle. Dies könnte jemand mit Zugriff auf Ihre Datenbank, Daten manuell einzugeben, es könnte ein Angreifer eine Datei über FTP oder einen anderen Kanal hochzuladen, die nicht aktiviert ist, oder viele andere Methoden.

Wenn Sie nur Ausgangsfilterung tun, können Sie sich auf SQL-Injection und anderen Serverseite Angriffe offen lassen.

Die beste Methode ist sowohl Ihre Ein- und Ausgänge zu filtern. Es kann mehr Last verursachen, sondern reduziert das Risiko, dass ein Angreifer eine Schwachstelle zu finden.

Sounds wie Semantik zu mir. So oder so die wichtige Sache zu erinnern ist, dass schlechte Daten zu machen, nicht im System.

Ausgang Doing Filterung statt Eingangsfilterung für eine SQL-Injection zu stellen.

alt text

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top