2016-07-30 13 views
0

Ich frage, ob es erforderlich ist, Felder wie req.ip oder req.path serverseitig zu validieren.
Es läuft auf die Frage hinaus: Ist es möglich, dass der Client so etwas wie .set('Remote-Addr', <Malicious JavaScript>) setzt und erfolgreich an meine Node oder Express Middleware weitergegeben wird?Bestätigen Knoten und Express bestimmte Anfragefelder?

Vielen Dank für Ihre Hilfe!

+0

Nun, Sie sollten nicht eine 'eval (req.ip)' tun, wenn das ist, worüber Sie sich wundern. Aber die Verwendung der Zeichenkette in req.ip als nur eine Zeichenkette sollte sicher sein Es gibt viele Möglichkeiten für einen Client, ihre echte IP (zB Proxies) zu fälschen, so dass Sie niemals annehmen können, dass "req.ip" die eigentliche Client-IP und dort ist ist es für Express/Node nicht möglich, die tatsächliche Client-IP zu validieren. – jfriend00

+0

Danke für den Kommentar. Das bösartige Javascript war nur ein Beispiel. Der konkrete Anwendungsfall besteht darin, dass wir die IP in einer Datenbank protokollieren und sicherstellen möchten, dass nur gültige IPs eingefügt werden. Also von Ihrem Beispiel nehme ich an, dass Express und Knoten beide die Anfragefelder nicht validieren, richtig? – FunkyPeanut

+0

Es gibt keine Möglichkeit, Quell-IP zu validieren, insbesondere wenn es sich um Proxies handelt. Im Proxy-Fall soll eine Kette von IP-Adressen in HTTP-Header eingefügt werden, aber das kann sicherlich gefälscht werden, also was denkt, dass die ursprüngliche IP nicht vertrauenswürdig ist. Es ist wahrscheinlich genau, aber nicht garantiert genau. – jfriend00

Antwort

0

Es gibt keine Möglichkeit, die Quell-IP zu validieren, insbesondere wenn es sich um Proxies handelt. Im Proxy-Fall soll eine Kette von IP-Adressen in HTTP-Header eingefügt werden, aber das kann sicherlich gefälscht werden, also was denkt, dass die ursprüngliche IP nicht vertrauenswürdig ist. Es ist wahrscheinlich genau, aber nicht garantiert genau.

req.path ist vollständig lokal und enthält keine Client-Header und unterliegt keinem Client-Spoofing. Es kommt nur von der tatsächlichen HTTP-Anfrage-URL, die auf Ihrem Server ankommt. Die einzige Möglichkeit, die nicht mit der tatsächlichen Anforderungs-URL übereinstimmt, ist, wenn Sie einen Einhängepunkt für Router verwenden. In diesem Fall wurde der Einhängepunkt-Teil des Pfades per Express entfernt. Oder vielleicht, wenn Ihre eigene Middleware versucht hat, sich damit anzulegen.

+0

Vielen Dank. Du hast natürlich vollkommen recht und ich hätte in meiner Frage deutlicher werden sollen. Es geht nicht darum, die Semantik hinter der IP-Information (d. H. Ob sie korrekt ist) zu validieren, sondern ihre formale Repräsentation, da wir diese in die Datenbank einschreiben. Zum Beispiel: Jemand manipuliert den IP-Header, um etwas JavaScript zu enthalten. Wir speichern es in der Datenbank und geben es später (unter der Annahme der Integrität unserer Datenbank) an den Browser aus, wo es ausgeführt wird. Ihre Notizen über 'req.path' waren hilfreich. Vielen Dank. Und da du indirekt meine Frage in den Kommentaren beantwortet hast, werde ich das als Antwort markieren. – FunkyPeanut

+1

@FunkyPeanut - Wenn Sie diesen tatsächlichen Anwendungsfall (Einfügen der IP-Adresse zurück in eine Webseite) in Ihre Frage einfügen, hätten Sie eine viel gezieltere Antwort bekommen. Bitte beschreiben Sie immer das eigentliche Problem, anstatt die Frage generisch zu machen. Wir sind so viel zielführender, wenn Sie das Problem beschreiben, um das Sie sich Sorgen machen. – jfriend00

+0

Sie haben absolut Recht. Ich werde es mir merken, danke. – FunkyPeanut