phpbar.de logo

Mailinglisten-Archive

[php] Verbindung überprüfen

[php] Verbindung überprüfen

Yannik Hampe yannik at cipher-code.de
Don Jul 26 01:58:50 CEST 2007



Sven Geßner wrote:
> Hallo Mitleser,
> 
> da mal wieder jemand probiert hat mein Mailformular zu missbrauchen
> möchte ich es sicherer gestallten, allerdings möchte ich auf Captca
> verzichten.
> 
> Hintergrund
> 
> Die mitgeloggte IP vom Server und vom Formular wurde bei den
> Missbrauchversuch gefakt. Die geloggte IP kam vom einem Proxyserver
> der zu dieser Zeit offline war.
> 
> Gibt es mittels PHP eine Möglichkeit zu überprüfen ob die IP die der
> Client sendet auch zu dem Client gehört? Eigentlich ist es dem
> HTTP-Protokoll ja egal welche IP die Seite anfragt...
> 
> Ein einfacher Ping würde kein sinnvolles ergebnis bringen, nur ggf.
> ein Handshake. Geht das mittels PHP??
> 
> Geht das irgendwie?? Vorallem auch ohne SSL..

Wir bewegen uns hier an der Stelle, wo mein Wissen aufhört, aber mein 
Interesse ist geweckt und mich würden auch mal die Hintergründe 
interessieren:

1. Wie fakt man seine IP? http läuft über eine tcp-Verbindung, die 
(meines wissens) eine eine stehende Verbindung vorraussetzt und somit 
beide Verbindungenspartner sich gegenseitig korrekt können müssen.
Ist es möglich eine Verbindung aufzubauen und einen http-header an den 
Server zu senden, bevor der Server auf tcp-Ebene merkt, dass sein 
Gegenüber mit seiner Antwort nichts anfangen kann, weil die IP garnicht 
existiert, an die er versucht zu antworten?

Wenn dies so ist, dann schlage ich vor du sorgst einfach dafür, dass die 
Verbindung verifiziert wird:
ob_end_clean(); //sicherstellen, dass kein Kompressionsdingens läuft, 
der das Ergebnis buffern würde und daher nicht unbedingt zum ergebnis kommt.
print("\n"); //etwas raussenden
flush(); //sicherstellen, dass die der Text auch an den client gesendet 
wird. Dann verifiziert php nämlich die Verbindung
if (connection_aborted()) exit("Hacking attempt"); //und ab damit

Es gibt leider immernoch eine Reihe Sachen, die dabei schief gehen 
können. Zum Beispiel wenn die Konfiguration deines Webservers dabei 
nicht mitmacht (weil der was buffered), aber das kann man ja wenigstens 
testen.

Ausserdem hast du möglicherweise ein Problem mit http1.0 Verbindungen, 
weil es hier noch keine chunked transfers gibt und das im Zweifelsfalls 
den Webserver dazu zwingt zu buffern. Du müsstest daher alles, was nicht 
http1.1 ist ausschliessen (sollte aber mittlerweile alles sein).

Eine ganz alternative Lösung wäre es, wenn du die email erstmal nur in 
einer temporären Datei oder in einer DB speicherst mit einer zufälligen 
id als Schlüssel (ähnlich sessionid).
Dann Leitest du den browser einfach per
header("Location=absenden.php?mid=$mid");
sofort auf eine weitere Seite weiter, die dann erst anhand des 
zufälligen Schlüssels $mid die email abschickt.
> 
> Danke für euro Antworten und Hilfestellungen.
> 
> Grüße, Sven Geßner
> 
> P.S.: Nicht sauer sein wenn ich verzögert Antworte, bin derzeit nicht
> so oft online...

Yannik

php::bar PHP Wiki   -   Listenarchive