กล่องกาเครื่องหมายนี้ทำงานซ้ำได้อย่างไรและฉันจะใช้ได้อย่างไร


150

ฉันเพิ่งสมัครใช้งานเว็บไซต์ oneplusone https://account.oneplus.net/sign-upและสังเกตว่ากล่องกาเครื่องหมาย recaptcha นี้

ช่องทำเครื่องหมาย recaptcha

มันทำงานอย่างไรและฉันจะใช้มันในเว็บไซต์ของฉันได้อย่างไร ดีกว่าคำ / ตัวเลขลับ ๆ :)

ไซต์ recaptcha ไม่ได้กล่าวถึงวิธีการ recaptcha ใหม่ใด ๆ ... https://www.google.com/recaptcha/intro/index.html


14
ฉันเห็นมันในที่เดียวกันและสงสัยในสิ่งเดียวกัน ฉันกำลังสร้างความสนใจเพื่อดึงดูดความสนใจ ฉันก็อยากรู้เช่นกัน
Madara's Ghost

อาจจะเป็นในการทดสอบและยังไม่พร้อมที่จะเปิดตัวหรือยัง
3791372

1
วิธีง่ายๆในการทำเช่นนี้คือ$('form input[type=submit]') .before('<div>Are you a human? <input type="checkbox" name="captcha" /></div>');บอตจะไม่ทำเครื่องหมายในกล่องเพราะไม่ใช่ส่วนหนึ่งของแบบฟอร์ม jsfiddle.net/s6jkchmz
TylerH

1
นอกจากนี้ยังมีวิธี honeypot ในการใส่ฟิลด์อินพุตที่ไม่อาจต้านทานได้ในรูปแบบ (เช่น 'ความคิดเห็น') แล้วซ่อนด้วย css / js หากข้อมูลมีอยู่แล้วผู้ส่งเป็นบอท ฉันเคยใช้มันและมันใช้งานได้ดีอย่างน่าประหลาดใจ
David H. Bennett

คำตอบ:


30

นี่คือ API เบต้าสำหรับ reCAPTCHA ฉันรวบรวมสิ่งนี้จากแหล่งที่มาของ JS API ของพวกเขา: https://www.google.com/recaptcha/api.jsอ้างอิง "API2" และฉันก็พบสิ่งนี้: http://jaswsinc.com/recaptcha-ads/เห็นได้ชัดว่าพวกเขาทำเบต้าเชิญเท่านั้นของ "no CAPTCHA reCAPTCHA" ของพวกเขาดังนั้นดังนั้น .... คุณอาจจะไม่สามารถทำงานได้ ไซต์ของคุณยัง ฉันไม่พบข้อมูลใด ๆ เกี่ยวกับการเข้าร่วมเบต้า แต่หากคุณค้นหา "ไม่ CAPTCHA reCAPTCHA เบต้า" คุณสามารถเห็นผู้คนจำนวนมากที่ได้กล่าวถึงการรับอีเมลจาก Google เพื่อให้พวกเขาเข้าร่วม

หากคุณพบสถานที่สำหรับเข้าสู่เบต้าโปรดแบ่งปัน! มิฉะนั้นดูเหมือนว่าจะมีการเปิดตัวสาธารณะในปี 2015 ...


1
คุณสามารถลอง frankenstein บางอย่างร่วมกันโดยใช้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.
Timothy Zorn

1
นี่คือบล็อกโพสต์ของ Google ประกาศคุณสมบัติใหม่ CAPTCHA reCAPTCHA ใหม่: googleonlinesecurity.blogspot.com/2014/12/…
Nealvs

4
สิ่งนี้อธิบายได้อย่างไรวิธีการNo CAPTCHA reCAPTCHAทำงานใหม่
Nikhil Girraj

5
@NikhilGirraj หากคุณต้องการทราบว่าไม่มี CAPTCHA reCAPTCHAทำงานอย่างไรฉันแนะนำคุณไปที่โพสต์นี้
Igor Savinkin

114

รายการนี้ไม่ตอบคำถามเดิมอย่างไรก็ตามช่วยในการใช้วิธีแก้ไขปัญหาที่คล้ายกัน ดังที่ @IanM กล่าวว่าช่องทำเครื่องหมาย recaptcha อยู่ในช่วงเบต้าและไม่สามารถใช้งานได้หากไม่มีคำเชิญ

การแก้ไขที่สำคัญ Google แนะนำ reCAPTCHA ใหม่

นี่คือ CAPTCHA ที่ใช้ JavaScript

เนื่องจากสแปมบอทส่วนใหญ่ไม่ได้ใช้งาน JavaScript และไม่สามารถระบุความสัมพันธ์ระหว่างข้อความที่แสดงและ DOM หรือการกระทำที่จำเป็นพวกเขาไม่สามารถคลิกที่ช่องทำเครื่องหมาย

โปรดทราบว่าไม่มีช่องทำเครื่องหมายเลยมันเป็นเพียงองค์ประกอบ div ที่มีสไตล์ CSS บางอย่าง สแปมบอทกำลังพยายามเติมองค์ประกอบของแบบฟอร์มการป้อนข้อมูล แต่ไม่มีการป้อนข้อมูลใน CAPTCHA เครื่องหมายถูกเป็นอีก div หนึ่ง (คลาส css)

เมื่อคุณคลิกที่กล่องคำขอ ajax จะแจ้งให้เซิร์ฟเวอร์ทราบว่ามีการคลิก div และเซิร์ฟเวอร์เก็บข้อมูลนี้ไว้ในที่เก็บข้อมูลชั่วคราว (ทำเครื่องหมายโทเค็น: โทเค็นนี้เปิดใช้งานโดยมนุษย์) เมื่อคุณส่งแบบฟอร์มฟิลด์ที่ซ่อนจะส่งโทเค็นที่ถูกเปิดใช้งานจากนั้นเมื่อเซิร์ฟเวอร์ตรวจสอบความถูกต้องของข้อมูลในแบบฟอร์มมันจะรับรู้ว่าโทเค็นถูกเปิดใช้งาน หากโทเค็นไม่ได้เปิดใช้งานแบบฟอร์มจะถูกยกเลิก

ขั้นตอนในหัวข้อย่อย:

  • สร้างตัวระบุที่ไม่ซ้ำกันและเพิ่มไปยังแบบฟอร์มด้วยอินพุตที่ซ่อนอยู่
  • แสดงช่องทำเครื่องหมายบนไซต์ (โดยไม่ใช้<input>องค์ประกอบอาจใช้<div>) และเพิ่มตัวระบุที่สร้างไว้ก่อนหน้า (คุณสามารถใช้data-*แอตทริบิวต์html5 )
  • เมื่อผู้ใช้คลิกที่ช่องส่งคำขออาแจ็กซ์ไปยังเซิร์ฟเวอร์และตรวจสอบ CAPTCHA in useถ้ามันเป็นเครื่องหมายที่ถูกต้องเป็น (แสดงผลลัพธ์ - ตัวระบุคือ OK / ไม่ตกลง - กับผู้ใช้)
  • เมื่อผู้ใช้ส่งแบบฟอร์มข้อมูลของแบบฟอร์มประกอบด้วยตัวระบุ ตรวจสอบอีกครั้งควรมีอยู่และควรอยู่ในin useสถานะ
  • หากการตรวจสอบทั้งหมดถูกส่งผ่านข้อมูลของแบบฟอร์มก็พร้อมที่จะใช้ / กระบวนการ

คุณสามารถผูกตัวระบุกับเซสชันของผู้ใช้ที่อยู่ IP และ / หรือคุณสามารถใช้การ จำกัด เวลาเพื่อปรับปรุงความปลอดภัย

หมายเหตุ CAPTCHA ประเภทนี้ใช้ได้เฉพาะเมื่อเปิดใช้งาน JavaScript!

หมายเหตุ (แก้ไข 1) ตามที่ @crazypotato มีเครื่องมืออัตโนมัติบางอย่างที่สามารถเรียกใช้ JavaScript เครื่องมือเหล่านี้ยังสามารถส่งคำขอ AJAX ที่เหมาะสมและดำเนินการคลิกเหตุการณ์ใน div ช่องทำเครื่องหมาย

หมายเหตุ (แก้ไข 2) โปรดทราบว่าสคริปต์ที่เขียนไปยังไซต์หนึ่งโดยเฉพาะหรือการแยกประเภท captcha หนึ่งประเภทจะได้รับไม่ช้าก็เร็ว ไม่มีการป้องกันขั้นสูงสุดคุณสามารถทำให้บอท (หรือนักพัฒนาซอฟต์แวร์) ทำงานหนักขึ้นเท่านั้น

หมายเหตุ (แก้ไข 3) ขั้นตอนและคำอธิบายในคำตอบนี้มีเพียงข้อมูลพื้นฐานเกี่ยวกับ captcha ประเภทนี้คุณต้องเพิ่มการตรวจสอบและขั้นตอนการรักษาความปลอดภัยเพิ่มเติมเพื่อให้ปลอดภัยยิ่งขึ้น ตัวอย่างเช่น Google noCaptcha ยิง reCaptcha มาตรฐานอย่างเป็นระบบหลังจาก 3 "การคลิก div"


4
ฉันคิดว่าคำถามนี้เกี่ยวกับ "ฉันจะเปิดใช้งานคุณลักษณะนี้ด้วย reCAPTCHA ของ Google ได้อย่างไร" ฉันค่อนข้างมั่นใจว่าฉันสามารถนำไปใช้กับตัวเองได้ แต่มันไม่ง่ายเลยกับกรณีของพวกเขา
Madara's Ghost

หากคุณคลิกรายงานปัญหาที่ด้านล่างของหน้าสตรีทวิวคุณจะได้รับ Recaptcha ใหม่เหมือนเดิม นั่นคือที่ฉันเห็นครั้งแรกและพบหน้า SO เมื่อฉันไปค้นหา
user2605793

1
อะไรที่ทำให้บอทไม่สามารถส่งคำขอ ajax ได้? หากทุกคน (หรือไซต์กึ่งใหญ่) ต้องใช้ CAPTCHA เช่นนี้มันก็จะถูกเอาเปรียบ Cloudflare มีระบบตรวจจับบ็อตที่คล้ายกันซึ่งดูเหมือนว่าจะทำงานโดยไม่ต้องการให้ผู้ใช้ทำอะไร
Steen Schütt

ก่อนอื่นฉันเห็นด้วยกับความคิดเห็นของคุณทั้งหมดและใช่บอทที่เขียนโดยตรงเพื่อใช้ประโยชน์จากไซต์หนึ่งจะได้รับการคิด (และนี่เป็นเรื่องจริงสำหรับ capthas ทุกประเภท) ผมเริ่มโพสต์ของฉันด้วยและไม่most bots all botsนอกจากนี้ยังมีวิธีการแก้ปัญหาเมื่อแคปช่าเบรกเกอร์ตามภาพเพียงแค่ส่งภาพไปยังซอฟต์แวร์และประเภทมนุษย์ในตัวละคร (และลูกจ้างจะได้รับการจ่ายโดยการนับโพสต์ที่ประสบความสำเร็จ) คุณจะป้องกันสิ่งนี้อย่างไร :)
Pred

1
@Pred "สแปมบอทกำลังพยายามเติมองค์ประกอบของแบบฟอร์มการป้อนข้อมูล แต่ไม่มีอินพุตใน CAPTCHA" นั่นน่าสมเพช jackiechanface.jpg
crazypotato

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แต่ไม่มีการกำหนดองค์ประกอบดังกล่าวในโค้ดด้านไคลเอนต์ของคุณ ... ฉันขาดอะไรไปหรือเปล่า?
benomatis

5

ฉันมาที่นี่ในการค้นหาของฉันไม่เห็นคำตอบและดังนั้นฉันจึงค้นหาต่อไป

หลังจากการค้นหาของฉันหน้าต่างนี้ยังคงเปิดอยู่ดังนั้นฉันจึงอัปเดตโพสต์นี้ด้วยสิ่งที่ฉันค้นพบ

ที่นี่คุณสามารถเรียนรู้เกี่ยวกับreCAPTCHA ได้ที่นี่ :

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

โดยพื้นฐานแล้วคุณเพิ่มสิ่งนี้ลงในหน้าเว็บของคุณ:

<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 ดังนั้นจึงได้สร้างเว็บฟอร์มที่ควบคุมได้ง่ายซึ่งคุณสามารถดูได้ที่นี่https://github.com/pnmcosta/recaptchav2dotnet

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.