次の方法で共有


CAPTCHA を使用してボットが ASP.NET Web (Razor) サイトを使用することを防ぐ

作成者: Microsoft

この記事では、ReCaptcha (セキュリティ対策) を使用して、自動プログラム (ボット) が ASP.NET Web ページ (Razor) の Web サイトでタスクを実行することを防ぐ方法を説明します。

学習内容:

  • CAPTCHA テストをサイトに追加する方法。

この記事で紹介する ASP.NET 機能は以下のとおりです。

  • ReCaptcha ヘルパー。

Note

この記事の情報は、ASP.NET Web ページ 1.0 および Web ページ 2 に適用されます。

CAPTCHA について

人々にサイトへの登録を許可したり、(ブログ コメントなどのために) 名前や URL の入力を許可するだけでも、大量の偽の名前を受け取ることになる可能性が常に存在します。 これらは多くの場合、見つけることができるすべての Web サイトに URL を残そうとする自動プログラム (ボット) によるものです。 (一般的な動機は、販売する製品の URL を投稿することです。)

CAPTCHA を使用して、ユーザーが登録を行う、または名前とサイトを入力する際にユーザーを検証することで、ユーザーがコンピューター プログラムではなく実在の人物であることを確認できます。 CAPTCHA は、Completely Automated Public Turing test to tell Computers and Humans Apart (コンピューターと人間を区別する完全に自動化された公開チューリング テスト) の略です。 CAPTCHA は、ユーザーが人間にとっては簡単に実行できても、自動プログラムにとっては実行が困難な何かを実行することを求められる "チャレンジレスポンス" テストです。 CAPTCHA の最も一般的な種類は、いくつかの歪んだ文字が表示され、それらを入力するように求められるものです。 (この歪みにより、ボットによる文字の解読が困難になることが想定されています)。

ReCaptcha テストの追加

ASP.NET ページでは、ReCaptcha ヘルパーを使用して、ReCaptcha サービスを基にした CAPTCHA テストをレンダリングできます。 ReCaptcha ヘルパーは、ページの検証前にユーザーが正しく入力する必要がある 2 つの歪んだ単語の画像を表示します。 ユーザー応答は、ReCaptcha.Net サービスによって検証されます。

Screenshot of the Captcha test generated by the ReCaptcha service, showing two distorted words and a text field for user verification.

  1. Web サイトを ReCaptcha サービスに登録します。 登録が完了すると、公開キーと秘密キーが送られてきます。

  2. ASP.NET Web ページ サイトへのヘルパーのインストール」の中で説明されているように、(まだ行っていない場合は) ASP.NET Web ヘルパー ライブラリを Web サイトに追加します。

  3. _AppStart.cshtml ファイルがまだない場合は、Web サイトのルート フォルダーに _AppStart.cshtml という名前のファイルを作成します。

  4. _AppStart.cshtml ファイルに次の Recaptcha ヘルパー設定を追加します。

    @using Microsoft.Web.Helpers;
    @{
      // Add the PublicKey and PrivateKey strings with your public
      // and private keys. Obtain your PublicKey and PrivateKey
      // at the ReCaptcha.Net (http://recaptcha.net) website.
      ReCaptcha.PublicKey = "your-public-key";
      ReCaptcha.PrivateKey = "your-private-key";
    }
    
  5. 自分自身の公開キーと秘密キーを使用して、PublicKey および PrivateKey プロパティを設定します。

  6. _AppStart.cshtml ファイルを保存して閉じます。

  7. Web サイトのルート フォルダーに Recaptcha.cshtml という名前の新しいページを作成します。

  8. 既存のコンテンツを次に置き換えます。

    @using Microsoft.Web.Helpers;
    @{
      var showRecaptcha = true;
      if (IsPost) {
        if (ReCaptcha.Validate()) {
            @:Your response passed!
            showRecaptcha = false;
        }
        else{
          @:Your response didn't pass!
        }
      }
    }
    <!DOCTYPE html>
    <html>
        <head>
            <title>Testing Global Recaptcha Keys</title>
        </head>
        <body>
        <form action="" method="post">
        @if(showRecaptcha == true){
            if(ReCaptcha.PrivateKey != ""){
                <p>@ReCaptcha.GetHtml()</p>
                <input type="submit" value="Submit" />
            }
            else {
                <p>You can get your public and private keys at
                the ReCaptcha.Net website (http://recaptcha.net).
                Then add the keys to the _AppStart.cshtml file.</p>
            }
        }
        </form>
        </body>
    </html>
    
  9. ブラウザーで Recaptcha.cshtml ページを実行します。 PrivateKey 値が有効な場合、ページには ReCaptcha コントロールとボタンが表示されます。 _AppStart.html でキーをグローバルに設定していない場合、ページにはエラーが表示されることになります。

    Screenshot of the Recaptcha dot c s h t m l browser page, showing the created captcha and Submit buttons.

  10. テスト用の単語を入力します。 ReCaptcha テストに合格すると、その効果を示すメッセージが表示されます。 それ以外の場合は、エラー メッセージが表示され、ReCaptcha コントロールが再表示されます。

Note

コンピューターがプロキシ サーバーを使用するドメイン上にある場合は、Web.config ファイルの defaultproxy 要素を構成する必要があります。 次の例は、ReCaptcha サービスが機能するように構成された defaultproxy 要素を含む Web.config ファイルを示しています。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.net>
      <defaultProxy>
         <proxy
            usesystemdefault = "false"
            proxyaddress="http://myProxy.MyDomain.com"
            bypassonlocal="true"
            autoDetect="False"
         />
      </defaultProxy>
   </system.net>
</configuration>

その他のリソース