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
:alnum: ↩︎