Forum > Övriga serverspråk > PHP
Hejsan, jag gjorde för cirka ett halvår sen en hemsida med en gästbok och den har dragit på sig stora problem med spam.
Hur kan man på ett enkelt sätt förhindra detta eviga spam?
Har gjort en textruta som är type="hidden" men verkar inte hjälpa ett dugg.
Har även testat med att köra en fråga som: Vad är 5+9.
Men utan resultat.
Testa med en captcha lösning det kan nog fungera.
Jag gör såhär, och det fungerar riktigt bra :)
<select name="spam" style="width: 212px;">
<option value="" name="spam">Fråga: 5+5= ?</option>
<option value="" name="spam">7,5</option>
<option value="ja" name="spam">10</option>
<option value="" name="spam">13</option>
</select>
och i php har jag
if(!$spam) {
echo 'Du skrev in fel svar på frågan 5+5=?. Backa och svara rätt.';
}Nej, det är inte alls bra, inte från ett användares synpunkt. varför har du frågan som ett val? Varför skriver du facit i HTML kod och Option har inget name, det är select-element som har det så plocka bort det, sen har du missat rätt mycket PHP kod om du nu vill tipsar andra, var är variabeln $spam ifrån, min gissning är att det är:
$spam = $_post['spam'] == "ja";
Ursäkta att jag inte skrivit min lösning i tråden.
Såhär löste jag spam problemet:
<?
$random = rand(1,10);
$random2 = rand(1,10);
$summ = $random+$random2;
?>
Vad är <? echo $random."+".$random2 ?>
<input type="text" name="random" value="<?=$random?>" hidden >
<input type="text" name="random2" value="<?=$random2?>" hidden>
<input type="text" name="sakerhet"><br>
När man klickat skicka inlägget kommer man till
$summ = $_POST['random']+$_POST['random2'];
if($_GET['add'] == 'gb'){
if($_POST['sakerhet'] == $summ){
if($_POST['cookie'] == 'ja'){
setcookie("namn", $_POST['namn'], time()+2592000);
setcookie("email", $_POST['email'], time()+2592000);
}
if($_POST['namn'] == '' OR $_POST['inlagg'] == ''){
echo "<script language='javascript'>alert('Fyll i alla fälten!');window.location.href='".$_SERVER["HTTP_REFERER"]."'</script>";
} else {
mysql_query("INSERT INTO gastbok (namn, email, inlagg, datum, ip) VALUES ('".skydd($_POST['namn'])."','".$_POST['email']."','".skydd($_POST['inlagg'])."','".date("M-d H:i")."','".$_SERVER['REMOTE_ADDR']."')") or die (mysql_error());
header("Location: index.php?p=gb");
}
} else {
echo "<script language='javascript'>alert('Du passerade inte säkerhetskollen');window.location.href='".$_SERVER["HTTP_REFERER"]."'</script>";
}
}
känns lite farligt att ha fälten i hidden, en bot kan enkelt ändra alla HTML element och ändra random och random2 till 1+1 och börja svärma din gästbok.
känns lite farligt att ha fälten i hidden, en bot kan enkelt ändra alla HTML element och ändra random och random2 till 1+1 och börja svärma din gästbok.
Jo, jag tyckte inte det kändes så bra att skriva i hidden men vad skulle man kunna ändra det till? Eftersom databas insättningen ligger i dbins.php alltså en helt annan fil.
Session som inte gå att läsa av hade löst detta?
Tack för tipset, tänkte aldrig på en Session ens.