簡単な要約
はスパムを停止するための便利なgo toテクニックですが、アクセスできません。 Javascriptを使用して重要なフォーム属性を削除したり、フォームコンテンツを動的に読み込んだり、送信ボタンを置き換えたりすることは、サイトのアクセ
以前は、CANAXESS webサイトのフレームワークとして.NET MVCを使用していました。 お問い合わせフォームにアクセスする必要があったと悪影響私たちに連絡するユーザーの能力に影響を与える任意のプラグインに依存することがで フォームには、ハニーポット技術とフォームフィールドにデータが含まれている場合、すべての送信を拒否するサーバー側のロジックを使用して、CSS非表示のフォームフィールドがありました。
ボットである理論は、正当なフィールドとそうでないフィールドを理解できないため、ボットはすべての入力フィールドを識別して完了し、フォームを送信 フィールドにデータが含まれている場合、ユーザーが非表示のフォームフィールドに移動できなかったため、ユーザーはフォームを送信せず、入力全体を破棄していると
ハニーポットの技術はスパムの電子メールを停止する効果的な方法として常に識別され、私のために技術は管理しやすいレベルにスパムを日減らすために良く働いた。 私のメールクライアントの中で、私はすべてのスパムメールを選択し、時間がかかる場合は、すべてのかなりまっすぐ進む、質量にそれらを削除します。
Netlify#
への移行インフラストラクチャの変更の一環として、CANAXESSのウェブサイトはNetlifyに移動されました。
当初、私はスパム保護のために行くことを選択し、それがどのように行ったかを見ることにしました。 あなたが期待するように、スパムの投稿は厚くて速く来ました。
ハニーポットの使用#
Netlifyは、非表示の入力フィールドを使用するのと同じ手法に従うハニーポット機能を提供し、これが事前に入力されている場合、すべての電子メールがスパムフォルダに送信されます。
<form name="contactSubmission" data-netlify="true"
netlify-honeypot="bot-field">
<input class="actual-hidden" name="bot-field" tabindex="-1">
この手法は非常に効果的に機能しました。
しかし、スパムフォルダは別の話をしました。 以前は大量のすべてのメールを選択して削除することができたスパム結果のページがありましたが、Netlifyアプローチは10-20のメールだけが一度に返され、ページングは次の十のメールに移動するために使用されました。 大量削除機能はなく、個々のものを削除する必要がありました。
これは信じられないほど時間がかかり、退屈でした。 私は、ページ上のすべてのチェックボックスコントロールをチェックし、すべてのレコードを削除することを容易にすることを望んでいたJavascript
残念ながら、ページロジックは私のブックマークレットを各コントロールと物理的に相互作用していると認識しておらず、mass上のすべての電子メールの選択を許可していませんでした。
私はまた、スパムフォルダ内の任意の電子メールが偽陽性であったかどうかを確認することができませんでした-誤って識別された電子メールを、私は確認するためにすべての電子メールをトロールしなければならなかったことを意味しました。
割引re#
NetlifyはGoogleの再を提供し、私は最初に電子メールが毎日増加していたとして、その使用を検討しました。
しかし、人々がそれらに連絡するための既知のアクセスできない方法を使用しているwebアクセシビリティ会社の認識はよく見えませんでした。
私は以前、ウェブサイトのアクセシビリティを損なうテクニックがどれほどひどいかについて書いてきましたが、この問題を解決できなければ、他の人にはどのような希望があるのかと思いました。
私はそれから私の方法をプログラムすることにしました。
フォームをボットにとって魅力的にしないようにする#
コンタクトフォームをボットにとって魅力的にしないようにする必要がありました。 私はform要素のmethod
属性を削除し始めました。 method
属性がない場合、フォームを送信できないと考えました。残念ながら、属性が削除されたにもかかわらず、Netlifyはサイトが展開されたときにmethod属性をフォームに適用しましたが、これは私が制御できなかったものでJQueryを使用して属性を削除する#
ページがロードされた後、Javascript(jQuery)を使用してmethod
属性を動的に削除することにしました。 JQuery readyイベントを使用して、form要素が選択され、method
属性が削除されます。
$(function(){
$("#contactSubmission").removeAttr("method");
});
私は、送信する前に属性をフォーム要素に追加する方法を必要としました。 フォームが送信される前に属性が存在することを確認するために、順番に追加する必要がありました。
送信ボタンの置き換え#
さらに、submit
ボタンも削除することにしました。 submit
ボタンがないかどうかを判断すると、フォームはコンタクトフォームのように見えず、入力フィールドのコレクションのように見えるため、ヘッドレスブラウザ(スパマーがその技術を使用していた場合)を介して送信することはできません。
フォームの送信は、通常のbutton
要素を介してプログラムでのみ行われます。
<input type="button" value="Contact CANAXESS"
class="contactForm-button submit">
submit#
にmethod属性を追加する通常のボタンには、method属性と値をform要素に追加するclick
イベントハンドラがありました。
ボタンをクリックすると属性が追加されますが、スクリプト要素のタイミングが私が望んでいた方法とは逆に発生する場合があります。
これを克服するために、タイマー間隔を追加しました。 これにより、method
属性が存在しない場合、フォームは送信されません。method
属性が100ミリ秒ごとにform要素でmethod
属性を繰り返しチェックします。
$("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);
});
フォームの送信は、method
属性が存在する場合にのみ発生し、これはプログラムで発生します。 フォームが送信されると、インターバルタイマーが終了します。
clearInterval(checkExist);
私はこれがボットを止めるためにコンタクトフォームを設計するのにかなり効果的な方法だと思ったが、私の自信は続かなかった。 私は再び収集スパムメールを見つけるために数時間後に戻ってきました。
フォームの提出はHTTP#
を介して起こっていますが、ボットはおそらくブラウザを介してページを訪問していない可能性があります。
method属性は、ページがロードされたときに存在し、そこからHTMLの単純なスクレープと、ページと対話することなくHTTP postを介したフォームの送信です。
そして、それは私がスパムメールを遅くするだけでなく、それらを停止する技術を特定させたこの実現でした。 この技術を適用して以来、私は電子メールを持っていませんでした、何も、ジルチ。
ページをフォームから分離する#
この手法は、ページがロードされた後にJavascriptを介してフォームフラグメントをロードしています。 スパムボットの実現は、おそらく連絡先ページをナビゲートし、フォームを送信するためにヘッドレスブラウザを使用していない私は代わりに、ページがブラウ
ブラウザでレンダリングされる連絡先ページは一つのページですが、実際には二つの部分で構成されています。 フォームコンポーネントとフォームコンテンツ自体のプレースホルダーを持つメインページ。
<div></div>
ページにフォームをロードするload#
ページがロードされると、jQuery readyイベントは、追加のフォームフラグメントをフォームコンテナDIV
にほぼすぐにロードします。
フォームフラグメントページは、ボットが表示している最初のページにフォーム要素がないため、ボットによって識別されることはありません。要約すると、
<script>
$(function(){
$("#formContainer").load("formfragment.html");
});
</script>
#
この手法はJavascriptを動作させる必要があります。 Javascriptはweb開発の一部として受け入れられているので、特定の状況でスパムを停止する現実的な解決策だと思います。
ハニーポットフィールドを使用する他の手法は、私の経験からはそれほど効果的ではなかったので、常に問題があります。
スパムはまだ道を見つけるだろうし、私が正直であれば、ハニーポット技術はスパムリミッターとしてのみ分類することができ、スパムのインスタンスを
使用することはうまくいき、迅速な修正になりますが、その使用は障害を持つ人々のためにウェブをアクセス可能にすることを損なっています。
コンタクトフォームが通常のHTTP getリクエストの一部としてレンダリングされないようにすることで、ボットへの可視性が大幅に低下し、そのた
試してみるべきこと#
あなたのサイトが使用しているフレームワークに関係なく、あなたのコンタクトフォームがスパムによって侵害されている場合は、:
- ページとフォームを分離する
- ページがロードされた後にフォームをロードする
button
要素を使用してプログラムでフォームを送信するだけ- フォームの
method
属性を削除し、フォーム送信の一部として追加する