Avatar billede visto Professor
27. februar 2014 - 17:44 Der er 11 kommentarer og
1 løsning

Forhindre spam-bot i at tilmelde tilmelde nyhedsbrev

Jeg bruger en helt simpel formular til tilmelding til nyhedsbrev på mit site: http://vinsiderne.dk/nyhedsbrev/

Men jeg er på det sidste begyndt at blive ganske voldsomt plaget af spam fra formularen. Hvordan kan jeg forhindre at maskiner kan afsende fra formularen? Det skal være en metode, der ikke mærkes af brugeren, altså ikke noget med CAPTCHA og i den genre.
Avatar billede conz Juniormester
27. februar 2014 - 18:33 #1
CAPTCHAs er klart det eneste rigtigt effektive være mod bots, men hvis botten er tilpas simpel, så kunne du prøve med fx et skjult felt. Sådan et ville brugerne ikke kunne se, og dermed ikke udfylde, men en bot ville opfange det, og udfylde det.

Du kunne også prøve med Javascript Cookies i stedet for HTTP, siden de fleste bots ikke bruger Javascript, ville det kunne sortere nogle fra.

Men gode bots, især hvis den er målrettet dig, ville sagtens kunne omgå sådanne præventive forsøg.
Avatar billede HKW Nybegynder
27. februar 2014 - 18:55 #2
Vis f.eks. fire billeder og beskriv kort, hvilket man skal trykke på. Det er også en captcha, men man er ikke ret generet af den.
Avatar billede visto Professor
27. februar 2014 - 20:41 #3
Jeg har prøvet at indsætte et skjult felt (med css display: none), men det medførte, at almindelig menneske-udfyldning af formularen ikke kunne sendes.

Jeg vil i første omgang foretrække en løsning, der ikke indskyder et forhindrende led for brugeren. Og jeg kræver lige nu ikke 100% beskyttelse, vil i første omgang foretrække en løsning uden captcha og se om den kan afhjælpe. For mit gæt er, at de bot'er, der rammer mig, er rimelig primitive (hvad har de i øvrigt ud af det?)

Hvis jeg kan undgå noget med cookies, vil jeg helst det. Simpelthen for ikke at skulle komplicere min (lovpligige) forklaring af, hvad jeg bruger cookies til mere end højst nødvendigt - det vil også være bruger-irriternde vil jeg antage.
Avatar billede keysersoze Guru
27. februar 2014 - 21:59 #4
Hvis dit skjulte felt medførte at ingen kunne sende lyder det som om det blev implementeret forkert - eller nok rettere at backend-delen gjorde. Kan du komme med koden derfra?
Avatar billede visto Professor
27. februar 2014 - 22:21 #5
Hm. Prøvede lige igen. Og nu går beskeden igennem med et skjult felt. Ved ikke hvad der har gjort forskellen. Jeg må have lavet en fejl et sted.

Men hvordan kan det være at en udfyldelse af et tomt felt skulle gøre, at beskeden ikke sendes? Min fantasi er, at der skal være en betingelse knyttet til udfyldelse af det usynlige felt i stil med "Hvis dette felt udfyldes, så skal formularens besked ikke afsendes" - i kodesprog forstås.

Koden ser aktuelt sådan ud (kan også ses i kildekoden):

<form method="post" action="besked.php" name="Formmail1">

<label>Dit navn:</label><br />
<input class="form-input" type="text" name="Navn" size="30" maxlength="100" /><br /><br />

<label style="display: none">Dit efternavn:</label>
<input class="form-input" type="text" name="Efternavn" size="30" maxlength="100"  style="display: none" />

<label>Din mail-adresse (skal udfyldes):</label><br />
<input class="form-input" type="text" name="Email" size="30" maxlength="100" /><br /><br />

<input type="radio" name="M" value="tilmeld" id="add" checked="checked" /><label for="add"> Tilmeld</label><br />
<input type="radio" name="M" value="afmeld" id="mod" /><label for="mod"> Afmeld</label>

<p>
<input type="submit" value="Send" name="B1" /></p>
</form>

besked.php indeholder følgende:

<?php
if(!$_REQUEST['Email']) {
    echo "<p class=\"besked\">Du skal indtaste din email-adresse.</p>";
} else {

if(substr_count($_REQUEST['Email'],'@')==0) {
    echo "<p class=\"besked\">Husk<br />@</p>";
} else {

$subject  = "Ang. nyhedsbrev";
$recipient = 'info@xxxxxxx.dk';
$message  = "Fra: <br /> ".htmlspecialchars($_REQUEST['Navn'])."<br /><br /> Email: <br />";
$message  .= htmlspecialchars($_REQUEST['Email'])."<br /><br /> Ønske: <br />".htmlspecialchars($_REQUEST['M']);
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers  .= 'Content-type: text/html; charset=UTF-8' . "\r\n";
$headers .= "From: ".$_REQUEST['Email']." <".htmlspecialchars($_REQUEST['Email']).">\r\n";

mail($recipient, $subject, $message, $headers);
?>
<p class="besked">Du får en bekræftelse, når din til- eller afmelding er registreret.</p>
<?php
}
}
?>
Avatar billede visto Professor
28. februar 2014 - 12:04 #6
Har lige modtaget fem nye spammails afsendt på samme tidspunkt. Så bare at have et tomt felt forhindrer altså ikke afsendelse fra formularen.

Så mit spørgsmål ovenfor er stadig aktuelt, gentager:

Hvordan kan det være at en udfyldelse af et tomt felt skulle gøre, at beskeden ikke sendes? Min fantasi er, at der skal være en betingelse knyttet til udfyldelse af det usynlige felt i stil med "Hvis dette felt udfyldes, så skal formularens besked ikke afsendes" - i kodesprog forstås.
Avatar billede keysersoze Guru
28. februar 2014 - 12:43 #7
et tomt felt alene gør det ikke - du skal validere for om det er udfyldt og er det det er det spam.
Avatar billede visto Professor
28. februar 2014 - 13:19 #8
Kan nogen fortælle mig hvilke koder jeg skal sætte ind? Den slags kan jeg ikke selv.
Avatar billede visto Professor
02. marts 2014 - 16:03 #9
Måske der er større chancer for svar i PHP-kategorien ang. validering og efterfølgende forhindring i afsendelse, så jeg har oprettet et spørgsmål vedr. programmeringen dér: http://www.eksperten.dk/spm/992216
Avatar billede visto Professor
02. marts 2014 - 18:40 #10
Spørgsmålet er besvaret færdigt med succes her: http://www.eksperten.dk/spm/992216. Men begabyte, og keyserzose, jeg beder jer lægge svar til point, fordi I ledte på vej, begabyte med det skjulte felt, keyserzose med input om validering af om det skjulte felt er udfyldt. Jeg lægger også selv svar, så læsere har mulighed for at se henvisning til resten af løsningen.

Tak for hjælp og for alle inputs.
Avatar billede visto Professor
03. marts 2014 - 18:30 #11
Svarfrist til i overmorgen (onsdag) eftermiddag, hvor jeg vil lukke spørgsmålet.
Avatar billede keysersoze Guru
03. marts 2014 - 20:51 #12
luk du bare.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester