IP Adresse SQL-injection
Ist es möglich für einen Benutzer zu fälschen das Ergebnis, das zurückgegeben wird, von $_SERVER['REMOTE_ADDR']
in PHP, so dass Sie könnte in der Theorie die Verwendung von SQL-injection auf einer Datenbank?
Dies ist ein bisschen dumm, aber ich bin noch neu genug, um PHP, ich möchte wissen, ob es getan werden kann, ob oder ob nicht muss ich zur Bereinigung von Datenbank-input, wenn der SELECT
- Anweisung wählt aus der IP-Adressen zurückgegeben, die von $_SERVER['REMOTE_ADDR']
. Also, wenn ich wollte, etwas zu verwenden, wie $query = "SELECT * FROM users WHERE IP='" . $_SERVER['REMOTE_ADDR'] . "'";
, würde es eine Gefahr für mein tun?
Wieder, wahrscheinlich ein "nooby" Frage, aber ich habe das Gefühl es muss gefragt werden.
Dank
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist eine Strecke, und unwahrscheinlich, aber ich würde nicht so weit gehen, zu sagen, es ist unmöglich. So....
Verwendung von parametrisierten Abfragen sowieso.
Selbst wenn Sie nie angegriffen, die über das Feld IP-Adresse, erhalten Sie noch den zusätzlichen Vorteil, schneller queries durch Zwischenspeicherung.
Können Sie sich nicht darauf verlassen, dass REMOTE_ADDR wahr... es könnte die falsche Adresse wegen anonymising Proxys oder einige solcher trick. Sie kann darauf verlassen, dass es immer eine IP-Adresse, so dass SQL-injection durch diesen Weg ist unmöglich.
Weg nach unten am unteren Rand der Stapel, das ist umgewandelt worden von der Quell-Adresse der Pakete, die die Herstellung der TCP-Verbindung zu Ihrem server. Das bedeutet, dass a) es muss eine IP-Adresse und b) hat er die route zurück an den client für die Verbindung sein.
Ich denke, die einzige Möglichkeit für jemanden zu Schmieden
$_SERVER['REMOTE_ADDR']
wäre, zu konstruieren, ein IP-Paket mit einer gefälschten IP-Adresse (weil es durch den server, nicht den client), in welchem Fall Maßnahmen zurückgeleitet werden, um die gefälschte Adresse. Wenn Sie besorgt sind injection-Angriffe, ich glaube, du bist ok, weil die Adress-Felder in IP-Pakete, die nur noch Platz für Adressen.Immer desinfizieren Sie alle externen Eingänge - verwenden Sie
mysql_real_escape_string
oder besser noch, prepared statementsKönnte man unter Verwendung der PHP-Daten-Filter-Funktionen.
filter_var() mit FILTER_VALIDATE_IP überprüft, ob die remote-IP. Wenn die remote-IP gültig ist, verwenden Sie es in SQL.
EDIT: filter_input() mit INPUT_SERVER ist eine weitere option 😉
http://www.php.net/manual/en/book.filter.php
http://www.php.net/manual/en/filter.filters.validate.php
http://www.php.net/manual/en/function.filter-var.php
http://www.php.net/manual/en/function.filter-input.php
Hoffe, das hilft,
Simeon
REMOTE_ADDR nicht vom client geschickt, es ist vom server gesetzt. Es ist zwar technisch möglich, fälschen einer IP-Adresse auf die Netzwerk-Ebene, der Angreifer hat zu arbeiten blind. Der schwierigste Teil ist zu raten, die Sequenz-Nummer. (Unter Coldfusion, durch die Art und Weise, es ist eine andere Geschichte.)
Wie schon andere gesagt haben, verwenden Sie vorbereitete Anweisungen, und Sie nicht brauchen, um über SQL-injection (obwohl andere Arten von injection-Angriffe sind möglich).
Ich immer diesen code in alle meine Projekte (erste Eingabe-Bereinigung), um zu verhindern, dass etwas böses mit Fake-IPs geht.
Ich bin mir nicht sicher ob Sie fake die REMOTE_ADDR sowieso.
# wtf?
brachte mich zum lachenFür Effizienz und Sicherheit, die Sie speichern möchten können und die Arbeit mit IPs-als int-Werte in Ihrer Datenbank.
Die einfache Möglichkeit zum speichern von IP-Adressen ist die Verwendung der varchar-Feld in deiner DB. Jedoch ein anderer Weg zum darstellen von IPs ist als eine ganze Zahl. Die Konvertierung der angegebenen IP auf diese Weise bereinigen, und auch Ihre Speicherung und Abfragen effizienter. Die Speicherung eines INT-nimmt weniger Platz in einer DB, und funktioniert besser für die Indizierung, und ich glaube, query-caching.
Check-out ip2long und long2ip für PHP-Funktionen zu konvertieren, und inet_aton und inet_ntoa es in MySQL.
So, könnte der Prozess gehen wie
Können Sie auch desinfizieren, eine IP und halten Sie es in der original-dotted-quad form durch die Kombination der beiden