- rychlé shrnutí
- přechod na Netlify #
- použití honeypotu #
- diskontování re #
- aby byl formulář méně atraktivní pro roboty #
- použití jQuery k odstranění atributu #
- výměna tlačítka Odeslat #
- přidání atributu metody na submit #
- podání formuláře se děje přes HTTP #
- oddělením stránky od formuláře #
- načítání formuláře na stránce load #
- v souhrnu #
- věci, které můžete vyzkoušet #
rychlé shrnutí
je pohodlná technika pro zastavení spamu, ale je také nepřístupná. Použití JavaScriptu k odstranění kritických atributů formuláře, dynamické načítání obsahu formuláře a nahrazení tlačítek odeslat může být účinnou alternativou, která udržuje Přístupnost vašich webů.
dříve jsem použil. Net MVC jako rámec pro webové stránky CANAXESS. Kontaktní formulář musel být přístupný a nemohl se spolehnout na žádný plugin, který by nepříznivě ovlivnil schopnost uživatele nás kontaktovat. Formulář měl skryté pole formuláře CSS používající techniku honeypot a logiku na straně serveru odmítající všechna podání, pokud pole formuláře obsahovalo data.
teorie, že roboti nerozumí tomu, co je legitimní pole a co ne, a tak bot identifikuje a vyplní všechna vstupní pole a odešle formulář. Pokud pole obsahuje data, předpokládáme, že jako uživatel nebyl schopen přejít do pole skrytý formulář, uživatel neodeslal formulář a zahodil celý vstup.
honeypot techniky jsou vždy identifikovány jako účinný způsob, jak zastavit spamové e-maily a pro mě technika fungovala dobře, aby se spam snížil na zvládnutelnou úroveň denně. V rámci mého poštovního klienta bych vybral všechny spamové e-maily a masově je odstranil, vše docela rovně vpřed, pokud je časově náročné.
přechod na Netlify #
v rámci změny infrastruktury byl web CANAXESS přesunut do Netlify, což znamenalo, že stávající použitá technika filtrování spamu by musela být přehodnocena, protože předchozí web byl postaven v. NET a hostován v prostředí.Net.
zpočátku jsem se rozhodl jít na žádnou ochranu proti spamu a jen vidět, jak to šlo. Jak byste očekávali, spamové příspěvky přišly silné a rychlé.
použití honeypotu #
Netlify poskytuje funkci honeypotu, která se řídí stejnou technikou použití skrytého vstupního pole a pokud je toto předvyplněno, všechny e-maily budou odeslány do složky spam.
<form name="contactSubmission" data-netlify="true"
netlify-honeypot="bot-field">
<input class="actual-hidden" name="bot-field" tabindex="-1">
tato technika fungovala velmi efektivně; žádné legitimní e-maily se nikdy nedostaly do běžné e-mailové složky.
ale složka spamu vyprávěla jiný příběh. Existovaly stránky s výsledky spamu, kde jsem dříve mohl vybrat všechny e-maily na mass a delete, přístup Netlify znamenal pouze 10-20 e-maily byly vráceny najednou s stránkováním použitým k přesunu na dalších deset e-mailů. Neexistovala žádná funkce hromadného mazání a musel jsem odstranit jednotlivé.
to bylo neuvěřitelně časově náročné a únavné. Napsal jsem bookmarklet Javascript, o kterém jsem doufal, že usnadní kontrolu všech ovládacích prvků zaškrtávacího políčka na stránce a odstraní všechny záznamy.
logika stránky bohužel nerozpoznala můj bookmarklet jako fyzicky interagující s každým ovládacím prvkem a neumožňovala výběr všech e-mailů na hromadě.
také jsem si nemohl být jistý, zda nějaké e-maily ve složce spam byly falešně pozitivní – nesprávně identifikované e-maily, což znamenalo, že jsem musel procházet všechny e-maily, abych to potvrdil.
diskontování re #
Netlify poskytuje Google re a zpočátku jsem zvažoval jeho použití, protože e-maily denně rostly.
vnímání společnosti pro přístup k webu pomocí známé nepřístupné metody pro lidi, kteří je kontaktují, však nebylo dobrým vzhledem.
dříve jsem psal o tom, jak hrozná je technika pro podkopání přístupnosti webové stránky, a myslel jsem si, že pokud tento problém nedokážu vyřešit, jaká je naděje pro ostatní.
rozhodl jsem se naprogramovat cestu ven.
aby byl formulář méně atraktivní pro roboty #
potřeboval jsem, aby kontaktní formulář vypadal méně jako kontaktní formulář a méně atraktivní pro roboty. Začal jsem odstraňovat atribut method
na prvku formuláře. Pokud neexistuje atribut method
, myslel jsem, že formulář nelze odeslat.
<form name="contactSubmission" data-netlify="true"
netlify-honeypot="bot-field">
bohužel, i když byl atribut odstraněn, Netlify použil atribut metody zpět na formulář, když byl web nasazen, a to bylo něco, co jsem nemohl ovládat.
<form name="contactSubmission" method="post">
použití jQuery k odstranění atributu #
rozhodl jsem se použít Javascript (jQuery) k dynamickému odstranění atributu method
po načtení stránky. Pomocí události jQuery ready je vybrán prvek formuláře a atribut method
je odstraněn.
$(function(){
$("#contactSubmission").removeAttr("method");
});
pak jsem požadoval způsob, jak přidat atribut zpět do prvku formuláře před odesláním. Musel jsem jej přidat zpět v pořadí, abych se ujistil, že atribut existuje před odesláním formuláře, jinak bude formulář chybovat a uživatel se setká s rozbitým kontaktním formulářem, stěží ideální!
výměna tlačítka Odeslat #
navíc jsem se rozhodl odstranit tlačítko submit
. Zjistit, zda nebylo tlačítko submit
formulář nelze odeslat přes bezhlavý prohlížeč (pokud spammeři používali tuto techniku), protože vypadá méně jako kontaktní formulář a spíše jako sbírka vstupních polí.
podání formuláře by probíhalo prostřednictvím běžného prvku button
pouze programově.
<input type="button" value="Contact CANAXESS"
class="contactForm-button submit">
přidání atributu metody na submit #
tlačítko regular mělo popisovač událostí click
, který přidal atribut metody a hodnotu zpět do prvku formuláře.
po kliknutí na tlačítko je atribut přidán, ale mohou existovat případy, kdy se načasování prvků skriptu děje v rozporu s tím,jak jsem to chtěl.
abych to překonal, přidal jsem časový interval. To opakovaně kontroluje prvek formuláře pro atribut method
každých 100 milisekund, pokud neexistuje atribut method
, formulář není odeslán.
$("input.contactForm-button").click(function(){
$("#contactSubmission").attr("method", "post");
var checkExist = setInterval(function(){
var attr = $("#contactSubmission").attr("method");
if (typeof attr !== typeof undefined && attr !== false)
{
$("#contactSubmission").submit();
clearInterval(checkExist);
}
}, 100);
});
k odeslání formuláře dochází pouze tehdy, existuje-li atribut method
, a to by se vyskytlo programově. Po odeslání formuláře by intervalový časovač skončil.
clearInterval(checkExist);
myslel jsem, že to byl docela účinný způsob, jak překonat kontaktní formulář k zastavení robotů,ale moje důvěra neměla trvat. Vrátil jsem se o několik hodin později, abych znovu našel nevyžádané e-maily.
podání formuláře se děje přes HTTP #
a pak mi to došlo, roboti pravděpodobně ani nenavštěvují stránku prostřednictvím prohlížeče, nestarají se o veškerý skript jQuery, který běží na straně klienta a odstraňuje prvky.
atribut metody existuje, když je stránka načtena, a odtud je to jednoduché škrábání HTML a odeslání formuláře prostřednictvím HTTP příspěvku bez interakce se stránkou.
a právě toto poznání mě přimělo identifikovat techniku, která by spamové e-maily nejen zpomalila, ale zastavila. Od použití této techniky jsem neměl žádné e-maily, Žádný, zilch.
oddělením stránky od formuláře #
technika načte fragment formuláře pomocí JavaScriptu po načtení stránky. Realizace spamových robotů pravděpodobně nepoužívá bezhlavý prohlížeč k navigaci na kontaktní stránce a odeslání formuláře, místo toho jsem vytvořil formulář, pouze když byla stránka načtena z prohlížeče.
Kontaktní stránka vykreslená v prohlížeči je jedna stránka, ale ve skutečnosti se skládá ze dvou částí. Hlavní stránka s zástupným symbolem pro komponentu formuláře a samotný obsah formuláře.
<div></div>
načítání formuláře na stránce load #
po načtení stránky načte událost jQuery ready další fragment formuláře do kontejneru formuláře DIV
téměř okamžitě.
stránka fragmentu formuláře není botem nikdy identifikována, protože počáteční stránka, kterou bot vidí, nemá žádný prvek formuláře, načte se až po načtení stránky pomocí JavaScriptu.
<script>
$(function(){
$("#formContainer").load("formfragment.html");
});
</script>
v souhrnu #
tato technika vyžaduje Javascript k provozu. Vzhledem k tomu, že se Javascript stal uznávanou součástí vývoje webu, myslím, že je to realistické řešení pro zastavení spamu v určitých konkrétních situacích.
další technika použití honeypotových polí je vždy problematická, protože z mé zkušenosti to nebylo tak efektivní.
Spam by si stále našel cestu, a pokud jsem upřímný, technika honeypot může být klasifikována pouze jako omezovač spamu, což snižuje případy průchodu spamu.
zatímco použití by fungovalo a bylo by rychlou opravou, jeho použití podkopává zpřístupnění webu pro osoby se zdravotním postižením.
odstraněním kontaktního formuláře z vykreslení jako součást pravidelného požadavku HTTP get se zdá, že jeho viditelnost pro roboty je výrazně snížena ,a proto snižuje (a v mém případě zastavil) roboty, aby mohli odesílat spam prostřednictvím kontaktního formuláře.
věci, které můžete vyzkoušet #
bez ohledu na rámec, který váš web používá, pokud je váš kontaktní formulář ohrožen spamem, zkuste tyto přístupy:
- oddělte stránku a formulář
- vložte formulář po načtení stránky
- formuláře odešlete pouze programově pomocí prvků
button
- odstraňte atribut
method
na formulářích a přidejte je jako součást odeslání formuláře