webForumDet fria alternativet

Spärra "spam" från ett formulär?

PHP

12 svar · 587 visningar · startad av peterpops

Medlem sedan aug. 200135 inlägg
Frågan#1

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?

hoppas ni förstår vad jag menar...

har sökt här i WF utan resultat.

Tack på förhand.
MVH Peter.

Medlem sedan sep. 2002188 inlägg
#2

Använd cookies..

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.. :)

Medlem sedan aug. 200135 inlägg
#3

det låter ju som en bra lösning. Ska även bli kul att för första gången komma i kontakt med cookies (newbie :r ).

Fast, då det blir första gången jag ska jobba med cookies, kan någon hjälpa mig med lite kodexempel på hur detta löses.

Tackar på förhand.

Mvh Peter.

Medlem sedan jan. 200311 inlägg
#4

Kolla i PHP manualen under setcookie:
http://www.php.net/manual/en/function.setcookie.php

Där hittar du det mesta du behöver.

Medlem sedan okt. 20001 285 inlägg
#5
<?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;
}
}
?>

går köra på formsidan också..

<?php
// WRITE.PHP
include "/functions.php";
if ($_COOKIE['spam']) {
    header();
    spam_msg();
    footer ();
    exit;
} else {
    header();
// Visa formulär..
?>
<form method="post" action="/actions.php">
<p>Namn:<br /><input type="text" name="namn"></p>
<p>Text:<br /><textarea name="text"></textarea></p>
<input type="hidden" name="action" value="write">
<p><input type="submit" value="Posta"></p>
</form>
<?php
    footer();
}
?>

lol .. nu har jag utökat detta under 20 minuter .. bäst jag ger mig.. hoppas du fick nån hjälp iaf :)

Medlem sedan maj 2002647 inlägg
#6

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. ;)

Medlem sedan aug. 200135 inlägg
#7

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.

Tack även till alla som svarade.

Medlem sedan okt. 20001 285 inlägg
#8

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...

Medlem sedan jan. 200337 inlägg
#9

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?

Medlem sedan aug. 200135 inlägg
#10

Nej, inte sitter man och skriver i samma gästbok inte.

Så, kanske är ide att kanske använda sig av java istället för att avlasta servern?

Medlem sedan nov. 20014 054 inlägg
#11

Det löser man..

Wibbe skrev:

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å!

typ:

setcookie($rad[GbID],$rad[GbID],(time()+300),'/','',0);

Men hostnummer funkar finemang osså, beror ju på man vill använda sig av databasen sin eller inte!

....

Angående använda javascript för att hindra spam:
Har användaren slagit av funktionen för använing av javascript, hur gör vi då?! ;)

Medlem sedan jan. 200337 inlägg
#12

Re: Det löser man..

Fredde Mannen skrev:

Man kan fortfarande använda cookies!

Visst kan man det =)
Men avändaren kan ju ta bort cookiesen, eller så gör man bara så att webbläsaren inte tillåter cookies.

Medlem sedan aug. 20002 975 inlägg
#13

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
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
835 ms — ändringar (db)