[util] reCAPTCHA 서비스를 이용해 bot 차단하기

인터넷에 글을 쓸때나..

회원가입을 할 때 보면 깨어진 이미지로 된 글자를 입력하게 하는 시스템이 있다.

이를 통해서 bot의 글쓰기나 회원가입을 방지하는 점이다.

http://recaptcha.net 에서는 이를 지원한다.

/cfile23.uf.201B450D4A40C5F6794613.jpg” width=”480″ height=”223″ />

위 그림과 같은 방법으로 이루어진다.

1. 사용자는 서버에서 화면을 로딩한다.

2. 화면에 써있는 javascript는 사용자에게 reCAPTCHA 서버를 통해 모듈을 가져온다.

3. 사용자는 화면에 뜬 글을 입력하고.. 전송

4. 서버에서는 사용자의 회원가입이나 글쓰기를 처리하면서 reCAPTCHA 에 확인을 요청한다.

5. reCAPTCHA서버에서 온 정보로 회원가입 등을 진행하거나, 잘못되었음을 보여준다.

reCAPTCHA에 회원가입을 하고 사이트를 등록하면

2개의 키를 제공한다. 공개키 & 비밀키 쌍을 얻는다.

1. 사용자에게 이미지 보여주기   

    – 첫번째 방법 http 스크립트 이용하기

&lt;script type="text/javascript"<br />
   src="http://api.recaptcha.net/challenge?k=&lt;your_public_key&gt;"&gt;<br />
&lt;/script&gt;<br />
<br />
&lt;noscript&gt;<br />
   &lt;iframe src="http://api.recaptcha.net/noscript?k=&lt;your_public_key&gt;"<br />
       height="300" width="500" frameborder="0"&gt;&lt;/iframe&gt;&lt;br&gt;<br />
   &lt;textarea name="recaptcha_challenge_field" rows="3" cols="40"&gt;<br />
   &lt;/textarea&gt;<br />
   &lt;input type="hidden" name="recaptcha_response_field" <br />
       value="manual_challenge"&gt;<br />
&lt;/noscript&gt;<br />

    – 두번째 방법, ajax 스크립트 이용하기


&lt;script type="text/javascript" <br />
 src="http://api.recaptcha.net/js/recaptcha_ajax.js"&gt;&lt;/script&gt;<br />

-onload 등에서 아래스크립트 실행하고,

– reCaptcha를 입력할 곳에 recaptcha_div라는 id로 div 생성

Recaptcha.create("6LdIEwAA......",<br />
"recaptcha_div", {<br />
   theme: "red",<br />
   callback: Recaptcha.focus_response_field<br />
});<br />
<br />
    - 세번째 방법 https를 이용하기<br />
<br />
<div style="border: 1px dashed rgb(203, 203, 203); padding: 10px; background-color: rgb(255, 255, 255);" class="txc-textbox">
&lt;script type="text/javascript"<br />
   src="https://api-secure.recaptcha.net/challenge?k=&lt;your_public_key&gt;"&gt;<br />
&lt;/script&gt;<br />
<br />
&lt;noscript&gt;<br />
   &lt;iframe src="https://api-secure.recaptcha.net/noscript?k=&lt;your_public_key&gt;"<br />
       height="300" width="500" frameborder="0"&gt;&lt;/iframe&gt;&lt;br&gt;<br />
   &lt;textarea name="recaptcha_challenge_field" rows="3" cols="40"&gt;<br />
   &lt;/textarea&gt;<br />
   &lt;input type="hidden" name="recaptcha_response_field"<br />
       value="manual_challenge"&gt;<br />
<pre class="codeex">&lt;/noscript&gt;

API : http://recaptcha.net/apidocs/captcha/client.html

2. 사용자에게서 온 정보로 확인하기

   reCaptcha에서는 HTTP 조회를 통한 validation을 제공한다.

   URL : http://api-verify.recaptcha.net/verify (POST 방식으로 전송)

   Parameter

  • privatekey : 제공받은 privatekey
  • remoteip : client ip
  • challenge : reCaptcha에서 제공하는 recaptcha_challenge_field 의 값이다.
  • response : 사용자가 입력한 값으로 recaptcha_response_field 라는 이름으로 저장되어 넘어온다.

  

    위의 전송을 하면 다음과 같이 응답이 온다.

    (n으로 구분된 문자열 응답)

    Line 1 : “true” or “false”

    Line 2 : “false”일때 해당 error 코드가 온다.

  

Comments

comments