phpbar.de logo

Mailinglisten-Archive

[php] Schummeln

[php] Schummeln

Dominic Paschke dominic.paschke_(at)_t-online.de
Mon, 24 Jan 2000 22:59:17 +0100


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