ボットと戦う (C#)
自動ボットは、スパムを含む石膏 Web ログやその他の Web サイトを作成し、ユーザーの操作なしでコメント フォームを送信します。 ASP.NET AJAX Control Toolkit の NoBot コントロールは、これらのボットとの戦いに役立ちます。
概要
自動ボットは、スパムを含む石膏 Web ログやその他の Web サイトを作成し、ユーザーの操作なしでコメント フォームを送信します。 ASP.NET AJAX Control Toolkit の NoBot コントロールは、これらのボットとの戦いに役立ちます。
手順
ボットを倒す一般的なアプローチの 1 つは、CAPTCHA 完全に自動化されたパブリック チューリング テストを使用して、コンピューターと人間の区別を伝えることです。 チューリングテストはもともと、コミュニケーションパートナーが人間か機械かを判断する必要があるテストでした。 Web では、CAPTCHA は通常、歪んだ文字を含む画像で構成されます。 この考え方は、画像上の文字を読み取ることができるのは人間だけですが、OCR アルゴリズムは失敗します。
このアプローチにはいくつかの利点と欠点がありますが、これについては、このチュートリアルの範囲を超えています。 ただし、ASP.NET AJAX Control Toolkit には、次のようなアプローチを提供するコントロールがあります。 NoBot
CAPTCHAよりも簡単に克服できますが、使用は非常に簡単で、ほとんどのスパム試行が失敗した NoBot
場合に成功と見なされるブログのようなウェブサイトでは非常によく料金が発生します。
NoBot
これらの条件の少なくとも 1 つが満たされた場合、現在の ASP.NET Web フォームのポストバックをインターセプトします。
- ブラウザーで JavaScript パズルの解決に失敗する (JavaScript が非アクティブ化された場合など)
- ユーザーがフォームを高速に送信した
- クライアント IP アドレスは、一定の期間にフォームを送信する頻度が高すぎます。
これらの条件をチェックするために、コントロールには次のNoBot
属性が必要です (これらはすべて省略可能)。
ResponseMinimumDelaySeconds
ポストバック間の最小秒数CutoffWindowSeconds
1 つの IP からのポストバックがメジャーである時間間隔の長さCutoffMaximumInstances
時間間隔あたりの最大秒数
次のマークアップでは、ポストバックの間に少なくとも 2 秒が経過し、30 秒以内にポストバックが 5 つ以下であることを要求しています。
<ajaxToolkit:NoBot ID="nb" runat="server" CutoffMaximumInstances="5"
CutoffWindowSeconds="30" ResponseMinimumDelaySeconds="2" />
その後、通常どおり、 をページに含め ScriptManager
、ASP.NET AJAX ライブラリが読み込まれ、Control Toolkit を使用できるようにします。
<asp:ScriptManager ID="asm" runat="server" />
ほとんどのチェックNoBot
はサーバー側で行われるので、これらの検証の結果をチェックする必要があります。 これを行うには、 の IsValid()
メソッドを呼び出NoBot
します。 これには、 型NoBotState
の 1 つの引数 (パラメーター/ByRef
パラメーターとしてout
) があります。 その文字列表現には、チェックが失敗した理由がValid
含まれます。それ以外の場合は 。 次のコードは、 の結果に従ってメッセージを NoBot
出力します。
<script runat="server">
void Page_Load()
{
if (Page.IsPostBack)
{
NoBotState state;
if (!nb.IsValid(out state))
{
Label1.Text = "Data refused ("
+ HttpUtility.HtmlEncode(state.ToString()) + ")";
}
else
{
Label1.Text = "Data entered.";
}
}
}
</script>
最後に、送信するフォームと、メッセージを出力するための label 要素が必要です。これで完了です。
Your comment:
<asp:TextBox ID="TextBox1" runat="server" TextMode="MultiLine"/><br />
<input type="submit" id="Submit1" runat="server" value="Submit Form" /><br />
<asp:Label ID="Label1" runat="server" />
このスクリプトを実行して JavaScript を非アクティブ化するか、最初の 2 秒以内にフォームを送信するか、30 秒以内に 7 回フォームを送信すると、エラー メッセージが表示されます。 ただし、このコントロールは慎重に使用します。JavaScript がアクティブ化されているユーザーは約 90 ~ 95% であるため、ユーザーの 5 ~ 10% は テストに失敗 NoBot
します。
このエラー メッセージはボットによって発生している可能性があります (クリックするとフルサイズの画像が表示されます)
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示