Bagaimana cara kotak centang ini recaptcha bekerja dan bagaimana saya bisa menggunakannya?

150

Saya baru-baru ini mendaftar ke situs web oneplusone https://account.oneplus.net/sign-up , dan perhatikan kotak centang ini recaptcha

kotak centang recaptcha

Bagaimana cara kerjanya, dan bagaimana saya bisa menggunakannya di situs saya? Jauh lebih baik daripada kata-kata / angka samar :)

Situs recaptcha tidak menyebutkan metode recaptcha baru ... https://www.google.com/recaptcha/intro/index.html

Pedro Maia Costa
sumber
14
Saya melihatnya di tempat yang persis sama, dan bertanya-tanya hal yang persis sama. Saya memberikan hadiah untuk menarik perhatian. Saya juga ingin tahu.
Hantu Madara
Mungkin sedang dalam pengujian dan belum siap untuk dirilis?
user3791372
1
Cara mudah untuk melakukan ini adalah $('form input[type=submit]') .before('<div>Are you a human? <input type="checkbox" name="captcha" /></div>');bot tidak akan mencentang kotak karena itu bukan bagian dari formulir. jsfiddle.net/s6jkchmz
TylerH
1
Ada juga metode honeypot menempatkan bidang input yang tak tertahankan dalam bentuk (seperti 'komentar') dan kemudian menyembunyikannya dengan css / js. Jika data ada maka pengirimnya adalah bot. Saya telah menggunakan ini dan ini bekerja dengan sangat baik.
David H. Bennett

Jawaban:

30

Ini adalah API beta untuk reCAPTCHA. Saya mengumpulkan ini dari sumber JS API mereka: https://www.google.com/recaptcha/api.js referensi "API2". Dan saya juga menemukan ini: http://jaswsinc.com/recaptcha-ads/ Rupanya mereka melakukan beta hanya undangan dari "no CAPTCHA reCAPTCHA" Jadi .... Anda mungkin tidak akan dapat membuatnya berfungsi pada situs Anda, belum. Saya tidak dapat menemukan informasi tentang memilih ke dalam beta, tetapi jika Anda mencari "Tidak ada CAPTCHA reCAPTCHA beta" Anda dapat melihat sejumlah orang yang menyebutkan mendapatkan email dari Google agar mereka bergabung.

Jika Anda menemukan tempat untuk masuk ke versi beta, silakan bagikan! Kalau tidak, sepertinya rilis publik akan datang pada tahun 2015 ...

Ian M.
sumber
1
Anda dapat mencoba untuk frankenstein sesuatu bersama menggunakan gstatic.com/recaptcha/api2/r20140903161709/recaptcha__en.js jika Anda mencari "g-recaptcha", "I'm not robot" atau "checkbox" Anda dapat menemukan kode yang mengimplementasikannya di sana.
Ian M
3
Kutipan dari email:We expect to move all existing reCAPTCHA sites to the new API in 2015.
Timothy Zorn
1
Berikut ini posting blog Google yang mengumumkan fitur No CAPTCHA reCAPTCHA baru: googleonlinesecurity.blogspot.com/2014/12/…
Nealvs
4
Di mana ini menjelaskan, bagaimana cara No CAPTCHA reCAPTCHAkerjanya yang baru ?
Nikhil Girraj
5
@NikhilGirraj, jika Anda ingin tahu cara No CAPTCHA reCAPTCHA bekerja , saya arahkan Anda ke posting ini .
Igor Savinkin
114

Entri ini tidak menjawab pertanyaan awal, namun membantu mengimplementasikan solusi yang serupa. Seperti yang dikatakan @IanM, kotak centang recaptcha berada dalam fase beta dan tidak dapat digunakan tanpa undangan.

EDIT PENTING Google memperkenalkan reCAPTCHA baru

Ini adalah CAPTCHA berbasis JavaScript.

Karena kebanyakan robot spam tidak menjalankan JavaScript dan tidak dapat mengidentifikasi korelasi antara teks yang ditampilkan dan DOM atau tindakan yang diperlukan, mereka tidak dapat mengklik pada kotak centang.

Harap dicatat bahwa tidak ada kotak centang sama sekali, itu hanya elemen div dengan beberapa style CSS. Spambot sedang mencoba mengisi elemen input formulir, tetapi tidak ada input di CAPTCHA. Tanda centang hanyalah div lain (kelas css).

Ketika Anda mengklik pada kotak permintaan ajax memberitahu server bahwa div diklik dan server menyimpan informasi ini dalam penyimpanan sementara (menandai token: token ini diaktifkan oleh manusia). Saat Anda mengirimkan formulir, bidang tersembunyi mengirimkan token yang telah diaktifkan, kemudian ketika server memvalidasi informasi formulir, ia akan mengenali bahwa token itu diaktifkan. Jika token tidak diaktifkan, formulir akan batal.

Langkah-langkah dalam poin-poin:

  • Hasilkan pengidentifikasi unik dan tambahkan ke formulir dengan input tersembunyi
  • Render kotak centang di situs (tanpa menggunakan <input>elemen, mungkin menggunakan <div>) dan tambahkan pengenal yang dibuat sebelumnya untuk itu (Anda dapat menggunakan data-*atribut html5 )
  • Ketika pengguna mengklik pada kotak centang, kirim permintaan ajax ke server dan validasi CAPTCHA, jika valid tandai sebagai in use. (Tunjukkan hasilnya - pengidentifikasi OK / tidak OK - kepada pengguna)
  • Saat pengguna mengirim formulir, data formulir berisi pengenal. Periksa sekali lagi, itu harus ada dan harus dalam in usekeadaan.
  • Jika semua validasi dilewatkan, data formulir siap digunakan / diproses

Anda dapat mengikat pengidentifikasi ke sesi pengguna, alamat IP, dan / atau Anda dapat menggunakan batas waktu untuk meningkatkan keamanan.

CATATAN CAPTCHA semacam ini hanya berfungsi ketika JavaScript diaktifkan!

CATATAN (sunting 1) Seperti yang dinyatakan @crazypotato, ada beberapa alat otomasi, yang dapat mengeksekusi JavaScript, alat-alat ini juga mampu mengirim permintaan AJAX yang tepat dan menjalankan acara Klik pada div kotak centang.

CATATAN (edit 2) Harap perhatikan bahwa skrip yang ditulis khusus untuk satu situs atau untuk memecahkan satu jenis captcha akan melalui cepat atau lambat. Tidak ada perlindungan utama, Anda hanya dapat membuat bot (atau pengembangnya) bekerja lebih keras.

CATATAN (edit 3) Langkah-langkah dan deskripsi dalam jawaban ini hanya berisi beberapa informasi dasar tentang jenis captcha ini, Anda selalu harus menambahkan validasi tambahan dan langkah-langkah keamanan untuk membuatnya lebih aman. Misalnya, Google noCaptcha secara sistematis meluncurkan reCaptcha standar setelah 3 "klik div".

Pred
sumber
4
Saya pikir pertanyaannya secara khusus tentang "Bagaimana cara mengaktifkan fitur ini dengan Google reCAPTCHA?" Saya cukup yakin saya bisa menerapkan ini sendiri, tetapi tidak sesederhana itu dengan kasus mereka.
Hantu Madara
Jika Anda mengklik Laporkan Masalah di bagian bawah halaman Streetview, Anda mendapatkan Recaptcha baru yang sama. Di situlah saya pertama kali melihatnya dan menemukan halaman SO ini ketika saya pergi mencari.
user2605793
1
Apa yang akan mencegah bot mengirim permintaan ajax itu? Jika setiap orang (atau situs semi-besar) menerapkan CAPTCHA seperti ini, tentu saja akan dieksploitasi. Cloudflare memiliki sistem deteksi bot serupa yang tampaknya berfungsi tanpa mengharuskan pengguna untuk melakukan apa pun.
Steen Schütt
Pertama-tama, saya sepenuhnya setuju dengan komentar Anda dan ya, bot yang ditulis langsung untuk mengeksploitasi satu situs akan berhasil (dan ini berlaku untuk semua jenis capthas). Saya memulai posting saya dengan most botsdan tidak all bots. Ada juga solusi ketika captcha breaker berbasis gambar hanya mengirim gambar ke perangkat lunak dan tipe manusia dalam karakter (dan karyawan dibayar oleh jumlah posting yang sukses). Bagaimana Anda mencegah ini? :)
Pred
1
@Pred "Spambot sedang mencoba mengisi elemen input formulir, tetapi tidak ada input di CAPTCHA." Menyedihkan. jackiechanface.jpg
crazypotato
9

Ini kode saya yang berjalan tanpa masalah di PHP:

Sisi klien:

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

Sisi server:

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
sumber
Anda belum meninggalkan beberapa bagian kode sisi / html klien? hanya bertanya karena dalam kode PHP Anda mengecek posting bernama g-recaptcha-responsetetapi tidak ada elemen yang didefinisikan dalam kode sisi klien Anda ... apakah saya kehilangan sesuatu?
benomatis
5

Saya datang ke sini dalam pencarian saya, tidak melihat jawaban, dan jadi saya terus mencari.

Setelah pencarian saya, jendela ini masih terbuka, jadi saya memperbarui posting ini dengan temuan saya.

Di sinilah Anda dapat belajar tentang reCAPTCHA :

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

Namun, pada dasarnya, Anda menambahkan ini ke halaman web Anda:

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

Untuk mendapatkan kunci reCAPTCHA Anda , buka situs Google ini:

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

Setelah Anda memiliki kunci menggunakan tautan di atas, Anda dapat masuk lebih dalam ke pengkodean ini menggunakan informasi Google berikut:

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

CATATAN:

Dari dokumentasi Google:

Skrip harus dimuat menggunakan protokol HTTPS dan dapat dimasukkan dari titik mana pun pada halaman tanpa batasan.

Ini adalah contoh bagaimana saya membuatnya bekerja:

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

Jika Anda perlu memvalidasi di belakang kode ASP.NET, cukup verifikasi kontrol "g-recaptcha-response" diisi:

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

Semoga beberapa dari Anda menemukan ini berguna.

kode jp2
sumber
3

Terima kasih atas kontribusi Anda pada utas ini, senang melihat begitu banyak orang tertarik pada alat recaptcha baru.

Saya tidak dapat menemukan implementasi .net dari itu, jadi telah membangun kontrol bentuk web sederhana, yang dapat Anda temukan di sini https://github.com/pnmcosta/recaptchav2dotnet

Pedro Maia Costa
sumber