Mailinglisten-Archive |
Hallo Webmaster, Ich gehe mal davon aus, daß du das nur deshalb wissen willst, damit du dein eigenes Voting System besser schützen kannst. Ich hoffe,daß ich damit nicht dem falschen helfe ;-) Am Mon, 24 Jan 2000 schrieben Sie: > Wie schummelt Ihr bei PHP - Votings?? > Benutzt Ihr ein Formular, indem Ihr <option> Feld mit den IP's habt?? > Oder benutzt Ihr Spoofing - tools??? Vor einiger Zeit (auch im Archiv nachzulesen) gab es da mal eine Abstimmung zur besten Skriptsprache. Kristian Koehntopp hatte dazu mal ein bißchen was dazu geschieben und ein Skript gepostet. ************************************************************************** POSTING: > was ist denn das fuer ein voting system, dass dies zulaesst ?! Jedes. Du kannst keine fakesichere Abstimmung im Web realisieren, die nicht unfair berechtigte Abstimmende ausschließt. > da ich mir die seite nicht angeschaut habe (*g*), vermute ich mal, da ist > nichts mit ip speicherung oder cookie setzen oder so dabei gewesen, was > mehrfache abstimmung nicht mehr so einfach moeglich macht ... Die Seite nimmt Parameter per Post, prüft Referer und versucht einen Cookie zu setzen. Wer den Cookie hat, kann nicht mehr abstimmen. Man muß der Seite also die richtigen Parameter aus dem Formular mit einem Post füttern, darf den Referer nicht vergessen und darf den Cookie nicht annehmen. Das war alles. Eine bessere Absicherung wäre ein Formular, das als hidden- Parameter eine Challenge hat, die auch auf dem Server als Session-Variable verbleibt. Ein Abstimmungsergebnis wird dann für die aktuelle Session nur angenommen, wenn die richtige Challenge mit in den Parametern ist. Das macht das Faken per Script noch ein wenig schwieriger, aber nicht unmöglich (mit LWP in Perl oder libwww in C problemlos möglich, mit PHP3 ein wenig Gehampel mit preg_match_all()). Mit SSL-Browser-Zertifikaten auf der Clientseite wäre es noch schwieriger zu fälschen, aber da kommen wir langsam in Regionen, wo es für den Wahlveranstalter wirklich teuer wird. POSTINGENDE: ******************************************************************* kk_(at)_land:~ > cat post.php #! ./php -q <?php function PostToHost($host, $path, $referer, $data_to_send) { $fp = fsockopen($host,80); printf("Open!\n"); fputs($fp, "POST $path HTTP/1.1\n"); fputs($fp, "Host: $host\n"); fputs($fp, "Referer: $referer\n"); fputs($fp, "Content-type: application/x-www-form-urlencoded\n"); fputs($fp, "Content-length: ".strlen($data_to_send)."\n"); fputs($fp, "Connection: close\n\n"); fputs($fp, "$data_to_send\n"); printf("Sent!\n"); while(!feof($fp)) { $res .= fgets($fp, 128); } printf("Done!\n"); fclose($fp); return $res; } $data = "pid=14&poll_vote_number=2"; printf("Go!\n"); $x = PostToHost( "www.linux.com", "/polls/index.phtml", "http://www.linux.com/polls/index.phtml?pid=14", $data ); Greetinxx, Dominic
php::bar PHP Wiki - Listenarchive