fastix®: Spamming Attacken

Beitrag lesen

Moin!

Nächste Variante: Ein Ticket-System mit Dateiablage. Das geht so ähnlich wie mit Cookies, sind aber keine: das bedeutet, er muss raten dass er in ticket nichts ändern darf.

In der Seite, die das Formular erzeugt/anzeigt:

<?php

Ticket- Verzeichnis clearen

$handle=opendir('./tmp');
$livetime=30; # Minuten
while ($filename = readdir ($handle)) {
   if ($filename != "." && $filename != ".." && $filename != "check.php") {
  if  ( ((time()/60-filemtime('./tmp/'.$filename)/60)) > $livetime ) {
               unlink("./tmp/$filename");
  }
   }
}
closedir($handle);

Ticket erzeugen

$filename=md5($_SERVER['REMOTE_ADDR']."_".microtime());
$FILE=fopen("tmp/$filename","a") or die ("Fatal: tmp/$filename konnte nicht geöffnet werden." );
fwrite($FILE,' ');
fclose($FILE);
?>
<form action="mailsenden.php" method="POST">
<input type="text" style="display:none" name="ticket" value="<? echo $filename; ?>">
...

mailsenden.php:

Ticket- Verzeichnis clearen

$handle=opendir('./tmp');
$livetime=30; # Minuten
while ($filename = readdir ($handle)) {
   if ($filename != "." && $filename != ".." && $filename != "check.php") {
  if  ( ((time()/60-filemtime('./tmp/'.$filename)/60)) > $livetime ) {
        unlink("./tmp/$filename");
  }
   }
}
closedir($handle);

testen des Tickets:

Sicherheitsmaßnahme: md5 erzeugt nur alphanumerisches:

$filename   = "tmp/".eregi_replace('[[1]]','', $_POST['ticket']);

Ohne diese könnten beliebige Dateien gelöscht werden!

$FILE       = fopen($filename,"r+") or die("Ups. Die Zeit, die Ihr Ticket für den Mailversand galt, ist leider abgelaufen. Bitte benutzen Sie die Zurücktaste Ihres Browser und laden Sie dann die Seite neu.<br>Leider müssen solche Maßnahmen vorgenommen werden um Spammer, welche notorisch versuchen diesen Dienst zu missbrauchen, abzuwehren. Sorry!");
fclose($FILE);
unlink($filename);

Und noch etwas zu verbessern:

Moin!

header("HTTP/1.1 301 Moved Permanently");

header("Location: http://127.205.107.112/you_have_unsafe_and_missused_skripts_on_your_server");

Das ist eine IP des lokalen Klasse-A Netzwerkes auf jedem Rechner selbst

Seine Software wird also womöglich_ den Zombie mit dem Request beglücken.

header("Connection: close");
exit; # nicht vergessen, sonst wird das Skript womöglich weiter abgearbeitet.

Ich denke, das ist die beste Idee, das solltest Du zuerst versuchen.
(!)

MFFG (Mit freundlich- friedfertigem Grinsen)

fastix®

--
Als Freiberufler bin ich immer auf der Suche nach Aufträgen: Schulungen, Seminare, Training, Development

  1. :alnum: ↩︎