webForumDet fria alternativet

Egen CAPTCHA, hur svårt behöver man göra det egentligen?

PHP

5 svar · 2 851 visningar · startad av casca

Medlem sedan feb. 20005 891 inlägg
Frågan#1

Sitter med en mindre website som har ett kontaktformulär som skickar mail till mig direkt. Vill förstås inte ha en massa spam och skit, så jag tänkte implementera en CAPTCHA-funktion. Men hur komplicerad måste man göra det egentligen?

Jag är lite svag för simpla och tydliga CAPTCHA-funktioner, där man ombeds att genomföra simpel aritmetik ("vad är 1 + 6?" - "7") eller använder sig av naturligt språk s.a.s ("Vilken är den första bokstaven i sista ordet i denna mening?" - "m") för att få posten förbi filtret.

Så jag skrev en snabb funktion, där jag genererar en enkel "ekvation" varje gång sidan visas. För att passera CAPTCHA-funktionen måste man då fylla i svaret i ett visst input-fält.

Grejen är bara att jag matar svaret i ett osynlig fält (input type=hidden). Är inte svaret lika med det osynliga fältet så stoppas man - men räcker detta till eller kommer formuläret att läcka?

Medlem sedan juni 20006 031 inlägg
#2

Spara det rätta svaret i en session istället.

Medlem sedan sep. 201046 inlägg
#3

Jag ville tillägga denna långa artikel om CAPTCHA.
http://www.smashingmagazine.com/2011/03/04/in-search-of-the-perfect-captcha/

..
Mitt ord om CAPTCHA är att om man använder CAPTCHA skrämmer man bort spambotarna, vilket är syftet, men samtidigt skrämmer bort användarna!; speciellt om du inte använder sticky-forms/AJAX-lösning.

Exempelvis kontaktformulär där användare har skrivit ett långt personligt meddelande och skriver in fel CAPTCHA för att det syns dåligt, så måste man skriva in informationen igen. Det är riktigt irriterande för att användarna och många av dom ger upp och stänger ner sidan för att dom inte orkar skriva in informationen i formulären för ett nytt försök.

Medlem sedan feb. 20005 891 inlägg
#4

Renegade8164 skrev:

Exempelvis kontaktformulär där användare har skrivit ett långt personligt meddelande och skriver in fel CAPTCHA för att det syns dåligt, så måste man skriva in informationen igen. Det är riktigt irriterande för att användarna och många av dom ger upp och stänger ner sidan för att dom inte orkar skriva in informationen i formulären för ett nytt försök.

Visst, men då kan man använda Javascript för att fixa nån enkel kontroll så att det inte går att posta formuläret utan att fylla i CAPTCHA-formuläret?

Medlem sedan maj 20031 472 inlägg
#5

Jag kör ibland med javascript istället för CAPTCHA. Jag har ett dold fält som har ett värde säg "ffsdfsdf", sedan har jag en onClick på min submitknapp som uppdaterar det värdet. Sedan när du tar imot formuläret kollar du bara att ditt gömda fält verkligen är ändrat. På de ställen jag använt detta på har det inte kommit förbi något spam, men det är nog bara en tidsfråga innan det börjar göra det.
Så min erfarenhet av detta är att botar kör inte javascript på sidorna utan läser bara av vilka fält som finns och fyller de med data.

<form id="form" name="form" action="post.php" method="post" enctype="multipart/form-data">
  <input type="hidden" name="blabla" value="KKCnjj3Siz6Zwo3T5lG6QK5VmkaKaFaIdCTmJL5P9XEvC">
  <input onClick="Checkfields();" type="submit" name="Submit" value="Skicka" />
</form>
function Checkfields() {
  document.form.blabla.value = "KKCnjj3Siz6Zwo3T5lG6QK5VmkaKaFaIdCTmJI5P9XEvc";
}
Medlem sedan sep. 201046 inlägg
#6

casca skrev:

Visst, men då kan man använda Javascript för att fixa nån enkel kontroll så att det inte går att posta formuläret utan att fylla i CAPTCHA-formuläret?

Visst funkar de, om inget CAPTCHA-ifyllt så kan man inte skicka formuläret. Exempel med enkel html/js:

<form name="contact" action="post">
    <textarea name="usermsg" id="usermsg"></textarea>
    <input name="CAPTCHA" type="text" id="CAPTCHA" />
    <input name="sendmsg" type="submit" id="sendmsg" value="Skicka" disabled="true" />
</form>
     
<script>
    var submit = document.getElementById('sendmsg');
    document.getElementById('CAPTCHA').onkeyup = function() {
        submit.disabled = this.value == '';
    };
</script>
256 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
117 ms — deklarationer (db)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)