Avatar billede leif Seniormester
05. september 2006 - 09:45 Der er 18 kommentarer og
2 løsninger

Spamsikre en formular

Hej,

Hvordan mener I at den bedste løsning til at spamsikre en formular er ?

Og kom gerne med et eksempel på løsningen.

På forhånd tak


/Leif
Avatar billede michaeltryl Seniormester
05. september 2006 - 09:59 #1
måden jeg har gjort det på er at lave en select box med tal 1-10 og spørger så dem der udfylder formularen hvad er 2+2 herefter tjekker jeg at det kun er tallet 4 som er udfyldt i select boxen.
jeg har ikke modtaget spam i min gæstebog siden jeg gjorde dette

min selctbox ser sådan ud:
Hvad er 2+2?<select name="tjek">
<option value="">vælg</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
</select>

og tjekker sådan:
if($tjek == 4)
{
//indsæt data i databasen
}
Avatar billede coderdk Praktikant
05. september 2006 - 10:00 #2
Ellers noget simpelt CAPTCHA: http://google.com/search?q=simple+php+captcha
Avatar billede Slettet bruger
05. september 2006 - 10:42 #3
michaeltryl > Så vidt jeg har erfaret er spambots blevet for kloge til at det dér narrer dem. Jeg har endda haft et random genereret regnestykke uden svarmuligheder som de omgik.

Der var en tråd oppe for nogen tid siden hvor man brugte et javascript til at tjekke om den postende person rent faktisk også kiggede på hjemmesiden. Jeg skal se om jeg kan finde det :)
Avatar billede michaeltryl Seniormester
05. september 2006 - 10:45 #4
okay jeg har brugt det i lidt under et halvt år nu uden problem, men måske de lige pludselig kommer igennem, så det kunne være fedt hvis du kan finde den anden løsning
Avatar billede coderdk Praktikant
05. september 2006 - 11:03 #5
alternativt kan man prøve at lave en side hvor der står at man skal have javascript slået til. Her er et lille proof of concept:

<noscript>
  <h2>Du skal have javascript slået til!</h2>
</noscript>
<?php

var_dump( $_POST );

?>
<form method="post" action="java script:alert('Du skal have javascript slået til!')">
<input type="hidden" name="gemt" value="værdi">
<input type="submit" name="norm" value="Normal submit!">
<input type="button" name="sbmit" value="Javascript submit" onclick="this.form.action='rigtigt_script.php';this.form.submit();">
</form>
Avatar billede sjh Nybegynder
05. september 2006 - 14:29 #6
Jeg har lige haft besøg af en spammer på min gæstebog.. og fandt ud af at han/hun brugte en ghoust ip..
det vil sige at jeg kunne ikke fange han/hun på ip-adressen.. men fandt ud af at han/hun kun brugte POST
og derfor aldrig så selve siden.. så derfor måtte jeg lave det sådan at man skulle ind på siden før man
kunne POST..


Her skal du ha det uid for at kunne poste..

<?php
  // HUSK session_start() skal udførs før der udskrives noget html
  session_start();

  if ($_POST["uid"] == $_SESSION["UID"] && isset($_SERVER["HTTP_REFERER"])) { // tjekker om det unikke id passer med det som er i session.
  // udfør det du skal poste..
  }

  $strUID = MD5(uniqid(rand(), true)); // laver et unik id.
  $_SESSION["UID"] = $strUID; // setter det unikke id i session.
?>

<!-- et skjult felt til dit unik id, som postes med -->
<input type="hidden" name="uid" value="<?=$strUID;?>">
Avatar billede sjh Nybegynder
05. september 2006 - 14:30 #7
ghoust ip.. -> ghost ip.. :D
Avatar billede coderdk Praktikant
05. september 2006 - 16:16 #8
sjh, Du kunne vel bare have brugt session_id()? :)
Avatar billede coderdk Praktikant
05. september 2006 - 16:17 #9
sjh, Men smart at bruge session på den måde, et hidden field med session_id() og så checke om det er det samme :) Men der er sikkert flere bots der kan omgå det...
Avatar billede coderdk Praktikant
05. september 2006 - 16:22 #10
Mht at fange spam, kan man bruge akismet, hashcash eller spamkarma - Akismet og SpamKarma bruger vist en central database til at checke kendte IP'er... De er for det meste brugt til at integrere i blog-løsninger som wordpress...
Avatar billede coderdk Praktikant
05. september 2006 - 16:58 #11
Du kan checke om de er listet i DSBL ( http://dsbl.org/faq ) med:

    list($a, $b, $c, $d) = explode( '.', $_SERVER['REMOTE_ADDR'] );
    if ( checkdnsrr( "$d.$c.$b.$a.list.dsbl.org" ) )
    {
        header( "Location: http://dsbl.org/listing?" . $_SERVER['REMOTE_ADDR'] );
        exit;
    }

:)
Avatar billede coderdk Praktikant
05. september 2006 - 17:02 #12
Min server er lidt underlig, så den kode ovenfor virker ikke som den skal på den - Hvis du har samme problem, virker denne vist:

    list($a, $b, $c, $d) = explode( '.', $_SERVER['REMOTE_ADDR'] );
    if ( gethostbyname( "$d.$c.$b.$a.list.dsbl.org" ) == '127.0.0.2' )
    {
        header( "Location: http://dsbl.org/listing?" . $_SERVER['REMOTE_ADDR'] );
        exit;
    }
Avatar billede coderdk Praktikant
10. september 2006 - 22:10 #13
Sket noget her?
Avatar billede leif Seniormester
10. september 2006 - 22:33 #14
Næ, ikke så meget, men der kom en masse gode bud og jeg tror med en kombination af flere af dem giver et godt udgangspunkt.

Har ikke lige fået testet noget af det, da problemet gik i sig selv igen af en eller anden mærkelig årsag.

coderdk, michaeltryl og sjh smid et svar-.
Avatar billede michaeltryl Seniormester
11. september 2006 - 09:01 #15
svar
Avatar billede coderdk Praktikant
11. september 2006 - 09:41 #16
Ok :) michaeltryl dit blev vist til en kommentar ;)
Avatar billede michaeltryl Seniormester
11. september 2006 - 09:46 #17
jeg var lidt for hurtigt, men prøver bare igen
Avatar billede sjh Nybegynder
11. september 2006 - 09:48 #18
jeg springer over.. ;)
Avatar billede leif Seniormester
11. september 2006 - 10:17 #19
sjh -> Så skal du da blive fri.

Takker
Avatar billede sjh Nybegynder
11. september 2006 - 10:19 #20
tak :D
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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