Hej!
Jag har ett sajt där man kan registrera sig och får då en egen gästbok, där andra medlemmar kan posta inlägg.
Fast har nu upptäckt att man enkelt kan "spamma" en gästbok ganska så enkelt genom upprepade klick på submitknappen. Hur skyddar man sig mot detta så att det endast går att skicka ett gästboksmeddelande i taget?
En cookie sparas när man skickar inlägget,
när man sedan klickar direkt igen kommer
man kolla av om cookien finns där eller inte..
Sätt en timer på cookien så att dess livslängd kanske varar i säg 15 minuter, då kan man inte skriva mer än ett inlägg varje 15minuter.. :)
<?php
// FUNCTIONS.PHP
function header()
{
echo "<html><body><hr />";
}
function footer()
{
echo "<hr /></body></html>";
}
// cookie functions...
// Byt tider..
function set_cokie()
{
setcookie('spam','japp',(time()+300),'/','',0);
}
// Om du vill döda denna kaka nånstans..
function kill_cookie()
{
setcookie('spam','',(time()-300),'/','',0);
}
function spam_msg()
{
echo "<p>vänta x minuter först!<br />Läs i <a href=\"www.pops.se/gb\">Peterpops gästbok</a> så länge.</p>";
}
?>
<?php
// ACTIONS.PHP
include "/functions.php";
if ($action == "write") {
//kolla sedan när ett inlägg ska in i DB´n om
if ($_COOKIE['spam']) {
header();
spam_msg();
footer();
exit;
} else {
// Skriv in i DB´n..
set_cookie();
header("location: /gb/");
exit;
}
}
?>
jag skulle rekommendera att du använder dig av javascript för att endast tillåta formuläret att skickas en gång... personligen tycker jag att det är smidigare och du slipper använda cookies. Men det är personlig smak. ;)
Ville bara tacka Fuel för de fina exempel du gav. Var precis sådant jag var ute efter. Tack för att du tog dig tid, använder mig av nästan exakt den koden du knakade ned.
jo.. kan vara bra om man slipper låta servern jobba och kör med javascript på vissa ställen om det är en större webplats, jag har / kan tyvärr inget javascript för detta för att undvika spam i en gästbok.
Redigerat:
Hittade detta i javascript forumet..
<form method="POST" onSubmit="setTimeout('document.form.reset()',500); return true;" name="form">
som ska tömma formuläret iaf...
Webslave har en väldigt bra lösning. Annars kan man använda så att ett hostnummer inte får göra records i databasen på en viss tid. För man sitter väl inte och skriver i en och samma gästbok eller gör man?
För man sitter väl inte och skriver i en och samma gästbok eller gör man?
Man kan fortfarande använda cookies!
Det är ju bara att sätta den användares gästboks nummer i cookien, så att så länge man försöker skriva in just den gästboken med det ID-nummret så går det ej!
Men i och för sig så för ju den kakan ett nytt värde när man skriver i nästa gästbok om man inte sätter Gästbokens id som namn osså!
Om man vill slippa cookies så kan man ju alltid spara ned ip-nummer, timestamp och gästboksid i en databas, och göra en jämförelse mot den när man vill kolla om inlägg är godkänt.
981 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2