security - 通らない - 私はロボットではありません チェックできない




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

最近oneplusoneウェブサイト https://account.oneplus.net/sign-up にサインアップしましたが、このチェックボックスがreaptchaであることに気付きました

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

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


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

:)


このスレッドにご協力いただきありがとうございます。多くの人が新しいrecaptchaツールに興味を持っているのを見るのは素晴らしいことです。

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


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

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

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

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


このエントリは元の質問には答えませんが、同様のソリューションを実装するのに役立ちます。 @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アドレスにバインドしたり、制限時間を使用してセキュリティを改善したりできます。

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

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

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

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





recaptcha