web-dev-qa-db-ja.com

このチェックボックスはどのように機能し、どのように使用できますか?

私は最近oneplusoneウェブサイトにサインアップしました https://account.oneplus.net/sign-up 、このチェックボックスrecaptchaに気づいた

checkbox recaptcha

どのように機能し、自分のサイトでどのように使用できますか?それらの不可解な単語/数字よりもはるかに良い:)

Recaptchaサイトでは、新しいrecaptchaメソッドについては言及していません... https://www.google.com/recaptcha/intro/index.html

149

これはreCAPTCHAのベータ版APIです。 JS APIのソースからこれを収集します。 https://www.google.com/recaptcha/api.js 「API2」を参照しています。そして、私もこれを見つけました: http://jaswsinc.com/recaptcha-ads/ どうやら彼らは彼らの「no CAPTCHA reCAPTCHA」の招待のみのベータを行ったようです。まだあなたのサイトで機能させることができます。ベータ版へのオプトインに関する情報は見つかりませんが、「CAPTCHA reCAPTCHAベータ版なし」を検索すると、Googleからメールを受け取って参加することを言及した多くの人々を見ることができます。

ベータ版を入手する場所を見つけたら、共有してください!それ以外の場合は、2015年に一般公開が予定されています...

30
Ian M

このエントリは元の質問には答えませんが、同様のソリューションを実装するのに役立ちます。 @IanMが言ったように、チェックボックスrecaptchaはベータ段階にあり、招待なしでは使用できません。

重要な編集Googleは新しいreCAPTCHAを導入しました

これはJavaScriptベースのCAPTCHAです。

ほとんどのスパムボットはJavaScriptを実行せず、表示されたテキストとDOMまたは必要なアクションとの相関関係を特定できないため、チェックボックスをクリックできません。

チェックボックスはまったくないことに注意してください。これは、CSSスタイルを設定したdiv要素にすぎません。 Spambotsはフォームの入力要素を埋めようとしていますが、CAPTCHAには入力がありません。チェックマークは別のdiv(cssクラス)​​です。

ボックスをクリックすると、ajaxリクエストがdivがクリックされたことをサーバーに通知し、サーバーはこの情報を一時ストレージに保存します(トークンにマークを付けます:このトークンは人間によってアクティブ化されました)。フォームを送信すると、非表示フィールドがアクティブ化されたトークンを送信し、サーバーがフォーム情報を検証すると、トークンがアクティブ化されたことを認識します。トークンがアクティブ化されていない場合、フォームは無効になります。

箇条書きの手順:

  • 一意の識別子を生成し、非表示の入力でフォームに追加します
  • サイトでチェックボックスをレンダリングし(<input>要素を使用せず、場合によっては<div>を使用)、以前に生成された識別子を追加します(html5 data-*属性を使用できます)
  • ユーザーがチェックボックスをクリックすると、ajaxリクエストがサーバーに送信され、CAPTCHAが有効であれば、in useとしてマークされます。 (結果を表示する-識別子はOK/OKではない-ユーザーに対して)
  • ユーザーがフォームを送信すると、フォームのデータに識別子が含まれます。もう一度確認してください。存在し、in use状態になっているはずです。
  • すべての検証に合格すると、フォームのデータを使用/処理する準備が整います

識別子をユーザーのセッション、IPアドレスにバインドしたり、制限時間を使用してセキュリティを改善したりできます。

NOTEこの種類のCAPTCHAは、JavaScriptが有効な場合にのみ機能します!

NOTE(編集1)@crazypotatoが述べたように、JavaScriptを実行できる自動化ツールがいくつかあり、これらのツールは適切なAJAXチェックボックスdivでClickイベントを要求して起動します。

NOTE(編集2)特定の1つのサイトに書き込まれたスクリプトまたは1つのタイプのキャプチャを解除するスクリプトは遅かれ早かれ通過することに注意してください。究極の保護はありません。ボット(またはその開発者)をより厳しくすることができます。

NOTE(編集3)この回答の手順と説明には、このタイプのキャプチャに関する基本情報のみが含まれています。常に追加する必要がありますより安全にするための検証とセキュリティ手順。たとえば、GoogleのnoCaptchaは、3回の「divクリック」の後に標準のreCaptchaを体系的に起動します。

114
Pred

PHPで問題なく実行されているコードを次に示します。

クライアント側:

<div class="g-recaptcha" data-sitekey="PUBLIC_KEY"></div>

サーバー側:

if (isset($_POST['g-recaptcha-response'])) {
    $captcha = $_POST['g-recaptcha-response'];
    $privatekey = "SECRET_KEY";
    $url = 'https://www.google.com/recaptcha/api/siteverify';
    $data = array(
        'secret' => $privatekey,
        'response' => $captcha,
        'remoteip' => $_SERVER['REMOTE_ADDR']
    );

    $curlConfig = array(
        CURLOPT_URL => $url,
        CURLOPT_POST => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_POSTFIELDS => $data
    );

    $ch = curl_init();
    curl_setopt_array($ch, $curlConfig);
    $response = curl_exec($ch);
    curl_close($ch);
}

$jsonResponse = json_decode($response);

if ($jsonResponse->success == "true")
    doSomething();
else
    doSomeOtherThing();

:)

9
ismaestro

私は検索でここに来ましたが、答えが見つかりませんでしたので、検索を続けました。

私の検索後、このウィンドウはまだ開いていたので、この投稿を私の調査結果で更新しています。

ここでreCAPTCHAについて学ぶことができます:

http://scraping.pro/no-captcha-recaptcha-challenge/

ただし、基本的には、これをWebページに追加します。

<script src="https://www.google.com/recaptcha/api.js" >;
<form method="post">
    <div class="g-recaptcha" data-sitekey="[site key issued by google]"></div>
    <input value="submit" type="submit" />
</form>

reCAPTCHAキーを取得するには、次のGoogleサイトにアクセスしてください。

https://www.google.com/recaptcha/intro/index.html

上記のリンクを使用してキーを取得したら、次のGoogle情報を使用してこのコーディングの詳細を確認できます。

https://developers.google.com/recaptcha/

注意:

Googleのドキュメントから:

スクリプトはHTTPSプロトコルを使用してロードする必要があり、ページ上の任意のポイントから制限なしに含めることができます。

これがどのように機能するかの例を次に示します。

<html>
<head>
    <title>Contact</title>
    <script src="https://www.google.com/recaptcha/api.js" async defer></script>
    <script>
    var onloadCallback = function () {
        grecaptcha.render('dvCaptcha', {
            'sitekey': '<%=ReCaptcha_Key %>',
            'callback': function (response) {
                $.ajax({
                    type: "POST",
                    url: "CS.aspx/VerifyCaptcha",
                    data: "{response: '" + response + "'}",
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function (r) {
                        var captchaResponse = jQuery.parseJSON(r.d);
                        if (captchaResponse.success) {
                            $("[id*=txtCaptcha]").val(captchaResponse.success);
                            $("[id*=lblAlarm]").hide();
                        } else {
                            $("[id*=txtCaptcha]").val("");
                            $("[id*=lblAlarm]").show();
                            var error = captchaResponse["error-codes"][0];
                            $("[id*=lblAlarm]").html("RECaptcha error. " + error);
                        }
                    }
                });
            }
        });
    };
    </script>
</head>
<body>
    <form action="?" method="POST">
        <div id="dvCaptcha" class="g-recaptcha" data-sitekey="[site key issued by google]"></div>
        <br />
        <asp:Button ID="btnSubmit" runat="Server" Text="Send" OnClick="btnSubmit_Click" />
        <asp:Label ID="lblAlarm" runat="server" ForeColor="Red"></asp:Label>
    </form>
</body>
</html>

ASP.NETコードビハインドで検証する必要がある場合は、「g-recaptcha-response」コントロールが入力されていることを確認するだけです。

protected static string ReCaptcha_Key, ReCaptcha_Secret;

protected void btnSubmit_Click(object sender, EventArgs e)
{
    if (!String.IsNullOrEmpty(Request.Form["g-recaptcha-response"]))
    {
        // other code
    } else
    {
       lblAlarm.Text = "reCAPTCHA failed.";
    }
}

うまくいけば、あなたの何人かがこれが役に立つと思うでしょう。

5
jp2code

このスレッドへの貢献に感謝します。新しいrecaptchaツールに興味を持っている多くの人々を見るのは素晴らしいことです。

私はそれの.net実装を見つけることができなかったので、ここで見つけることができる単純なWebフォームコントロールを構築しました https://github.com/pnmcosta/recaptchav2dotnet

3