Wat ziet een spam-bot?
Weet iemand van jullie wat een spam-bot eigenlijk "ziet"?
Een voorbeeld ... ik zet in een formulier een selectbox met als label "niet aanvinken" en vervolgens haal ik met javascript die selectbox en label weer weg ... ziet die spam-bot die selectbox en label dan wel of niet?
Kijk maar in de rule sets van SpamAssassin: die voor HTML bevat onder andere een test voor de methode document.write.
Het ligt er maar net aan. Als het een eenvoudige HTML reader is ziet hij de originele HTML. Wanneer hij ook javascript uit kan voeren wordt het al wat spannender. Zie bijvoorbeeld PhantomJS.
Ik vermoed dat je me niet helemaal goed hebt begrepen. Volgens mij heb jij het over spam-detectie. Ik bedoel echter een spam-bot die op je website komt en probeert een contactformulier in te vullen.
Het idee is om aan het contactformulier een selectbox of inputveld toe te voegen dat de gebruiker niet ziet, maar een spam-bot wel. Als die selectbox of inputveld dan is ingevuld, weet ik dat het om een spam-bot gaat en wordt het bericht niet verzonden.
De vraag is, wat is de beste manier om dat inputveld of selectbox te verbergen zodat een normale bezoeker die niet te zien krijgt, maar de spam-bot wel?
Volgens mij zijn er 2 manieren: verbergen via css of via javascript. Maar welke manier is beter, of moet ik ze beiden toepassen?
Ik heb ze beide wel eens gebruikt, maar kan niet zeggen dat de een of ander merkbaar beter werkt.
Is de "no CAPTCHA reCAPTCHA" van Google misschien nog een alternatief?
No problem :-)
>> Is de "no CAPTCHA reCAPTCHA" van Google misschien nog een alternatief?
Op zich wel, maar ik wil mensen die een vraag willen stellen niet lastigvallen met een captcha.
Wat ik nu dus wil doen is een inputveld maken dat ik verberg. Als het is ingevuld gaat het om een spam-bot. Maar hoe zal ik dat invulveld voor de 'normale' bezoeker verbergen? Via css en/of js?
JavaScript, vooral omdat het parsen van CSS gemakkelijker is dan het uitvoeren van script.
Oké ... maar dan dus NIET ook nog via CSS? Dus alleen maar via Javascript?
Gewijzigd op 15/09/2016 16:30:59 door Ward van der Put
Stel ik doe zoiets:
Nu kan ik dus #ABC via css verbergen, maar ook via Javascript ... of zowel via css als via Javascript.
Jij zei: Niet als je hetzelfde element verbergt, want dan geef je in de CSS al een hint over iets dat je met JavaScript juist probeert te verhullen.
Kun je aan de hand van bovenstaand voorbeeldje uitleggen wat je daarmee bedoelde?
Stel, een spambot beheerst CSS en geen JavaScript. Als je dan hetzelfde element verbergt in CSS, is alleen dat al een hint dat je hetzelfde doet in JavaScript. Of anders gezegd: zelfs zonder ook maar iets JavaScript te begrijpen, weet de spambot dan al dat hij wordt misleid met dat element. De CSS en het JavaScript moeten idealiter daarom compleet gescheiden hun eigen ding doen.
Oké ... dus je bedoelt te zeggen ... mogelijk kent de spambot css en daarom kan ik beter js gebruiken?
>> De CSS en het JavaScript moeten idealiter daarom compleet gescheiden hun eigen ding doen.
Wat bedoel je specifiek met "gescheiden" en "hun eigen ding". Kun je een voorbeeldje geven?
We proberen hiermee de spambot te verleiden om een onderwerp in te vullen. Erg belangrijk: gebruik iets bekends dat vaak moet worden ingevuld.
Een slimme spambot die de CSS-code display:none echter doorziet, zal dat element negeren. Het is immers ook niet zichtbaar voor gewone gebruikers.
En op dát element moet je dus ook niet je JavaScript loslaten. Dan doe je iets dat soms niet werkt alleen maar over, maar dat is dan deels dubbelop. Daarom zou je het JavaScript hiervan los moeten koppelen.
Maakt het iets uit als ik de css in een extern bestand plaats in plaats van inline?
>> En op dát element moet je dus ook niet je JavaScript loslaten.
Ik snap nog steeds niet wat je bedoelt ... bedoel je dat ik op een ander element javascript moet loslaten?
In mijn voorbeeldje hierboven zou ik de paragraaf met ID ABC kunnen verbergen zodat de bezoeker dat hele veld niet meer ziet. Maar ik snap jouw onderscheid tussen css en js niet.
Als ik die paragraaf inline op display:none zet, dan kan ik me voorstellen dat een spambot dat doorziet, maar als ik het via een extern stylesheet doe ... dan nog steeds? Of via js?
Dat is dus eigenlijk mijn vraag.
Ja, een spambot die je CSS-truc doorziet, zal het HTML-element negeren. Dan helpt het toevoegen van JavaScript voor dat element dus niet meer.
Het lijkt een beetje op één slot (dat ene HTML-element) met twee sleutels (CSS en JavaScript). Twee sloten met elk een eigen sleutel is veiliger.
Oké ... maar is het dan dus slimmer om alleen JS te gebruiken en geen CSS? Anders gezegd, is JS moelijker te doorgronden voor een bot dan CSS?
>> Twee sloten met elk een eigen sleutel is veiliger.
Dat klinkt goed, maar heb je een voorbeeldje?
Geen idee wat je ermee bedoelt te zeggen ... maar bedankt voor m'n knorrende buik!
Je ziet ook wel eens zichtbare velden waar je een woord of uitkomst van een optelsom in moet vullen, maar ook dit werkt steeds minder goed. Zelfs simpele captcha's die letters en cijfers in wat kleurtjes met streepjes e.d. weergeven worden gelezen door spam-bots.
Zoals met alles blijft het een strijd; de één verbetert zijn beveiliging en de ander verbeterd zijn aanval.
Zelfs de (oude) captcha's van Google zijn al te lezen (hier zijn ook scripts voor zodat je toch een login kan automatiseren). De nieuwere captcha's die Ward aangaf zijn mogelijk nog wel (redelijk) veilig voor zolang dat duurt (Spotify gebruikt ze tenslotte ook).
Spam-bots helemaal voorkomen blijft lastig en er zal altijd een mens aan te passen moeten komen om het in de gaten te houden.
Van alles geprobeerd, lukte maar niet dus gekozen voor een rigoreuze oplossing:
Ip range blokkeren middels .htaccess. :) Even gekeken waarbij het land behoord, en dat was Rusland, niet de doelgroep, dus een ip ban. Proberen het nog wel, mijn log staat er iedere dag 24/7 vol mee, maar niets van Viagra of andere onzin meer op de website zelf.
Nou gaat het in dit geval niet om "op de website zelf" maar gewoon om een simpel contactformulier. Maar ja, ik wil niet dat daar straks ook op gespamd wordt met Viagra en allerlei onzin.
Ik ben dus vooral benieuwd of zo'n spambot Javascript kan interpreteren.
Stel, ik voeg een veld toe dat NIET moet worden ingevuld. Als ik dat verberg via javascript (of css) is het wel de bedoeling dat de die spambot dat veld wel ziet, anders schiet ik er niks mee op :-s
De vraag is dus hoe "slim" zo'n bot is. Kan die javascript interpreteren?