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


150

最近、oneplusone Webサイトhttps://account.oneplus.net/sign-upにサインアップしましたが、このチェックボックスが再キャプチャされていることに気付きました

チェックボックスの再キャプチャ

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

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


14
まったく同じ場所で見たのですが、まったく同じことを疑問に思いました。私は注目を集めるために賞金を上げています。私も知りたいです。
マダラのゴースト

多分それはテスト中であり、まだリリースされる準備ができていませんか?
user3791372

1
これを行う簡単な方法$('form input[type=submit]') .before('<div>Are you a human? <input type="checkbox" name="captcha" /></div>');は、フォームの一部ではないため、ボットがチェックボックスをオンにしないことです。jsfiddle.net/s6jkchmz
TylerH

1
非常に魅力的な入力フィールドを(「コメント」のように)フォームに入れ、css / jsでそれを非表示にするハニーポットメソッドもあります。データが存在する場合、送信者はボットです。私はこれを使用しましたが、驚くほどうまくいきます。
デビッドH.ベネット14

回答:


30

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

ベータ版に参加する場所を見つけたら、共有してください!それ以外の場合は、2015年に一般公開が行われるようです...


1
あなたは可能性が一緒に使用フランケンシュタインのものにしようとgstatic.com/recaptcha/api2/r20140903161709/recaptcha__en.jsをあなたは「G-reCAPTCHAの」検索する場合、あなたはあるコードを見つけることができるか、「チェックボックス」「私はロボットじゃありません」そこに実装します。
Ian M

3
メールからの抜粋:We expect to move all existing reCAPTCHA sites to the new API in 2015.
ティモシーゾーン2014

1
新しいCAPTCHAなしのreCAPTCHA機能を発表したGoogleのブログ投稿は次のとおり
2014/12

4
これはどこで説明されていNo CAPTCHA reCAPTCHAますか?
Nikhil Girraj 2015年

5
@ NikhilGirraj、CAPTCHA reCAPTCHAが機能しない方法を知りたい場合は、この投稿を参照してください
Igor Savinkin 2015

114

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

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

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

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

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

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

箇条書きの手順:

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

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

この種類のキャプチャは、JavaScriptが有効になっている場合にのみ機能します。

(編集1)@crazypotatoが述べたように、JavaScriptを実行できる自動化ツールがいくつかあります。これらのツールは、適切なAJAXリクエストを送信し、チェックボックスdivでClickイベントを発生させることもできます。

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

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


4
問題は特に「GoogleのreCAPTCHAでこの機能を有効にするにはどうすればよいですか?」これを自分で実装できると私は確信していますが、彼らのケースではそれほど単純ではありません。
マダラのゴースト14

ストリートビューページの下部にある[問題の報告]をクリックすると、同じ新しいRecaptchaが表示されます。それは私が最初にそれを見て、私が検索に行ったときにこのSOページを見つけた場所です。
user2605793 2014年

1
ボットがそのajaxリクエストを送信できないのは何ですか?全員(または準大規模サイト)がこのようなCAPTCHAを実装するとしたら、とにかくそれは悪用されるでしょう。Cloudflareにも同様のボット検出システムがあり、ユーザーが何もしなくても機能するようです。
SteenSchütt、2014年

まず第一に、私はあなたのコメントに完全に同意します。そうです、1つのサイトを悪用するために直接記述されたボットは通過します(これはあらゆる種類のキャプターに当てはまります)。私は私のポストを開始most botsしていませんall bots。画像ベースのキャプチャブレーカーが画像をソフトウェアに送信し、人間が文字を入力するだけのソリューションもあります(雇用者は成功した投稿の数によって支払われます)。これをどのように防止しますか?:)
2014年

1
@Pred「スパムボットはフォームの入力要素を入力しようとしていますが、CAPTCHAに入力がありません。」それは哀れです。jackiechanface.jpg
crazypotato 14

9

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();

:)


クライアント側/ htmlコードの一部を省略していませんか?あなたのPHPコードであなたが名前の付いた投稿に対してチェックしているので尋ねるだけですg-recaptcha-responseが、そのような要素はクライアント側のコードで定義されていません...私は何かが足りないのですか?
ベノマティス

5

私は検索でここに来て、答えが見つからなかったので、検索を続けました。

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

ここで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.";
    }
}

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


3

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.