[보안] 자동 등록방지(CAPTCHA) - Securimage 사용 By starseat 2023-03-23 12:58:58 Etc Post Tags # 서론 웹 사이트를 이용하다보면 글 등록 할때 그림을 보고 글자를 입력하는 것을 본적이 있을 것이다. - 자동 등록 바지 보안 문자 입력 예 ![image.png](/uploads/_temp/20230323/e142446956854d2f6bacb03e8cfa0a3c.png) 게시글이 bot 등 무작위로 입력되어 저장되는 것을 방지하기 위한 기능인데 이 기능에 대해서 알아 보고자 한다. # 자동 등록방지 자동 등록방지(Automated Spam Protection)는 로봇이나 자동화된 프로그램에 의한 스팸을 방지하기 위한 기술 # 종류 다양한 자동 등록방지 기술이 있지만, 일반적으로는 다음과 같은 종류가 있음. - **CAPTCHA** - Completely Automated Public Turing test to tell Computers and Humans Apart의 약어로, 컴퓨터와 사람을 구분하기 위한 공개 튜링 테스트 - 대개 이미지나 오디오 형태로 보안 문자열을 표시하고, 사용자는 이를 입력하여 인증하는 방식으로 스팸 로봇을 차단 - **reCAPTCHA** - 구글이 개발한 CAPTCHA 기반의 보안 기술 - 사용자가 로그인, 회원가입 등을 시도할 때, 스팸 로봇이 아닌지 확인하는 과정을 거침 - **Honeypot** - 사용자가 인식하지 못하도록 숨겨진 입력 필드를 제공하고, 이를 스팸 로봇이 채워넣으면 이를 스팸으로 판단하여 차단하는 방식 - **IP 주소 차단** - 스팸으로 의심되는 IP 주소를 차단하는 방식 - 하지만, 이 방식은 스팸 로봇이 IP 주소를 변경하여 공격을 시도하는 경우에는 효과가 미비함 - **키 캡차(Key Captcha)** - 사용자가 맞춰야 하는 단어나 문장의 의미를 이해하여 입력하는 방식 - 기존의 문자 캡차와는 달리, 사용자가 입력한 값이 정확한지 판단하는 것이 아니라, 입력한 값의 의미가 올바른지 판단하여 스팸 로봇 차단 - **지능형 분류** - 스팸 메시지를 특정 키워드나 패턴 등으로 자동 분류하는 방식 - 이를 위해 머신러닝 등의 인공지능 기술을 활용하여 스팸 메시지의 패턴을 학습함 # php 용 CAPTCHA 다양한 언어로도 **captcha** 를 구현할 수 있지만 php 용으로 알아보자. - Simple CAPTCHA - PHP로 구현 가능한 가장 간단한 CAPTCHA 중 하나 - 이미지에 보이지 않는 문자열을 랜덤으로 생성하여, 사용자가 입력하는 방식 - Securimage - PHP로 구현 가능한 고급 CAPTCHA 중 하나 - 다양한 옵션을 제공하며, 보안성이 높은 CAPTCHA를 구현할 수 있음. - 이미지, 오디오, 플래시 등 다양한 형태의 CAPTCHA를 지원 - Math CAPTCHA - 수학 계산을 이용한 CAPTCHA - 간단한 수식이나 계산문제를 제시하고, 사용자가 계산한 결과를 입력하는 방식 - Letter CAPTCHA - 사용자에게 보이지 않는 문자열을 생성하여, 사용자가 입력하는 방식 - 각 문자열의 길이나 종류를 다양하게 조절하여 보안성을 높일 수 있음 - reCAPTCHA - Google에서 제공하는 CAPTCHA 서비스 중 하나 - PHP와 호환되는 라이브러리가 제공되며, 사용자가 로그인, 회원가입 등을 시도할 때 스팸 로봇이 아닌지 확인하는 과정을 거침 - reCAPTCHA v3 - 사용자의 동작 패턴을 분석하여, 스팸 로봇 여부를 판단하는 방식 - 이전 버전과는 달리, 사용자가 입력해야 할 보안 문자열을 제공하지 않고, 사용자의 동작을 분석하여 자동으로 판단 # Securimage 사용 예 이전에 reCAPTCHA v3 사용해본 적이 있으므로 이번엔 많이 사용하는 php captcha 중 Securimage 를 사용해 보자. - [ [보안] 자동화 공격 방지 - reCaptcha v3 적용하기](https://starseat.net/blog/view/111) ## 준비 - [https://www.phpcaptcha.org/](https://www.phpcaptcha.org/) 에 접속하여 라이브러리를 다운로드 받는다. - 그리고 작업할 위치에 다운로드 받은 파일을 옮긴다. - [Quickstart Guide](https://www.phpcaptcha.org/documentation/quickstart-guide/) 페이지를 보면 빠르게 시작할 수 있는 설명과 샘플 코드를 제공한다. ## 화면 핵심적인 부분만 예제 코드 남긴다. ```html id: name: ``` 일반적인 form 에서 id, name 값과 captha 를 생성하는 부분이다. 해당 페이지를 호출하면 아래와 같은 화면이 나타난다. ![image.png](/uploads/_temp/20230323/1f14d4ca244e8c22ef2f86be94b33237.png) ## 내부 처리 위 form 에 대한 간단한 내부 처리(서버 로직) 이다. ```text 받은 데이터'; echo ''; // 받은 모든 데이터 확인 var_dump($_POST); echo ''; echo 'id: ' . $_POST['userId']; echo ''; echo 'name: ' . $_POST['userName']; echo ''; echo 'captcha checking....'; $captcha = @$_POST['ct_captcha']; require_once dirname(__FILE__) . '/securimage/securimage.php'; $securimage = new Securimage(); if ($securimage->check($captcha)) { echo '캡차 성공!!'; } else { echo '잘못된 캡차 문자열 입력됨...'; } ?> ``` 화면에서 입력한 내용을 받아 처리한 결과 화면이다. ![image.png](/uploads/_temp/20230323/67b659b3adb2f0072d98a0551b0806ac.png) # 출처 - [ChatGPT - 자동 등록방지](https://chat.openai.com/chat) - [SecurImage](https://www.phpcaptcha.org/) Previous Post [os] Window 컴퓨터 빨라지게 하는 팁 Next Post [etc] 메모 프로그램 소개 (작성중)