php cookie-injection-Schwachstelle?
Ich habe eine website, auf der einen Seite liest es ein cookie auf dem computer des Benutzers und verwendet, dass als variable im php-code, zum Beispiel in der echo-Statements.
Ich bin momentan nicht Reinigung, das Kochen keiner Weise.
2 Fragen:
-
kann jemand hack Ihre cookie zu setzen, das Zeugs in mein php-code?
-
wenn ja, wie kann ich dies verhindern? WIE kann ich Sie reinigen?
Dank!
- Zeigen Sie uns einige code auf, wie Sie Ihre cookies.
- Vertrauen Sie nicht cookies. Sie sind sehr einfach zu Bearbeiten. Immer überprüfen Sie Ihre Inhalte, bevor Sie Sie verwenden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ja, könnte man sehr leicht ausnutzen dieser je nachdem, wie es im code verwendet. Man könnte zum Beispiel, Schmieden die gesamte Anfrage und bieten jeden gewünschten Wert für das cookie.
Die Frage, wie dies zu verhindern ist, hängt davon ab, welche Werte Sie erwarten, dass das cookie enthalten. Alles, was Sie tun müssen, ist sicherzustellen, dass der Wert des cookie passt innerhalb Ihrer Spezifikation. Ohne zu wissen, was diese Angabe ist oder wie der Wert verwendet wird, gibt es nicht viel mehr zu sagen.
Ja, es ist sehr einfach zu Bearbeiten, die cookies auf dem client.Sie behandeln soll, die die Werte des cookies wie alle anderen user generated input: Vertrauen Sie nicht es und überprüfen es.
Wenn Sie nur
echoing
den Keks, dann die Schwachstelle, die der Benutzer explodieren kann, heißt "XSS", das steht für Cross-Site-Scripting. Im Grunde würde er einfügen<script>
- tags in der website, um javascript auszuführen.Dies können Sie verhindern, indem Sie die Funktion strip_tags in php zu reinigen-tags aus dem cookie.
Wenn Sie die Verwendung der Cookies in anderer Weise könnten sich neue Fragen der Sicherheit, bitte geben Sie, wenn das der Fall ist.
Strip_tags schützt Sie nicht davor, gehackt zu werden, noch macht es Streifen XSS. Es nur Streifen die HTML-und Sie brauchen keine HTML auf XSS eine Website.
So Leute gepostet haben ein cookie ist super einfach zu manipulieren, auf der client-Seite. Es ist im Grunde nur eine text-Datei. Wenn du nur echo und verlassen Sie sich nicht auf die Daten in dem cookie für db-Aufrufe, Funktionsaufrufen oder Datei enthält, die Sie pribably brauchen nicht zu kümmern, weil der Benutzer nur auf das, was die gezeigten auf seiner lokalen Maschine. Auf öffentlichen Computern, das könnte natürlich ein problem sein.
Wenn Sie möchten mehr Kontrolle behandeln Sie die Daten mittels Server-Side-sessions. Oder wenn Sie wirklich brauchen, die Daten im cookie, speichert einen hash des cookue Werte serverside so können Sie bestimmen, ob es bern manipuliert
Das problem nicht in der Eingabe per se, es ist, wie Sie ausgegeben werden. Wenn Sie
echo
es direkt in eine HTML-Seite, dann müssen Sie HTML-codieren; das stimmt alle Zeichenfolgen, die Sie in einer HTML-Seite, nicht nur cookies. Wenn Sie als eine Gewohnheit, die Ausgabe nicht korrekt codierten strings in HTML dann haben Sie wahrscheinlich viel einfacher zu nutzen XSS-bugs als das(*).Dem Weg zu handle-variable text richtig für die Ausgabe in HTML ist, wickeln Sie jede variable im
htmlspecialchars()
an der Stelle, die Sie echo in HTML (nicht als input-handling-Schritt). Verwenden Sie nichtstrip_tags()
—es ist nicht konzipiert als eine Sicherheitsmaßnahme, und es kann in einer Vielzahl von Umständen. Wenn Sie brauchen, um zu akzeptieren begrenzte user-Eingabe-markup verwenden Sie eine HTML purifier Bibliothek.(*: wie ausnutzbare eine HTML-Injektion-von-cookie ist, hängt weitgehend davon ab, wie das cookie wird gesetzt. Wenn es irgendeinen Weg gibt, wird ein Angreifer davon überzeugen können, Ihre Anwendung legen Sie das cookie eines anderen Benutzers auf einen bestimmten Wert, werden leicht ausgenutzt; sonst, zu nutzen, um die HTML-injection-hätten Sie die "cookie" -Fixierung bug. Das könnte ein header-injection-bug in Ihrer app, oder es könnte einer anfälligen Anwendung in einem "Nachbar-domain'—eine Anwendung auf
a.example.com
kann ein cookie gesetzt werden Lesen durch eine Anwendung inb.example.com
.)