캡챠(CAPTCHA)를 알아보자 (로봇이 아닙니다! 🤖 )

제리님·2021년 4월 11일
10
post-thumbnail

그림 google.com 캡차 설명 화면 캡처 제공

인터넷을 사용하다 보면 자주 볼 수 있는 보안 프로그램이 있습니다.
다음 그림처럼 '로봇이 아닙니다', '이미지를 선택해 주세요' 등의 프로그램을 자주 볼 수 있는데요.

[그림1 인터넷에서 자주 보이는 보안 프로그램] - https://statkclee.github.io/deep-learning/r-captcha.html

이러한 프로그램은 캡차(CAPTCHA)라고 부릅니다.
캡차로 인해 번거롭고, 퀴즈에 실패하면 짜증이 납니다.(난 사람인데 왜 로봇이라고 하지??)
일반 유저에게는 귀찮기만 한 대상이겠지만, 개발자로서 캡차를 사용하는 의미를 알아보았습니다.

CAPTCHA??

CAPTCHA는 Completely Automated Public Turing test to tell Computers and Humans Apart 의 약어로 '컴퓨터와 사람을 구분하기 위한 완전히 자동화된 튜링 테스트'를 의미합니다.

사용자에게 컴퓨터는 구분할 수 없는 텍스트나 이미지 혹은 소리를 재생하여 컴퓨터와 사람을 구분하게 됩니다.
그렇다면 왜! 사람과 컴퓨터를 구분하려고 하는 것일까요?

봇은 사이트에 접속하여 다음과 같을 악의적인 행위를 할 수 있습니다.

  1. 사이트의 게시물 혹은 댓글에 스팸성 글을 작성합니다.
  2. 검색 엔진 순위를 높이기 위해 링크가 있는 댓글 섹션을 폭격합니다.
  3. 사용자의 이메일 주소를 복사합니다.
  4. 공연 티켓 등의 물품을 대량 구매합니다.

이러한 봇의 행동은 사용자들에게 불편함을 줄 수 있으며, 사이트의 신뢰도를 떨어트릴 수 있습니다.
이를 위하여 여러 사이트에서 CAPTCHA를 사용하여 반복된 사이트 접속 처단, 회원가입, 사용자 인증, 게시물 게시 등에 사용이 되고 있습니다.
만약 봇들이 계정 생성을 자유롭게 하고, 게시물을 만들 수 있게 된다면 해당 사이트에는 스팸과 광고성 게시물들로 도배를 하고, 사용자들에게 스팸 이메일을 보낼 수 있게 됩니다.

캡차사용하기

캡차 서비스를 제공하는 다양한 서비스가 있습니다. 구글 reCAPTCHA, hcpatcha, geeTest 등이 있는데요. 저는 이중에 구글 reCAPTCHA v2 를 사용해 보도록하겠습니다. reCAPTCHA v2는 여러분에게 가장 익숙하고 편리한 체크박스 버튼을 가진 '로봇이 아닙니다'를 제공합니다.
reCAPTCHA 공식 가이드를 따라서 다음의 코드를 실행함으로써 간단하게 사용할 수 있습니다.

<html>
  <head>
    <title>reCAPTCHA demo: Explicit render after an onload callback</title>
    <script type="text/javascript">
      var onloadCallback = function() {
        grecaptcha.render('html_element', {
          'sitekey' : 'your_site_key'
        });
      };
    </script>
  </head>
  <body>
    <form action="?" method="POST">
      <div id="html_element"></div>
      <br>
      <input type="submit" value="Submit">
    </form>
    <script src="https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit"
        async defer>
    </script>
  </body>
</html>

가이드를 따라 사이트에 실행된 코드를 올려보았는데요, https://my-app-3x1qowiru-jerrynim.vercel.app/
캡차를 풀게되면 콜백을 실행시키는 방식으로 캡차를 사용할 수 있습니다!!

CAPTCHA의 한계

  1. 사용자 경험 저하와 이탈
    캡차를 사용하여 봇의 행위를 지연시키거나 일부 막을 수 있지만, 사용자에게 불편함을 주게 됩니다.
    대표적인 예로 디스코드 사용 시에 캡차만 십여분 동안 풀고 있으면 사용하기 싫어질 만큼 화가 납니다.

    [그림2 구글 디스코드 로봇 연관검색어]

어려운 난이도의 문제일수록 캡차를 푸는 것은 시간이 오래 걸리고, 스트레스를 유발하고, 그로 인해 사용자들이 캡차 도중에 이탈이 발생할 수 있습니다.
2. 100% 봇을 막을 수 없다.

캡차는 주로 텍스트나 이미지 인식을 사용하여 봇을 구분하게 되는데, 봇은 AI를 이용하여 텍스트와 이미지를 인식하는데 시간이 걸리지 않는다는 뉴스를 쉽게 찾아볼 수 있을 만큼 간단하게 캡차를 풀어냅니다.
또한, 여러 개발자들이 데이터를 크롤링하기 위하여 언캡차를 위한 다양한 방법들을 고안해 내며 캡차를 우회하려고 하고 있습니다!!(앞의 2Cpatcha API를 이용하여도 언캡차를 할 수도 있습니다.)
이를 막기 위해 더 어려운 문제를 준다면 사용자 경험이 떨어지게 되니 캡차를 사용하는 것에 어려움이 있습니다.

그래서 캡차를 사용해야 할까?

한국 사이트에서는 캡차를 사용하는 경우가 외국보다 적습니다. 가입 시에 주민등록번호, 휴대폰 인증, 공인인증서 등의 인증과정을 통하여 확인을 하기 때문에 필요성이 낮다고 생각합니다. 그래서 로그인 시도를 여러 번 하였을 때, 휴대폰 인증을 받으려 할 때처럼 인증 없이 여러 악의적인 행동이 가능할 때 캡차를 사용하여 봇을 방지하는 사례를 많이 볼 수 있습니다.

이메일과 비밀번호로만으로 간단하게 가입이 되는 서비스의 경우 봇이 활동하기에 편리하기에, 캡차를 활용하여 봇의 활동을 지연시키거나, 일부 방지할 필요가 있다고 생각합니다. 임의의 이메일을 만드는 것은 너무나 쉽기 때문에 수많은 봇 계정이 생성될 수 있으니까요.

마치며

내가 봇에 의한 공격을 신경 쓰며 개발을 한 적이 있는가? 에 대답은 NO입니다. 서비스를 만들면서 보안에 대한 이슈도 생각해보아야 하는데 캡챠를 알아보며 조금은 생각해볼 수 있었네요. 벨로그에도 종종 광고성 댓글들이 달리던데 해결되면 좋겠네요 ㅎㅎ.

출처

Why do we need CAPTCHAs?

CAPTCHA inperva

CAPTCHA wikipedia

captcha와 사람...

profile
Basic in the end👻

1개의 댓글

comment-user-thumbnail
2021년 9월 1일

오... 재밌어요🙉 잘읽었습니다

답글 달기