어렵게 단 문의 폼으로 광고·도배 스팸만 하루 수십 통씩 쏟아져 진짜 손님의 한 통이 그 속에 묻힌다 — 작은 회사 웹사이트가 문의 폼 스팸을 막는 5가지 원칙

홈페이지에 문의 폼을 달자마자 가장 먼저 찾아오는 손님은, 안타깝게도 사람이 아니라 봇인 경우가 많습니다. 비뇨기과 약 광고, 대출 권유, 정체불명의 영문 링크가 하루에도 수십 통씩 쌓입니다. 문제는 그 안에 진짜 손님의 문의 한 통이 섞여 있다는 점입니다. 스팸에 지쳐 폼을 아예 내려버리면, 전화가 부담스러운 손님은 연락할 길을 잃습니다. 폼은 그대로 열어둔 채 스팸만 골라내는 다섯 가지 원칙을 정리했습니다.

원칙 1. 사람 눈에는 안 보이는 '함정칸'을 둔다 (허니팟)

스팸 봇은 폼에 있는 입력칸을 닥치는 대로 채웁니다. 이 습성을 거꾸로 이용하는 것이 허니팟(honeypot)입니다. 사람 눈에는 보이지 않도록 숨긴 입력칸을 하나 만들어 두면, 사람은 비워 두지만 봇은 빠짐없이 채웁니다.

  • 화면에서 숨긴 칸(예: 'website' 같은 이름)에 값이 들어와 있으면 봇으로 보고 조용히 버립니다.
  • 손님은 존재조차 모르므로 불편을 전혀 느끼지 않습니다.
  • 코드 몇 줄이면 끝나고, 캡차 없이도 자동 스팸의 상당수를 걸러냅니다.

원칙 2. '제출까지 걸린 시간'으로 사람과 봇을 가른다

사람은 폼을 읽고, 생각하고, 타이핑하느라 최소 몇 초가 걸립니다. 봇은 페이지를 열자마자 1초도 안 되어 제출합니다. 폼이 화면에 뜬 시각을 몰래 기록해 두었다가, 제출까지 너무 짧으면 의심하는 방식입니다.

  • 예를 들어 '3초 미만 제출'은 사람이 작성했다고 보기 어렵습니다.
  • 반대로 폼을 띄운 지 며칠 뒤에 들어오는 제출도 재사용된 봇 요청일 수 있어 함께 걸러집니다.

원칙 3. 캡차는 '마지막 수단'으로, 부담이 적은 것부터

일그러진 글자를 읽게 하는 옛날식 캡차는 손님을 가장 빨리 떠나게 만드는 장치이기도 합니다. 캡차는 앞의 두 방법으로도 막히지 않을 때 꺼내 드는 카드입니다.

  • 체크박스 한 번이나 백그라운드에서 점수를 매기는 방식처럼, 손님 손이 거의 가지 않는 것을 우선합니다.
  • 스팸이 유난히 심한 폼에만 선별적으로 적용해, 일반 손님의 문턱을 낮게 유지합니다.

원칙 4. 화면이 아니라 '서버'에서 한 번 더 막는다

화면 쪽 자바스크립트 검사는 봇이 건너뛰기 쉽습니다. 진짜 방어선은 서버입니다. 폼 데이터가 서버에 도착했을 때 한 번 더 거르는 장치를 둬야 합니다.

  • 제출 횟수 제한: 같은 IP에서 1분에 수십 번 들어오면 잠시 차단합니다.
  • 금칙어 필터: 도박·대출·성인 키워드나 본문에 박힌 외부 링크 개수로 거릅니다.
  • 걸러진 내용도 곧장 지우지 말고 '스팸함'에 잠시 모아 두면, 진짜 문의를 잘못 버렸는지 확인할 수 있습니다.

원칙 5. 스팸이 와도 '진짜 한 통'을 놓치지 않는 알림 체계

스팸을 0으로 만드는 일보다 중요한 것은, 진짜 손님의 문의를 절대 놓치지 않는 일입니다. 걸러낸 스팸과 정상 문의를 다른 통로로 받도록 나눠 두는 것이 핵심입니다.

  • 정상 문의는 담당자 이메일·문자로 즉시 알리고, 스팸 의심분은 따로 모읍니다.
  • 한 주에 한 번쯤 스팸함을 훑어 '진짜인데 잘못 걸린 것'이 없는지 점검합니다.
  • 필터를 너무 빡빡하게 잡아 손님을 막느니, 약간의 스팸을 감수하고 문은 넓게 여는 편이 작은 회사에는 대개 이득입니다.

문은 열어두되, 함정은 봇에게만

좋은 스팸 대책은 손님에게는 아무것도 시키지 않으면서 봇만 조용히 걸러냅니다. 허니팟과 시간 검사로 자동 스팸의 대부분을 막고, 서버에서 한 번 더 거른 뒤, 캡차는 정말 필요할 때만 더하는 순서가 작은 회사에 가장 잘 맞습니다.

CYAN 에이전시는 홈페이지를 만들 때 문의 폼에 이런 스팸 방어 장치를 기본으로 넣어, 손님은 편하게 연락하고 사장님은 진짜 문의만 또렷이 받도록 설계합니다. 폼에 스팸이 쌓여 진짜 문의를 놓치고 있다면, 지금 쓰는 폼이 어디까지 막아주고 있는지부터 한번 점검해 보시길 권합니다.