Im Prinzip gibt es ja eine gute Prüfung bei Mailbestätigung, in der ich so erstmal keine groben Fehler erkennen kann. Und wenn die Einträge nicht doppelt vorhanden sind, bleibt noch das mit der race condition, evtl. benutzt er ein Klickprogramm, welches "gleichzeitiges" Aufrufen natürlich besser hinbekommt als ein Mensch.
Wobei er es dann schon absichtlich darauf anlegen müsste, die meisten Fakeskripte geben sich ja mit einer 1x Bestätigung schon zufrieden 
Sehe 2 Möglichkeiten:
- User sperren, da selbst wenn das keine Absicht ist, er sich dessen dennoch bewusst ist (mehr Vergütung, +1 Punkte mehr in Rallye) und das nicht meldet beim Admin, schon ein Grund (ausserdem sind die Ausreden doch immer spannend die dann kommen
)
- pcheck.php noch besser absichern:
Optimal wären Tabellen-/Zeilensperren, aber etwas kompliziert einzubauen, evtl reicht es auch, die Zeile:
PHP-Code:
db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=1 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']." LIMIT 1");
die normalerweise erst nach den ganzen Rallyes Bilanzen etc kommt, direkt nach:
PHP-Code:
if (($mail['start']+$mail['aufendhalt']-1) <= time() AND $mail['status'] == 0) {
zu verschieben und noch zu erweitern:
PHP-Code:
db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=1 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']." AND status=0 LIMIT 1");
danach kann man dann mit:
PHP-Code:
if(mysql_affected_rows()==1){
//rallyes etc.
}else{
$headmsg = 'Doppelt bestätigt! Paidmail ungültig!';
db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=2 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']." LIMIT 1");
}
Das doch schon ganz gut verhindern.
Sieht dann etwa so aus der Abschnitt:
PHP-Code:
if (($mail['start']+$mail['aufendhalt']-1) <= time() AND $mail['status'] == 0) {
db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=1 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']." AND status=0 LIMIT 1");
if(mysql_affected_rows()==1){
//rallyes etc. bis:
$headmsg = $mail['verdienst'].' '.$waehrung.' gutgeschrieben!';
}else{
$headmsg = 'Doppelt bestätigt! Paidmail ungültig!';
db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=2 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']." LIMIT 1");
}
} else {
$headmsg = 'Wartezeit umgangen! Paidmail ungültig!';
db_query("UPDATE ".$db_prefix."_paidmails_empfaenger SET status=2 WHERE tan='".$_GET['tan']."' and uid=".$_GET['uid']." LIMIT 1");
}