Wie funktioniert dieses Kontrollkästchen recaptcha und wie kann ich es verwenden?

149

Ich habe mich kürzlich auf der oneplusone-Website https://account.oneplus.net/sign-up angemeldet und festgestellt, dass dieses Kontrollkästchen erneut aktiviert wurde

Kontrollkästchen recaptcha

Wie funktioniert es und wie kann ich es auf meinen Websites verwenden? Viel besser als diese kryptischen Wörter / Ziffern :)

Auf der Recaptcha-Website wird keine neue Recaptcha-Methode erwähnt ... https://www.google.com/recaptcha/intro/index.html

Pedro Maia Costa
quelle
14
Ich sah es genau an der gleichen Stelle und fragte mich genau das Gleiche. Ich stelle ein Kopfgeld auf, um Aufmerksamkeit zu erregen. Ich bin auch neugierig.
Madaras Geist
Vielleicht ist es im Test und noch nicht bereit, veröffentlicht zu werden?
user3791372
1
Eine einfache Möglichkeit, dies zu tun, besteht darin, dass $('form input[type=submit]') .before('<div>Are you a human? <input type="checkbox" name="captcha" /></div>');Bots das Kontrollkästchen nicht aktivieren, da es nicht Teil des Formulars ist. jsfiddle.net/s6jkchmz
TylerH
1
Es gibt auch die Honeypot-Methode, ein unwiderstehliches Eingabefeld in das Formular einzufügen (wie 'Kommentare') und es dann mit css / js auszublenden. Wenn die Daten vorhanden sind, ist der Absender ein Bot. Ich habe das benutzt und es funktioniert überraschend gut.
David H. Bennett
2
Zu Ihrer Information: googleonlinesecurity.blogspot.hu/2014/12/…
Pred

Antworten:

30

Dies ist eine Beta-API für reCAPTCHA. Ich entnehme dies der Quelle ihrer JS-API: https://www.google.com/recaptcha/api.js, die auf "API2" verweist. Und ich fand auch Folgendes : http://jaswsinc.com/recaptcha-ads/ Anscheinend haben sie eine Beta-Version ihres "no CAPTCHA reCAPTCHA" nur mit Einladung erstellt. Also ... Sie werden wahrscheinlich nicht in der Lage sein, es zum Laufen zu bringen Ihre Website noch. Ich kann keine Informationen zur Teilnahme an der Beta finden, aber wenn Sie nach "No CAPTCHA reCAPTCHA beta" suchen, sehen Sie eine Reihe von Personen, die erwähnt haben, dass sie die E-Mail von Google erhalten, damit sie beitreten können.

Wenn Sie einen Platz für die Beta finden, teilen Sie ihn bitte mit! Ansonsten sieht es so aus, als ob die Veröffentlichung im Jahr 2015 kommt ...

Ian M.
quelle
1
Sie könnten versuchen, mit gstatic.com/recaptcha/api2/r20140903161709/recaptcha__en.js etwas zusammen zu frankenstein, wenn Sie nach "g-recaptcha", "Ich bin kein Roboter" oder "Kontrollkästchen" suchen, finden Sie den Code, der ist dort umsetzen.
Ian M
3
Auszug aus der E-Mail:We expect to move all existing reCAPTCHA sites to the new API in 2015.
Timothy Zorn
1
Hier ist Googles Blog - Post die neue No CAPTCHA reCAPTCHA Feature ankündigen: googleonlinesecurity.blogspot.com/2014/12/...
Nealvs
4
Wo erklärt das, wie das Neue No CAPTCHA reCAPTCHAfunktioniert?
Nikhil Girraj
5
@NikhilGirraj, wenn Sie wissen möchten, wie No CAPTCHA reCAPTCHA funktioniert , verweise ich Sie auf diesen Beitrag .
Igor Savinkin
114

Dieser Eintrag beantwortet nicht die ursprüngliche Frage, hilft jedoch bei der Implementierung einer ähnlichen Lösung. Wie @IanM sagte, befindet sich das Kontrollkästchen recaptcha in der Beta-Phase und kann nicht ohne Einladung verwendet werden.

WICHTIGE BEARBEITUNG Google hat das neue reCAPTCHA eingeführt

Dies ist ein JavaScript-basiertes CAPTCHA.

Da die meisten Spambots kein JavaScript ausführen und die Korrelation zwischen dem angezeigten Text und dem DOM oder den erforderlichen Aktionen nicht identifizieren können, können sie nicht auf das Kontrollkästchen klicken.

Bitte beachten Sie, dass es überhaupt kein Kontrollkästchen gibt, sondern nur ein div-Element mit etwas CSS-Stil. Spambots versuchen, die Formulareingabeelemente auszufüllen, aber es gibt keine Eingabe in CAPTCHA. Das Häkchen ist nur ein weiteres div (CSS-Klasse).

Wenn Sie auf das Feld klicken, benachrichtigt eine Ajax-Anfrage den Server, dass auf das Div geklickt wurde, und der Server speichert diese Informationen in einem temporären Speicher (markiert das Token: Dieses Token wurde von einem Menschen aktiviert). Wenn Sie das Formular senden, sendet ein verstecktes Feld das aktivierte Token. Wenn der Server die Formularinformationen überprüft, erkennt er, dass das Token aktiviert wurde. Wenn das Token nicht aktiviert ist, wird das Formular ungültig.

Die Schritte in Aufzählungszeichen:

  • Generieren Sie einen eindeutigen Bezeichner und fügen Sie ihn mit einer versteckten Eingabe zum Formular hinzu
  • Rendern Sie ein Kontrollkästchen auf der Site (ohne das <input>Element zu verwenden, möglicherweise mit <div>) und fügen Sie den zuvor generierten Bezeichner hinzu (Sie können die HTML5- data-*Attribute verwenden).
  • Wenn der Benutzer auf das Kontrollkästchen klickt, senden Sie eine Ajax-Anfrage an den Server und validieren Sie das CAPTCHA. Wenn es gültig ist, markieren Sie es als in use. (Zeigen Sie dem Benutzer das Ergebnis - Kennung ist OK / nicht OK -)
  • Wenn der Benutzer das Formular sendet, enthalten die Daten des Formulars die Kennung. Überprüfen Sie es noch einmal, es sollte existieren und es sollte in einem in useZustand sein.
  • Wenn alle Überprüfungen bestanden sind, können die Daten des Formulars verwendet / verarbeitet werden

Sie können die Kennung an die Sitzung, die IP-Adresse des Benutzers binden und / oder Zeitlimits verwenden, um die Sicherheit zu verbessern.

HINWEIS Diese Art von CAPTCHA funktioniert nur, wenn JavaScript aktiviert ist!

HINWEIS (Bearbeiten 1) Wie @crazypotato feststellte, gibt es einige Automatisierungstools, die JavaScript ausführen können. Diese Tools können auch die richtige AJAX-Anforderung senden und das Click-Ereignis im Kontrollkästchen div auslösen.

HINWEIS (Bearbeiten 2) Bitte beachten Sie, dass ein Skript, das speziell für eine Site geschrieben wurde oder um eine Art von Captcha zu brechen, früher oder später durchkommt. Es gibt keinen ultimativen Schutz, Sie können nur die Bots (oder ihre Entwickler) härter arbeiten lassen.

HINWEIS (Bearbeiten 3) Die Schritte und die Beschreibung in dieser Antwort enthalten nur einige grundlegende Informationen zu dieser Art von Captcha. Sie müssen immer zusätzliche Überprüfungen und Sicherheitsschritte hinzufügen, um die Sicherheit zu erhöhen. Beispielsweise löst Google noCaptcha systematisch ein Standard-reCaptcha nach 3 "Div-Klicks" aus.

Pred
quelle
4
Ich denke, die Frage bezieht sich speziell auf "Wie aktiviere ich diese Funktion mit Googles reCAPTCHA?" Ich bin ziemlich zuversichtlich, dass ich dies selbst umsetzen kann, aber es ist nicht so einfach mit ihrem Fall.
Madaras Geist
Wenn Sie unten auf einer Streetview-Seite auf Problem melden klicken, erhalten Sie dasselbe neue Recaptcha. Dort habe ich es zum ersten Mal gesehen und diese SO-Seite gefunden, als ich auf die Suche ging.
user2605793
1
Was würde einen Bot daran hindern, diese Ajax-Anfrage zu senden? Wenn jeder (oder eine halbgroße Site) ein CAPTCHA wie dieses implementieren würde, würde es sicherlich trotzdem ausgenutzt werden. Cloudflare verfügt über ein ähnliches Bot-Erkennungssystem, das zu funktionieren scheint, ohne dass der Benutzer etwas tun muss.
Steen Schütt
Zuallererst stimme ich Ihrem Kommentar voll und ganz zu, und ja, ein Bot, der direkt geschrieben wurde, um eine Site auszunutzen, wird durchgespielt (und dies gilt für jede Art von Capthas). Ich habe meinen Beitrag mit begonnen most botsund nicht all bots. Es gibt auch Lösungen, wenn der bildbasierte Captcha-Breaker das Bild einfach an eine Software sendet und ein Mensch die Zeichen eingibt (und der Mitarbeiter durch die Anzahl der erfolgreichen Beiträge bezahlt wird). Wie würden Sie das verhindern? :)
Pred
1
@Pred "Spambots versuchen, die Formulareingabeelemente auszufüllen, aber es gibt keine Eingabe in CAPTCHA." Das ist erbärmlich. jackiechanface.jpg
crazypotato
9

Hier läuft mein Code ohne Probleme in PHP:

Kundenseite:

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

Serverseite:

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

:) :)

ismaestro
quelle
Haben Sie nicht einige Teile des clientseitigen / HTML-Codes ausgelassen? g-recaptcha-responseIch frage nur, weil Sie in Ihrem PHP-Code einen Beitrag mit dem Namen prüfen, aber in Ihrem clientseitigen Code kein solches Element definiert ist. Fehlt mir etwas?
Benomatis
5

Ich kam auf meiner Suche hierher, sah keine Antwort und suchte weiter.

Nach meiner Suche war dieses Fenster noch geöffnet, daher aktualisiere ich diesen Beitrag mit meinen Ergebnissen.

Hier erfahren Sie mehr über reCAPTCHA :

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

Grundsätzlich fügen Sie dies jedoch Ihrer Webseite hinzu:

<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>

Um Ihre reCAPTCHA- Schlüssel zu erhalten, rufen Sie diese Google-Website auf:

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

Sobald Sie Ihre Schlüssel über den obigen Link haben, können Sie mithilfe der folgenden Google-Informationen tiefer in die Codierung einsteigen:

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

HINWEIS:

Aus der Google-Dokumentation:

Das Skript muss mit dem HTTPS-Protokoll geladen werden und kann von jedem Punkt der Seite ohne Einschränkung eingefügt werden.

Hier ist ein Beispiel, wie ich es zum Laufen gebracht habe:

<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>

Wenn Sie im ASP.NET-CodeBehind validieren müssen, überprüfen Sie einfach, ob das Steuerelement "g-recaptcha-response" ausgefüllt ist:

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

Hoffentlich finden einige von Ihnen dies nützlich.

jp2code
quelle
3

Vielen Dank für Ihren Beitrag zu diesem Thread. Es ist großartig, so viele Menschen zu sehen, die sich für das neue Recaptcha-Tool interessieren.

Ich konnte keine .net-Implementierung finden und habe daher ein einfaches Webformular-Steuerelement erstellt, das Sie hier finden: https://github.com/pnmcosta/recaptchav2dotnet

Pedro Maia Costa
quelle