Bu onay kutusu recaptcha nasıl çalışır ve nasıl kullanabilirim?


150

Kısa süre önce https://account.oneplus.net/sign-up adresindeki web sitesine kaydoldum ve bu onay kutusu recaptcha'sını fark ettim

onay kutusu recaptcha

Nasıl çalışır ve sitelerimde nasıl kullanabilirim? Bu şifreli kelimelerden / rakamlardan çok daha iyi :)

Recaptcha sitesi herhangi bir yeni recaptcha yönteminden bahsetmiyor ... https://www.google.com/recaptcha/intro/index.html


14
Tam olarak aynı yerde gördüm ve aynı şeyi merak ettim. Dikkat çekmek için bir ödül koyuyorum. Ben de merak ediyorum.
Madara'nın Hayaleti

Belki test ediyor ve henüz piyasaya sürülmeye hazır değil mi?
user3791372

1
Bunu yapmanın kolay bir yolu $('form input[type=submit]') .before('<div>Are you a human? <input type="checkbox" name="captcha" /></div>');botlar kutuyu işaretlemez, çünkü formun bir parçası değildir. jsfiddle.net/s6jkchmz
TylerH

1
Formda karşı konulmaz bir giriş alanı koymak ('yorumlar' gibi) ve ardından css / js ile gizlemek için bal küpü yöntemi de vardır. Veri varsa, gönderen bir bottur. Bunu kullandım ve şaşırtıcı derecede iyi çalışıyor.
David H. Bennett

Yanıtlar:


30

Bu, reCAPTCHA için bir beta API'sıdır. Bunu JS API'larının kaynağından topluyorum: https://www.google.com/recaptcha/api.js "API2" ye referans. Ayrıca şunu da buldum: http://jaswsinc.com/recaptcha-ads/ Görünüşe göre onlar "CAPTCHA reCAPTCHA" sadece davet bir beta yaptıkları Yani .... Muhtemelen üzerinde çalışmasını mümkün olmayacak henüz sitenizi. Beta sürümüne kaydolmayla ilgili herhangi bir bilgi bulamıyorum, ancak "CAPTCHA reCAPTCHA beta yok" için arama yaparsanız, katılmaları için Google'dan e-posta almayı belirten birkaç kişiyi görebilirsiniz.

Beta sürümüne girmek için bir yer bulursanız lütfen paylaşın! Aksi takdirde 2015'te halka açık olacak gibi görünüyor ...


1
Sen olabilir kullanarak birlikte Frankenstein şey denemek gstatic.com/recaptcha/api2/r20140903161709/recaptcha__en.js "b-reCAPTCHA" için arama eğer bir kod bulabilirsiniz ya da "onay kutusu" "Ben robot değilim", orada uygulamak.
Ian M

3
E-postadan alıntı:We expect to move all existing reCAPTCHA sites to the new API in 2015.
Timothy Zorn

1
İşte Google'ın yeni CAPTCHA reCAPTCHA yok özelliğini açıklayan blog yazısı: googleonlinesecurity.blogspot.com/2014/12/…
Nealvs

4
Bu nerede açıklıyor, yeni No CAPTCHA reCAPTCHAişler nasıl çalışıyor?
Nikhil Girraj

5
Bildiğiniz isterseniz @NikhilGirraj, nasıl CAPTCHA yok reCAPTCHA'nın çalışır , ben sizi işaret bu yazı .
Igor Savinkin

114

Bu giriş asıl soruya cevap vermez, ancak benzer bir çözümün uygulanmasına yardımcı olur. @IanM'in dediği gibi, recaptcha onay kutusu beta aşamasındadır ve davetsiz olarak kullanılamaz.

ÖNEMLİ DÜZENLEME Google yeni reCAPTCHA'yı tanıttı

Bu JavaScript tabanlı bir CAPTCHA'dır.

Çoğu spambot, JavaScript yürütmediğinden ve görüntülenen metin ile DOM arasındaki korelasyonu veya gerekli eylemleri belirleyemediğinden, onay kutusunu tıklayamazlar.

Lütfen hiçbir onay kutusunun olmadığını, sadece bazı CSS stilleri olan bir div öğesi olduğunu unutmayın. Spambotlar form girdi öğelerini doldurmaya çalışıyor, ancak CAPTCHA'da girdi yok. Onay işareti başka bir div (css sınıfı).

Kutuyu tıklattığınızda, bir ajax isteği sunucuya div'ın tıklatıldığını bildirir ve sunucu bu bilgileri geçici bir depoda saklar (belirteci işaretler: bu belirteç bir insan tarafından etkinleştirildi). Formu gönderdiğinizde, gizli bir alan etkinleştirilen belirteci gönderir, ardından sunucu form bilgilerini doğruladığında belirtecin etkinleştirildiğini algılar. Belirteç etkinleştirilmezse, form geçersiz kılınacaktır.

Madde işaretlerindeki adımlar:

  • Benzersiz bir tanımlayıcı oluşturun ve gizli bir girişle forma ekleyin
  • Sitede bir onay kutusu oluşturun ( <input>öğeyi kullanmadan , muhtemelen kullanmadan <div>) ve önceden oluşturulmuş tanımlayıcıyı buna ekleyin (html5'i kullanabilirsinizdata-* özelliklerini )
  • Kullanıcı onay kutusunu tıkladığında, sunucuya bir ajax isteği gönderin ve geçerliyse CAPTCHA'yı doğrulayın. in use . (Sonucu göster - tanımlayıcı tamam / tamam değil - kullanıcıya)
  • Kullanıcı formu gönderdiğinde, formun verileri tanımlayıcıyı içerir. Bir kez daha kontrol edin, mevcut olmalı ve in usedevlette olmalıdır .
  • Tüm doğrulamalar geçilirse, formun verileri kullanıma / işleme hazırdır

Tanımlayıcıyı kullanıcının oturumuna, IP adresine bağlayabilir ve / veya güvenliği artırmak için zaman sınırlarını kullanabilirsiniz.

NOT Bu tür CAPTCHA yalnızca JavaScript etkinleştirildiğinde çalışır!

NOT (değiştir 1) @crazypotato'nun belirttiği gibi, JavaScript çalıştırabilen bazı otomasyon araçları vardır, bu araçlar aynı zamanda uygun AJAX isteğini gönderebilir ve onay kutusu div'indeki Click olayını tetikleyebilir.

NOT (değiştir 2) Lütfen belirli bir siteye yazılan veya bir tür captcha'yı kırmak için bir komut dosyasının er ya da geç geçeceğini unutmayın. Nihai bir koruma yoktur, sadece botların (veya geliştiricilerinin) daha fazla çalışmasını sağlayabilirsiniz.

NOT (düzenle 3) Bu yanıttaki adımlar ve açıklama yalnızca bu captcha türü hakkında bazı temel bilgiler içerir, her zaman daha güvenli hale getirmek için ek doğrulama ve güvenlik adımları eklemeniz gerekir. Örneğin, Google noCaptcha 3 "div tıklaması" ndan sonra standart bir reCaptcha'yı sistematik olarak tetikler.


4
Sorunun özellikle "Bu özelliği Google'ın reCAPTCHA'sıyla nasıl etkinleştirebilirim?" Hakkında olduğunu düşünüyorum. Bunu kendim uygulayabileceğime oldukça eminim, ancak davalarıyla o kadar basit değil.
Madara'nın Hayaleti

Bir Sokak Görünümü sayfasının altındaki Sorun Bildir'i tıklatırsanız aynı yeni Recaptcha'yı alırsınız. Burası ilk gördüm ve aramaya gittiğimde bu SO sayfasını buldum.
user2605793

1
Bir botun bu ajax isteğini göndermesini ne engeller? Eğer herkes (ya da yarı büyük bir saha) böyle bir CAPTCHA uygulayacak olsaydı, kesinlikle bundan faydalanacaktı. Cloudflare, kullanıcının hiçbir şey yapmasına gerek kalmadan çalışan benzer bir bot algılama sistemine sahiptir.
Steen Schütt

Her şeyden önce, yorumunuza tamamen katılıyorum ve evet, bir siteyi sömürmek için doğrudan yazılmış bir bot düşecektir (ve bu her türlü captha için geçerlidir). Ben ile benim yazı başlamış most botsolup all bots. Görüntü tabanlı captcha kırıcı, görüntüyü bir yazılıma ve karakterlerde bir insan türüne gönderdiğinde de çözümler vardır (ve çalışan başarılı mesajların sayısı ile ödenir). Bunu nasıl önlersiniz? :)
Tahmin

1
@Pred "Spambotlar form giriş öğelerini doldurmaya çalışıyor, ancak CAPTCHA'da giriş yok." Bu acınası. jackiechanface.jpg
crazypotato

9

İşte benim kod PHP sorunsuz çalışıyor:

Müşteri Tarafı:

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

Sunucu Tarafı:

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

:)


istemci tarafı / html kodunun bazı bölümlerini dışarıda bırakmadınız mı? PHP kodunuzda adlandırılan bir gönderiyi kontrol ettiğiniz için soruyorsunuz, g-recaptcha-responseancak istemci tarafı kodunuzda böyle bir öğe tanımlanmadı ... Bir şey mi kaçırıyorum?
benomatis

5

Buraya araştırmamda geldim, bir cevap görmedim ve aramaya devam ettim.

Aramamdan sonra bu pencere hala açıktı, bu yüzden bu gönderiyi bulgularımla güncelliyorum.

Burada reCAPTCHA hakkında bilgi edinebilirsiniz :

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

Temel olarak, bunu web sayfanıza eklersiniz:

<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 anahtarlarınızı almak için şu Google sitesine gidin:

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

Yukarıdaki bağlantıyı kullanarak anahtarlarınızı edindikten sonra, aşağıdaki Google bilgilerini kullanarak bunun kodlamasını daha da derinleştirebilirsiniz:

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

NOT:

Google dokümanlarından:

Komut dosyası HTTPS protokolü kullanılarak yüklenmelidir ve herhangi bir kısıtlama olmaksızın sayfanın herhangi bir noktasından eklenebilir.

İşte nasıl çalıştığını bir örnek:

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

Arkadaki ASP.NET kodunda doğrulamanız gerekiyorsa, "g-recaptcha-response" denetiminin doldurulduğunu doğrulamanız yeterlidir:

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

Umarım, bazılarınız bunu faydalı bulmaktadır.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.