이 확인란은 어떻게 작동하며 어떻게 사용합니까?


150

최근 oneplusone 웹 사이트 https://account.oneplus.net/sign-up 에 가입했는데이 확인란이 표시됩니다.

체크 박스 수정

어떻게 작동하며 내 사이트에서 어떻게 사용할 수 있습니까? 그 비밀스러운 단어 / 숫자보다 훨씬 낫습니다 :)

recaptcha 사이트에는 새로운 recaptcha 방법이 언급되어 있지 않습니다 ... https://www.google.com/recaptcha/intro/index.html


14
나는 정확히 같은 곳에서 그것을 보았고 정확히 같은 것을 궁금해했다. 관심을 끌기 위해 현상금을 내고 있습니다. 나도 궁금하다.
Madara의 유령

테스트 중이며 아직 출시되지 않은 것일 수 있습니다.
user3791372

1
이 작업을 수행하는 쉬운 방법은 $('form input[type=submit]') .before('<div>Are you a human? <input type="checkbox" name="captcha" /></div>');봇이 양식의 일부가 아니므로 확인란을 선택하지 않는 것입니다. jsfiddle.net/s6jkchmz
TylerH

1
저항 할 수없는 입력 필드 (예 : '설명')를 넣은 다음 css / js로 숨기는 허니팟 방법도 있습니다. 데이터가 존재하면 발신자가 봇입니다. 나는 이것을 사용했으며 놀랍게도 잘 작동합니다.
David H. Bennett

답변:


30

reCAPTCHA 용 베타 API입니다. JS API 소스 인 https://www.google.com/recaptcha/api.js에서 'API2'를 참조 하여 수집합니다 . 그리고 나는 또한 이것을 발견했다 : http://jaswsinc.com/recaptcha-ads/ 분명히 그들은 그들의 "CAPPACHA reCAPTCHA"의 초대 전용 베타를 했으므로 .. 당신은 아마 그것을 작동시킬 수 없을 것입니다. 귀하의 사이트. 베타를 선택하는 방법에 대한 정보를 찾을 수 없지만 "No CAPTCHA reCAPTCHA beta"를 검색하면 Google에서 이메일을 수신하도록하는 사람들이 많이 있습니다.

베타에 들어갈 장소를 찾으면 공유하십시오! 그렇지 않으면 2015 년에 공개 버전이 출시 될 것 같습니다 ...


1
당신은 할 수 사용하여 함께 프랑켄슈타인 뭔가하려고 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.
디모데 존

1
다음은 새로운 보안 문자 없음 reCAPTCHA 기능을 알리는 Google의 블로그 게시물입니다. googleonlinesecurity.blogspot.com/2014/12/…
Nealvs

4
이 부분은 어디에서 설명하고 새로운 기능 No CAPTCHA reCAPTCHA은 어떻게 작동합니까?
Nikhil Girraj 2016 년

5
@NikhilGirraj, No CAPTCHA reCAPTCHA의 작동 방식 을 알고 싶다면 이 게시물을 참조하십시오 .
Igor Savinkin

114

이 항목은 원래 질문에 대한 답변은 아니지만 유사한 솔루션을 구현하는 데 도움이됩니다. @IanM이 말했듯이 체크 박스 recaptcha는 베타 단계이며 초대 없이는 사용할 수 없습니다.

중요 편집 Google은 새로운 reCAPTCHA를 도입했습니다

이것은 JavaScript 기반 보안 문자입니다.

대부분의 스팸봇은 JavaScript를 실행하지 않으며 표시된 텍스트와 DOM 또는 필요한 조치 간의 상관 관계를 식별 할 수 없으므로 확인란을 클릭 할 수 없습니다.

확인란이 전혀 없으며 CSS 스타일이있는 div 요소 일뿐입니다. Spambots가 양식 입력 요소를 채우려 고하지만 보안 문자에 입력이 없습니다. 확인 표시는 또 다른 div (css 클래스)입니다.

상자를 클릭하면 ajax 요청이 서버에 div가 클릭되었음을 알리고 서버는이 정보를 임시 저장소에 저장합니다 (이 토큰은 사람에 의해 활성화되었습니다). 양식을 제출하면 숨겨진 필드가 활성화 된 토큰을 보낸 다음 서버가 양식 정보의 유효성을 검증하면 토큰이 활성화되었음을 인식합니다. 토큰이 활성화되지 않으면 양식이 무효화됩니다.

글 머리 기호의 단계 :

  • 고유 식별자를 생성하고 숨겨진 입력으로 양식에 추가하십시오.
  • <input>요소 를 사용하지 않고을 사용 하여 사이트에서 확인란을 렌더링 <div>하고 이전에 생성 된 식별자를 추가합니다 (html5 data-*속성을 사용할 수 있음 )
  • 사용자가 선택란을 클릭하면 서버에 아약스 요청을 보내고 보안 문자가 유효하다면로 표시하십시오 in use. (결과를 보여주십시오-식별자는 OK / OK 아님-사용자에게)
  • 사용자가 양식을 보내면 양식의 데이터에 식별자가 포함됩니다. 다시 한 번 확인하십시오. 존재해야하며in use 상태에 .
  • 모든 유효성 검사가 통과되면 양식의 데이터를 사용 / 처리 할 수 ​​있습니다

식별자를 사용자 세션, IP 주소에 바인딩하거나 시간 제한을 사용하여 보안을 향상시킬 수 있습니다.

노트 이러한 종류의 보안 문자는 JavaScript가 활성화 된 경우에만 작동합니다!

노트 (편집 1) @crazypotato가 언급했듯이 JavaScript를 실행할 수있는 자동화 도구가 있습니다.이 도구는 적절한 AJAX 요청을 보내고 확인란 div에서 Click 이벤트를 발생시킬 수 있습니다.

참고 (편집 2) 특정 사이트에 쓰거나 한 유형의 보안 문자를 깨는 스크립트는 조만간 통과 할 수 있습니다. 궁극적 인 보호는 없으며 봇 (또는 개발자)의 노력만으로 만들 수 있습니다.

참고 (편집 3)이 답변의 단계와 설명에는 이러한 유형의 보안 문자에 대한 기본 정보 만 포함되어 있으므로 보안을 강화하기 위해 항상 유효성 검사 및 보안 단계를 추가해야합니다. 예를 들어 Google noCaptcha는 3 번의 "div 클릭"후에 체계적으로 표준 reCaptcha를 실행합니다.


4
질문은 "Google reCAPTCHA로이 기능을 어떻게 활성화합니까?"에 관한 것입니다. 나는 이것을 직접 구현할 수 있다고 확신하지만 그들의 경우에는 그렇게 간단하지 않습니다.
Madara의 유령

스트리트 뷰 페이지 하단에서 문제 신고를 클릭하면 동일한 새로운 요점을 얻습니다. 그것이 내가 처음봤을 때 검색 할 때이 SO 페이지를 찾았습니다.
user2605793

1
봇이 해당 아약스 요청을 보내지 못하게하는 이유는 무엇입니까? 모든 사람 (또는 반 큰 사이트)이 이와 같은 보안 문자를 구현해야한다면 어쨌든 악용 될 것입니다. Cloudflare에는 유사한 봇 탐지 시스템이있어 사용자가 아무것도하지 않아도 작동하는 것 같습니다.
Steen Schütt

우선, 나는 당신의 의견에 전적으로 동의합니다. 그렇습니다. 한 사이트를 악용하기 위해 직접 작성된 봇이 통과 할 것입니다 (그리고 이것은 모든 종류의 캡타에 해당합니다). 나는 내 게시물을 시작 most bots하지 all bots. 이미지 기반 보안 문자 차단기가 단순히 이미지를 소프트웨어 및 문자로 사람 유형으로 전송하는 경우 솔루션이 있습니다 (직원은 성공적인 게시물 수로 지불). 이것을 어떻게 막을 수 있습니까? :)
Pred

1
@Pred "스팸봇이 양식 입력 요소를 채우려 고하지만 보안 문자에 입력이 없습니다." 한심하다. 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.";
    }
}

바라건대, 여러분 중 일부는 이것이 유용하다고 생각합니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.