|
.NET TIPS [ASP.NET AJAX]NoBotコントロールでページにボット対策機能を追加するには?[2.0、3.0、3.5、C#、VB]山田 祥寛2008/04/10 |
![]() |
|
|
|
NoBotコントロールは、ASP.NET AJAX Control Toolkit(以降、Control Toolkit)で提供されるコントロールの1つで、簡易なボット対策を実装するためのコントロールだ。ボット(Bot)とは、サイトへの不正なアクセスや投稿などを行うことを目的としたプログラムのことだ。もしも読者諸氏が自分でブログや掲示板などを立ち上げているならば、一度ならずボットによるスパム投稿を経験したことがあるかもしれない。このようなスパム投稿は、多くの場合、人間が手作業で行っているわけではなく、ボットによる自動的な投稿である。
このようなスパム投稿を抑止するために比較的よく用いられているのが、CAPTCHA(Completely Automated Public Turing test to tell Computers and Humans Apart:キャプチャ)という手法だ。CAPTCHAは、フォームから情報を送信する際に、人間に画像上の文字を判読させ、これを投稿時に入力させる仕組みである。
![]() |
| CAPTCHA画像の例 |
このような画像をプログラム的に読み込むことは困難であるので、これを正しく判読できていれば、投稿者は(ボットではなく)人間であると見なすわけだ。これはボット対策として(完全ではないものの)極めて有効な方法であるが、ユーザビリティという観点からは問題もある。
というのも、投稿の都度、意味のない文字列を判読/入力しなければならないのは、善意のユーザーにとっては苦痛であるだけだし、そもそも視覚障害のあるユーザーにはこのようなサイトを利用することができないという問題もある。
そこで登場するのが、NoBotコントロールなのだ。NoBotコントロールは、CAPTCHAほどには確実ではないものの、ユーザーの手を煩わせないという意味でよりシンプルなボット対策の仕組みを提供する。具体的には、NoBotコントロールで提供されているプロパティを見てみるのが早いだろう。
| プロパティ | 概要 |
| ResponseMinimumDelaySeconds | 最小のポストバック間隔(秒) |
| CutoffWindowSeconds | 同一のIPアドレスから送信されるポストバックを追跡する時間間隔(秒) |
| CutoffMaximumInstances | CutoffWindowSecondsプロパティで指定された時間内で、単一のIPアドレスに許可される最大ポストバック数 |
| NoBotコントロールの主なプロパティ | |
このように、NoBotコントロールでは「ポストバック間の時間間隔」や「同じIPアドレスからの単位時間当たりのリクエスト数」を監視し、ある閾値(いきち:プロパティで設定した値)を超えたところで、該当するリクエストをボットによるものと判断するわけだ。繰り返しであるが、これは必ずしも確実な判断ではないかもしれない。
しかし、(例えば)人間が5秒の間に繰り返しポストバックを行うことは通常考えにくいし、ユーザーの手間を省くという点はその不確実性を補って余りあるメリットだろう。もちろん、設定によっては人間による正常な操作を妨げる可能性もないではないが、それほどの確実性を求めないサイトであれば、まずはNoBotコントロールの利用を検討してみてもよいだろう。
やや前置きが長くなってしまったが、それでは具体的にNoBotコントロールを利用したサンプルを作成してみよう。ここでは、フォームから5秒以内に続けて値を送信した場合にはエラーを出力するサンプルを紹介する。
![]() |
| 続けてフォーム送信を行った場合はエラーを表示 |
なお、本サンプルを動作させるに当たっては、「TIPS:[ASP.NET AJAX]ASP.NET AJAX Control Toolkitを利用するには?」で紹介した手順に従って、Control Toolkitを利用可能な状態にしておく必要がある。
1. 新規のWebフォームを作成する
新規のWebフォーム(NoBot.aspx)を作成したら、フォーム・デザイナから以下の画面の要領でサーバ・コントロールを配置する。
![]() |
||||||||||||||||||||
| NoBot.aspxのフォーム・レイアウト | ||||||||||||||||||||
| フォーム上に配置するコントロールと、そのプロパティの設定内容は以下のとおり。 | ||||||||||||||||||||
|
2. ボタン・クリック時のイベント・ハンドラを定義する
あとは、ボタン・クリック時に行うべきNoBotコントロールによる判定処理を定義するだけだ。
|
||
| ボタン・クリック時に行うべき判定処理のコード(NoBot.aspx)(上:C#、下:VB) |
リクエストがボットによるものであるかどうかを判定するのは、NoBot.IsValidプロパティの役割だ。IsValidプロパティは判定結果(ステータス情報)をパラメータに指定されたNoBotStateオブジェクトに格納する。ここでは、リクエストがボットとして判定された場合に、ステータス情報をそのまま文字列に変換したものをLabelコントロール上に表示するものとする。
以上を理解したら、作成したサンプルを実行してみよう。[コメント]ボタンを5秒以内に繰り返しクリックしたとき、本稿冒頭の画面のようにエラー・メッセージが表示されればNoBotコントロールは正しく動作している。![]()
| 利用可能バージョン:.NET Framework 2.0 利用可能バージョン:.NET Framework 3.0 利用可能バージョン:.NET Framework 3.5 カテゴリ:Webフォーム 処理対象:ASP.NET AJAX 使用ライブラリ:NoBotコントロール 関連TIPS:[ASP.NET AJAX]ASP.NET AJAX Control Toolkitを利用するには? 関連TIPS:[ASP.NET AJAX]AlwaysVisibleControlコントロールで常時表示されるパネルを定義するには? |
|
||||||||||||
| 「.NET TIPS」 |
ホワイトペーパー(TechTargetジャパン)
- LocalConnection APIと動的なスタイリング (2010/2/9)
Webページ上の複数のSilverlightアプリ間でメッセージ通信をする方法とは? コントロールの見た目を動的に設定する方法とは? - ASP.NET MVC 2:モデルの検証 (2010/2/8)
ASP.NET MVC 2で導入される入力検証機能を使った実装を紹介。シンプルな属性の追加によるエレガントな実装が可能となっている - ASP.NETによる3階層Webアプリ「ITブック」構築 (2010/2/5)
ちょっとした改造で、あなたのWebアプリは劇的に使いやすく、かっこよくなる。まずは元となるWebアプリを標準的手法で構築 - .NET TIPS - .NET開発のテクニックとヒント集 - (2010/2/4)
− カスタムMVCビューエンジンを利用するには?(活用編)
− フォーム全体へのドッキングでつまみを表示するには?
− リストボックスでTextBlockの文字列を折り返すには?
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |










