진짜 고객은 안 오는데 폼에는 영문 광고가 하루 백 통씩 쌓인다 — 작은 회사 웹사이트가 문의 폼 스팸을 막는 5가지 원칙

문의 폼을 열어두자마자 진짜 상담은 없고 영문 도배·코인 광고·외국어 스팸만 메일함에 쌓이는 경험, 작은 회사 사장님이라면 한 번쯤 겪습니다. 스팸 봇은 폼 주소만 알면 24시간 자동으로 글을 밀어넣습니다. 그렇다고 캡차로 모든 손님을 시험에 들게 하면 진짜 문의까지 줄어듭니다. 사용자는 불편하지 않게, 봇만 걸러내는 다섯 가지 방법을 순서대로 적용해 보세요.

1. 허니팟 — 사람 눈에 안 보이는 함정 칸

봇은 폼의 모든 입력칸을 기계적으로 채웁니다. 화면에서 숨긴 가짜 입력칸을 하나 두고, 그 칸에 값이 들어오면 봇으로 판단해 조용히 버리면 됩니다. CSS로 숨기므로 진짜 손님은 존재조차 모르고, 비용도 마찰도 0입니다. 가장 먼저, 반드시 적용해야 할 1차 방어선입니다.

2. 제출 속도와 시간을 본다

사람은 폼을 읽고 채우는 데 최소 몇 초가 걸립니다. 페이지가 열린 지 2~3초 만에 제출이 들어오면 봇일 확률이 높습니다. 폼이 그려진 시각을 숨은 값으로 심어두고, 서버에서 제출까지 걸린 시간을 검사하세요. 같은 IP에서 1분에 수십 번 제출되는 경우도 전송 횟수 제한(rate limiting) 대상입니다.

3. 캡차는 최후의 수단, 쓴다면 비침습형으로

신호등·횡단보도를 고르게 하는 방식의 캡차는 효과는 있지만 손님을 피곤하게 만들고 이탈을 부릅니다. 꼭 써야 한다면 Cloudflare Turnstile처럼 클릭 한 번 또는 무동작으로 통과하는 비침습형을 권합니다. 무료이고 개인정보 수집도 적어 작은 회사에 적합합니다. 캡차는 1·2번으로도 막히지 않을 때 더하는 보강재이지 첫 단추가 아닙니다.

4. 프론트엔드를 믿지 말고 서버에서 다시 검증한다

자바스크립트 검증은 봇이 폼 화면을 거치지 않고 주소로 직접 데이터를 쏘면 통째로 무력화됩니다. 필수값 여부, 이메일 형식, 본문 길이, 링크 개수는 반드시 서버에서 한 번 더 확인하세요. 본문에 URL이 다섯 개 넘게 들어 있다면 광고 스팸일 가능성이 큽니다.

5. 키워드·링크 필터는 가볍게, 과하지 않게

카지노·코인·대출 같은 전형적 스팸 단어나 과도한 외부 링크를 거르면 남은 스팸의 상당수가 정리됩니다. 단, 필터를 너무 공격적으로 잡으면 '대출 상담' 같은 진짜 문의까지 막힙니다. 걸러낸 글은 바로 삭제하지 말고 별도 보관함에 두어 오탐(誤探)을 주기적으로 점검하세요.

순서가 곧 전략이다

다섯 가지는 위에서부터 차례로, 손님 마찰이 적은 것부터 적용하는 것이 핵심입니다. 허니팟과 시간 검사만으로도 자동 스팸의 90% 이상이 사라지는 경우가 많습니다. 문의 폼은 작은 회사가 고객과 처음 만나는 창구입니다. CYAN은 사이트를 만들 때 이런 스팸 방어를 기본값으로 심어, 사장님이 진짜 상담에만 집중할 수 있게 합니다.