Was ist der richtige Weg, um web-Formular eingegebenen Daten sicher für eine Vielzahl von Kontexten?
Was tun Sie alle denken, ist der richtige (lies: die meisten flexible, lose gekoppelte, robuste, etc.) Weg, um Benutzer-input aus dem web sicher für den Einsatz in verschiedenen teilen einer web-Anwendung? Natürlich können wir nur die Verwendung des entsprechenden Bereinigung Funktionen für jeden Kontext (Datenbank, Anzeige am Bildschirm, das speichern auf der Festplatte, etc.), aber gibt es einige Allgemeine "Muster" für den Umgang mit unsicheren Daten und machen es sicher? Gibt es eine anerkannte Möglichkeit zur Durchsetzung der Behandlung von es als unsicher, es sei denn es ist richtig sicher gemacht?
- Ich bin besonders daran interessiert, dass die Daten sicher für die Verwendung innerhalb der Anwendung, nachdem es bereits vergangen ist, durch eine einfache Validierung-Schicht, prüft das Allgemeine format der Antwort aber nicht suchen sagen, SQL-injection oder anderen Bedrohungen. Im Grunde Möglichkeiten, um die Daten zu verarbeiten, die nicht erheblich destruktiven Verhaltens, durch das Programm.
- Ich hatte im Hinterkopf, etwas entlang der Linien von: User input bekommen könnte, eingehüllt in eine Art wrapper, der verhindert, dass code von der Verwendung in unsicherer Weise. Dieser Eingang kann dann müssen ausgepackt werden, in einer bestimmten Weise, die macht es schwierig für jemanden, der UNWISSENTLICH etwas unsicher mit ihm. Den code mit würde es brauchen, um sicherzustellen, dass es gemacht wurde, sicher für die Verwendung in Zusammenhang mit der code vor der Verwendung. Gibt es etwas wie diese, die hergestellt wurde?
- Sie erwähnen an einer Stelle, dass Sie etwas breit und flexibel und an einer anderen Stelle, dass Sie sich eine Rahmen des möglichen. So dass Sie nicht wollen, eine einfache Lösung im Sinne von "Sie tun dies, wird eines Peeling der Eingang" so viel wie "dies zu tun, wird eines trigger 10 andere Dinge automatisch, die wird Peeling Eingang", ist das richtig? Ich versuche nicht zu frech, ich bin nur nicht sicher, ob Sie sich für eine Methode oder ein Werkzeug. Mehr zu kommen...
- Die andere Sache, die mich verwirrend ist, was Sie im Sinn haben, indem Sie sichere. Alle Vorträge beiseite, dein Kommentar oben ist ein bisschen unscharf. Sie wollen etwas zu wickeln Sie die Eingabe (die macht Sinn und ist ein guter Weg, es zu setzen), aber wer sind Sie letztlich versuchen zu schützen durch das einwickeln und Auspacken der Daten? Sind Sie vermeiden wollen, dass SQL-injection? Ungewollte Abfragen? XSS? oder bösartige browser-side-Ausgang?
- Anthony ja, Sie sind richtig, dass ich nicht wollen "eine Sache Gestrüpp der Eingang", sondern "eine Sache zu tun auslösen wird, 10 andere Dinge, die automatisch bewegen Sie den Eingang". Das würde davon abhängen, wie die Informationen verwendet wird, und so weiter. Soweit das, was ich bin versucht zu halten, sicher sein, alle die oben und nichts anderes. Ich dachte, es könnte einige etablierte Art und Weise zur Verhinderung von Daten aus nicht ordnungsgemäß verwendet, aber wo sich die Möglichkeit zu lassen es ordnungsgemäß verwendet werden. Wenn nicht, dann ist das eine Antwort auf meine Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie es bereits gesagt wurde, gibt es einige Dinge zu berücksichtigen, wenn Sie sind besorgt über web-Sicherheit. Hier sind einige grundlegende Prinzipien zu berücksichtigen:
So bedeutet dies nicht haben, so etwas wie
$variable = $_POST['user_input']
. Für jede situation, wie diese, Sie sind die übergabe zu viel Kontrolle für den Benutzer. Wenn die Eingabe wirkt sich auf einige Datenbank-Abfrage, immer whitelists, um Benutzereingaben zu überprüfen vor. Wenn die Abfrage nach einem Benutzernamen, einer Validierung gegen eine Liste von guten user-Namen. NICHT einfach eine Abfrage mit der Eingabe des Benutzers gelöscht sind.Eine (mögliche) Ausnahme für einen such-string. In diesem Fall müssen Sie zu bereinigen, so einfach ist das.
Ist, wenn der Nutzer durch das erstellen eines Profils oder das hochladen von Informationen für andere Benutzer, müssen Sie entweder eine white-list, welche Art von Daten ist akzeptabel, oder Streifen Sie alles, was schädlich sein kann. Dies ist nicht nur für Ihr system ' s Sicherheit, aber für die anderen Benutzer (Siehe nächsten Punkt).
Dies ist wahrscheinlich die wichtigste Sache, die Sicherheits-Berater haben, betonte mir. Können Sie nicht einfach verlassen sich auf die Desinfektion der Eingang, wenn es empfangen wird, durch den Benutzer. Wenn Sie nicht schreiben die Ausgabe selbst, immer sicher, dass der Ausgang ist harmlos, indem Sie jede Codierung von HTML-Zeichen oder wickelte Sie in ein
<plaintext>
tag. Es ist einfacher Fahrlässigkeit seitens der Entwickler, wenn Benutzer A lädt ein bisschen javascript, das schadet jedem anderen Nutzern, die Ansicht dieser Seite. Sie werden nachts besser schlafen zu wissen, dass alle Benutzer die Ausgabe kann nichts tun, sondern erscheinen als text auf allen Browsern.XSS ist einfacher, als es sein sollte, und eine echte Schmerzen zu bedecken, in einen Absatz. Einfach ausgedrückt, wenn Sie ein Formular erstellen, geben Sie die Benutzer Zugang zu einem Skript verarbeitet Daten in das Formular. Wenn ich Stehle jemandem die Sitzung oder jemand cookie, ich kann jetzt sprechen Sie das Skript so, als wenn ich auf der Formular-Seite. Ich weiß, die Art der Daten, die er erwartet und die Variablen-Namen sucht. Ich kann Sie einfach übergeben Sie die Variablen als ob ich die user und das script kann nicht sagen, der Unterschied.
Oben ist nicht eine Frage der Hygiene, sondern der Benutzer-Validierung. Mein letzter Punkt bezieht sich direkt auf diese Idee.
Wenn ich stehlen kann ein Benutzer das cookie, ich kann in der Lage sein, mehr zu tun, als zu machen, dass ein user einen schlechten Tag. Wenn ich Bemerke, dass der cookie hat einen Wert namens "member" kann ich ganz leicht ändern Sie diesen Wert auf "admin". Vielleicht funktioniert es nicht, aber für die vielen Skripte, hätte ich sofortigen Zugriff auf alle admin-level info.
Einfach ausgedrückt, es ist nicht eine einfache Möglichkeit zum sichern einer web-form, aber es gibt grundlegende Prinzipien, die, was Sie tun sollten, und so verringert den stress der Sicherheit Ihres scripts.
Einmal mehr für eine gute Maßnahme:
Und nie davon ausgehen, dass eine person auf der Liste ist vollständig oder perfekt zu sein.
Ich bin mehr als nur ein wenig skeptisch, dass so ein Allzweck-framework können beide existieren und weniger Komplex sein als eine Programmiersprache.
Die definition von "sicher" ist so unterschiedlich zwischen den verschiedenen Ebenen
Beachten Sie auch die Aktionen, wenn Verstöße entdeckt werden.
Vielleicht fehlt mir Ihre vision? Haben Sie gesehen, alles, was nahe kommt, was Sie im Sinn haben?
Können Sie nicht verwenden, eine einheitliche Methode zur Bereinigung von Daten für alle verwendet, aber ein guter Anfang ist:
Filter Var nimmt eine Reihe von verschiedenen Arten von Daten, die Streifen und schlechte Charaktere (wie bei nicht-Ziffern für die Dinge, die Sie erwarten, zu zahlen), und macht sicher, es ist der gültige format (IP-Adressen).
Hinweis: die E-Mail-Adressen sind viel komplizierter als die Filter_Var-Implementierung, so Google, um für die ordnungsgemäße Funktion.
Ich würde nicht empfehlen dies, bis Sie Eingang Zeug in eine Datenbank, und es ist wahrscheinlich besser, verwenden Sie einfach vorbereitet mysqli-Anweisungen sowieso.