【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
 

.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のフォーム・レイアウト
フォーム上に配置するコントロールと、そのプロパティの設定内容は以下のとおり。
コントロール(ID値) プロパティ 設定値
ToolkitScriptManager(manager*1
TextBox(txtComm) Columns 50
Button(btnComm) Text コメント
Label(lblBot) ForeColor Red
Text △(ブランク)
NoBot(bot) ResponseMinimumDelaySeconds 5
*1 ToolkitScriptManagerコントロールは、Control Toolkitを利用する場合に必ず必要となるコントロールである。詳細については、「TIPS:[ASP.NET AJAX]AlwaysVisibleControlコントロールで常時表示されるパネルを定義するには?」を参照してほしい。

2. ボタン・クリック時のイベント・ハンドラを定義する

 あとは、ボタン・クリック時に行うべきNoBotコントロールによる判定処理を定義するだけだ。

protected void btnComm_Click(Object sender, System.EventArgs e) {

  NoBotState bstate;

  // リクエストがボットによるものであるかどうかを判定
  if (!bot.IsValid(out bstate)) {
    // ボットと判定された場合はエラーを表示
    lblBot.Text = "NoBotエラー:" + bstate.ToString();
  } else {
    lblBot.Text = "";
  }
}
Protected Sub btnComm_Click(ByVal sender As Object, ByVal e As System.EventArgs)

  Dim bstate As NoBotState

  ' リクエストがボットによるものであるかどうかを判定
  If Not bot.IsValid(bstate) Then
    ' ボットと判定された場合はエラーを表示
    lblBot.Text = "NoBotエラー:" & bstate.ToString()
  Else
    lblBot.Text = ""
  End If
End Sub
ボタン・クリック時に行うべき判定処理のコード(NoBot.aspx)(上:C#、下:VB)

 リクエストがボットによるものであるかどうかを判定するのは、NoBot.IsValidプロパティの役割だ。IsValidプロパティは判定結果(ステータス情報)をパラメータに指定されたNoBotStateオブジェクトに格納する。ここでは、リクエストがボットとして判定された場合に、ステータス情報をそのまま文字列に変換したものをLabelコントロール上に表示するものとする。

 以上を理解したら、作成したサンプルを実行してみよう。[コメント]ボタンを5秒以内に繰り返しクリックしたとき、本稿冒頭の画面のようにエラー・メッセージが表示されればNoBotコントロールは正しく動作している。End of Article

利用可能バージョン:.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
[ASP.NET AJAX]ASP.NET AJAX Control Toolkitを利用するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」

ホワイトペーパーTechTargetジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

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