작은 회사일수록 문의 폼 한 통에 매출이 걸려 있다. 그런데 어느 날부터 메일함이 영어 광고와 키릴문자로 가득 차기 시작한다. "신규 문의 알림" 메일이 하루에 마흔 통씩 오는데, 그중 진짜 고객 문의는 한두 통뿐이다. 사장님은 결국 알림을 끄고, 그 다음 주에 들어온 진짜 문의를 놓친다.
스팸 봇은 무차별로 인터넷의 폼을 긁어가며 자동 제출한다. 비싼 보안 솔루션을 붙이기 전에, 거의 모든 봇이 걸려 나가는 다섯 가지 막음을 먼저 적용해 보자. 다섯 개를 다 켜면 스팸은 보통 90% 이상 사라진다.
1. 사람 눈에 보이지 않는 입력 칸 한 줄 — 허니팟(Honeypot)
가장 단순하면서 효과가 가장 강한 방법이다. 폼 안에 사람 눈에는 보이지 않지만 봇에게는 보이는 입력 칸을 하나 더 만들어 둔다. 보통 website, url, company_url 같이 봇이 자동으로 채우고 싶어 하는 이름을 쓴다.
이 칸을 CSS로 화면 밖에 숨겨두고, 서버에서 그 값이 비어 있지 않으면 요청 자체를 폐기한다. 사용자는 칸이 있는지조차 모르고, 봇은 친절하게 URL을 넣어준다. 자바스크립트 없이도 동작하고, 사용자 경험을 전혀 해치지 않는다.
2. 너무 빠른 제출은 사람이 아니다 — 타임 트랩
사람이 문의 폼을 처음 보고 내용을 입력해 제출하기까지 3초 안에 끝나는 경우는 거의 없다. 폼이 열린 시각을 hidden 필드나 세션에 담아 두고, 제출 시각과의 차이가 3초 미만이면 봇으로 간주한다.
봇은 폼 페이지를 불러오지도 않고 곧장 POST 요청만 던지는 경우가 많아서, 시각 토큰 자체가 비어 있는 경우도 자주 생긴다. 토큰이 없으면 그것도 차단 신호다.
3. 본문에 URL이 다섯 개 넘으면 거의 봇이다 — 콘텐츠 패턴 검사
스팸의 목적은 대부분 링크 노출이다. 그래서 메시지 본문에 URL이 두 개 이상 들어 있으면 의심해도 되고, 다섯 개가 넘어가면 자동 차단해도 무방하다. 한글 사이트라면 키릴문자, 아랍문자처럼 거의 쓰이지 않는 문자 블록이 본문의 절반을 넘는 경우도 봇 신호로 봐도 된다.
이메일 주소가 본문 안에 또 들어 있거나, 같은 단어가 비정상적으로 반복되는 경우도 차단 후보다. 단, 사람도 가끔 링크 한두 개를 넣어 문의하니, 너무 빡빡한 규칙은 진짜 문의까지 막는다는 점을 기억해야 한다. 차단하지 말고, 의심 폴더로 분리해 두는 것도 좋은 절충안이다.
4. 같은 곳에서 분당 다섯 통이 오면 막아야 한다 — Rate Limit
봇은 보통 같은 IP에서 짧은 시간에 여러 번 제출을 시도한다. 라라벨 같은 프레임워크라면 한 줄짜리 throttle 미들웨어로 1분당 3회, 1시간당 10회 같은 한계를 걸 수 있다. 사람이 같은 폼을 1분에 세 번 보낼 일은 없다.
Cloudflare나 Vercel 같은 앞단에서 WAF 규칙으로 막아 주면 서버까지 요청이 오지도 않는다. 사이트 앞에 Cloudflare를 무료로 붙여두고 봇 차단 규칙 한두 개만 켜놔도 트래픽이 눈에 띄게 줄어든다.
5. 마지막 방어선은 보이지 않는 캡차
위 네 가지로 90% 이상 걸러지지만, 마지막 한 줄을 더하면 안심이다. 옛날의 "신호등을 모두 고르세요" 캡차는 사용자 경험을 망친다. 요즘은 사용자가 아무것도 하지 않아도 백그라운드에서 사람 여부를 판별하는 Cloudflare Turnstile이나 reCAPTCHA v3를 쓴다.
특히 Turnstile은 무료이고 개인정보 추적이 적어 한국 사이트에도 부담이 적다. 폼 안에 작은 위젯 하나만 붙이면 끝난다. 정말 의심스러운 경우에만 사용자에게 한 번 클릭을 요구하고, 대부분은 그냥 통과시킨다.
다섯을 다 켤 필요는 없다 — 셋부터 시작하자
스팸은 비용을 들이지 않고 막을 수 있는 것이 거의 다다. 허니팟 한 줄, 타임 트랩 하나, 본문 URL 개수 검사 하나만 추가해도 작은 회사 사이트의 스팸은 절반 이상 사라진다. 알림이 다시 의미를 가지기 시작하고, 사장님은 진짜 문의를 놓치지 않게 된다.
스팸을 막는 가장 빠른 길은 캡차를 더하는 것이 아니라, 봇이 폼을 자동 제출했을 때 걸려 넘어질 함정을 폼 안에 미리 심어 두는 일이다.
CYAN 에이전시는 작은 회사의 사이트를 만들고 운영하는 일을 한다. 폼 하나, 알림 한 줄까지 사장님이 실제로 쓸 수 있게 다듬는 데 시간을 더 많이 쓴다. 사이트를 새로 만들거나 운영을 손보고 싶다면 언제든 문의 주시면 된다.