【ASP.NET MVC】 reCAPTCHAを使ってBOTからサイトを防御する方法

エンジニアの武田です。
今回は、メールの送信フォームなどBOTから攻撃を受けてしまうと困ってしまう!!
そんな悩みを持つエンジニアさんも多いのではないのでしょうか?
そこで、googleのreCAPTCHAを使用してBOTから守る方法を説明します。

■前提知識

  1. ASP.NET
  2. MVCモデル

■マニュアルの構成

  1. NuGetパッケージの管理からreCaptchaMvcExtensionsをインストールする
  2. CodePlexからMvcReCaptchaをダウンロードしてソリューションにセットアップする
  3. 「reCaptcha」を[Views]に配置して[Controllers]で入力取得する

■1. NuGetパッケージの管理からreCaptchaMvcExtensionsをインストールする

  • 1.1. ソリューションの「参照設定」を右クリックして、「NuGetパッケージの管理」を選択する
  • 1.2. NuGet公式パッケージソースで「reCAPTCHA」を検索して「reCaptchaMvcExtensions」をインストールする

  • 1.3. ソリューションの参照設定に「Recaptcha」と「Recaptcha.MvcModel」がインストールされていることを確認する

■2. CodePlexからMvcReCaptchaをダウンロードしてソリューションにセットアップする

  • 2.1. MvcReCaptchaにアクセスしてファイルをダウンロードする

  • 2.2. ダウンロード完了後、ファイルを解凍して下記のファイルをModelsに配置する

  • 2.3. ソリューションの「web.config」を開き、「appSettings」に下記の設定を追加する

ASPNETMVC_reCAPTCHA_005

※「PRIVATE KEY」と「PUBLIC KEY」はreCaptchaから入手してください。

  • 2.4. ソリューションの「web.config」を開き、「namespaces」に下記の設定を追加する
    ASPNETMVC_reCAPTCHA_006
    ※「Models/MvcReCaptcha/Helpers/GenerateCaptcha.cs」のnamespaceを設定してください。

■3. 「reCaptcha」を[Views]に配置して[Controllers]で入力取得する

  • 3.1. [Views]のHeader内に「Models/MvcReCaptcha/Helpers/GenerateCaptcha.cs」のnamespaceを追加する
//
@using Models.MvcReCaptcha.Helpers
  • 3.2. [Views]のFoam内に「reCaptcha」を配置する
//
@using (Html.BeginForm("アクション名", ""))
{
  @Html.Raw(Html.GenerateCaptcha())
}
  • 3.3. [Controllers]のActionに「CaptchaValidator」を配置する
//
[CaptchaValidator]
public ActionResult アクション名(bool captchaValid)
{
  if (captchaValid)
  {
    //成功
  }
  else
  {
    //失敗
  }
}
  • 3.4. ソリューションを実行して画面上に下記の画像が表示されたら完了です

ASPNETMVC_reCAPTCHA_007

■4. 参考URL

  1. [wikipedia] http://ja.wikipedia.org/wiki/ReCAPTCHA
  2. [recaptcha] http://www.google.com/recaptcha
  3. [google] https://developers.google.com/recaptcha/docs/aspnet?hl=ja
  4. [codeplex] http://mvcrecaptcha.codeplex.com/