
Cloudflare Turnstile로 문의 폼 스팸 막는 방법
Cloudflare Turnstile을 이용해 문의 폼 스팸을 무료로 차단하는 방법을 소개합니다. 계정 생성부터 코드 연동까지 단계별로 안내합니다.
Cloudflare Turnstile은 사용자 경험을 해치지 않는 무료 캡차 대안입니다. Cloudflare 계정에서 사이트 키를 발급받고, 웹사이트에 JavaScript 코드를 추가하면 스팸 봇을 자동으로 차단할 수 있습니다. 문의 폼에 Turnstile을 연동하면 사람이 직접 입력하는 경우에만 전송이 허용되어 스팸을 효과적으로 막을 수 있습니다.
Cloudflare Turnstile이란?
Cloudflare Turnstile은 기존의 이미지 선택이나 퍼즐 방식이 아닌, 방문자의 행동 패턴을 분석하여 봇 여부를 판별하는 무료 서비스입니다. 스팸성 게시글은 모든 방문자가 글을 작성할 수 있는 게시판에서 매크로 프로그램으로 작성될 수 있습니다. 이때 Turnstile을 적용하면 봇이 폼을 제출하지 못하게 막을 수 있습니다. 자세한 배경은 아임웹 FAQ에서 확인할 수 있습니다.
Turnstile 설정을 위한 준비
Cloudflare Turnstile을 사용하려면 먼저 Cloudflare 계정을 생성하고 사이트를 추가해야 합니다. 그런 다음 Turnstile 위젯을 위한 사이트 키와 시크릿 키를 발급받습니다. 아래 절차를 따라 진행하세요.
- Cloudflare 대시보드에 로그인하거나 새 계정을 생성합니다.
- 좌측 메뉴에서 Turnstile을 선택합니다.
- 사이트 추가 버튼을 클릭하고, 도메인을 입력한 뒤 위젯 유형으로 ‘Managed’를 선택합니다(문의 폼 보호에 권장).
- 사이트 키와 시크릿 키가 생성되면 안전한 곳에 복사해 둡니다.
WordPress에서 Turnstile 플러그인 설치 및 설정
워드프레스로 운영 중인 사이트라면 전용 플러그인으로 손쉽게 연동할 수 있습니다.
- 관리자 메뉴에서 플러그인 > 새로 추가로 이동합니다.
- ‘Cloudflare Turnstile’을 검색하여 설치하고 활성화합니다.
- 플러그인 설정 페이지에서 앞서 발급받은 사이트 키와 시크릿 키를 입력합니다.
- 보호할 폼(로그인, 댓글, 문의 폼 등)을 선택하고 저장합니다. 문의 폼 스팸을 막으려면 해당 폼을 반드시 활성화합니다.
직접 코드로 Turnstile 연동하기
플러그인 없이 HTML과 JavaScript로 직접 통합하려면 다음 방법을 사용합니다.
문의 폼이 있는 페이지의 <head> 또는 <body> 끝에 Turnstile API 스크립트를 추가합니다. 예를 들어 다음과 같은 <script> 태그를 사용합니다.
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
그런 다음 폼 안에 Turnstile 위젯을 표시할 <div> 요소를 삽입합니다.
<div class="cf-turnstile" data-sitekey="발급받은_사이트_키"></div>
폼 제출 시 위젯이 해결되었는지 확인하는 JavaScript 코드를 추가합니다.
document.getElementById('my-form').addEventListener('submit', function(e) {
e.preventDefault();
var token = turnstile.getResponse();
if (!token) {
alert('로봇 검증을 완료해주세요.');
return;
}
var hiddenInput = document.createElement('input');
hiddenInput.setAttribute('type', 'hidden');
hiddenInput.setAttribute('name', 'cf-turnstile-response');
hiddenInput.setAttribute('value', token);
this.appendChild(hiddenInput);
this.submit();
});
서버 사이드에서는 전달받은 토큰을 Cloudflare 검증 API(https://challenges.cloudflare.com/turnstile/v0/siteverify)로 확인해야 합니다. PHP를 예로 들면, $_POST['cf-turnstile-response'] 값을 시크릿 키와 함께 POST 전송하여 응답의 success 필드가 true인지 검사하면 됩니다. 실제 구현 시에는 시크릿 키를 코드에 직접 노출하지 않도록 주의하세요.
실제 적용 확인 및 스팸 차단 테스트
적용 후에는 반드시 정상 동작하는지 확인해야 합니다. 브라우저 시크릿 모드나 다른 기기에서 폼을 제출하여 오류 없이 처리되는지 점검합니다. 또한 스크립트가 차단된 환경에서도 사용자에게 적절한 안내가 표시되는지 확인하세요. CloudFlare 무료 캡챠 인증을 연동하면 스팸 게시물 등록을 사전에 방지할 수 있습니다. 보다 원천적인 차단을 원한다면 유료 본인인증 서비스를 추가할 수도 있으며, 본인인증 서비스(유료)를 추가하면 원천적으로 스팸 게시글 등록을 방지할 수 있습니다.
문제 해결
Turnstile 위젯이 보이지 않을 때
- API 스크립트가 정상 로드되었는지 브라우저 개발자 도구의 네트워크 탭에서 확인합니다.
data-sitekey값이 정확한지, 그리고 등록된 도메인과 일치하는지 Cloudflare 대시보드에서 확인합니다.- 광고 차단 확장 프로그램이나 보안 소프트웨어가 스크립트를 차단할 수 있으니 일시적으로 비활성화해 봅니다.
토큰 검증이 계속 실패하는 경우
- 시크릿 키가 올바른지, 검증 API 호출 시 올바른 파라미터가 전송되는지 확인합니다.
- 서버에서
file_get_contents대신 cURL을 사용하는 것이 더 안정적입니다. - Cloudflare 서비스의 다른 문제로 인한 것일 수 있으니 Cloudflare DNS 레코드 설정 오류 해결 방법 글도 참고하세요.
참고 자료
- 아임웹 FAQ - 스팸 게시글 차단 방법 — 확인일 2026-07-29