밤사이 문의함에 광고·도배 글 수십 건이 쌓여 진짜 손님 한 줄이 그 속에 파묻힌다 — 작은 회사 웹사이트 문의 폼 스팸을 막는 5가지 원칙

아침에 문의함을 열었더니 밤새 쌓인 메일이 수십 통이다. 반가운 마음도 잠시, 열어 보면 죄다 알아볼 수 없는 링크 뭉치와 외국어 광고다. 그리고 그 스무 통의 도배 글 사이 어딘가에, '이번 주에 상담 가능할까요'라고 적은 진짜 손님의 한 줄이 조용히 파묻혀 있다. 스팸이 무서운 건 서버를 망가뜨려서가 아니라, 이렇게 진짜 문의를 가리고 알림을 무뎌지게 만들기 때문이다. 며칠 스팸에 시달리면 문의 알림을 아예 꺼 버리게 되고, 그때부터 손님 연락이 새기 시작한다.

문의 폼 스팸은 대부분 사람이 아니라 봇이 자동으로 뿌리는 것이다. 그래서 사람은 쉽게 통과하고 봇만 걸리는 장치를 몇 겹 두면, 손님을 귀찮게 하지 않고도 대부분을 막을 수 있다. 작은 회사 웹사이트에 바로 적용할 수 있는 다섯 가지 원칙을 정리했다.

1. 사람 눈에 안 보이는 '꿀단지' 입력칸을 심는다

가장 손쉽고 손님에게 부담이 없는 방법이 허니팟(honeypot), 우리말로 꿀단지 기법이다. 폼 안에 사람 눈에는 보이지 않는 입력칸을 하나 몰래 넣어 둔다. CSS로 화면 밖에 숨기거나 감춰 두면 손님은 존재조차 모르지만, 폼의 모든 칸을 기계적으로 채우는 봇은 이 함정 칸에도 값을 적어 넣는다. 서버에서 '이 칸에 값이 들어왔으면 봇'이라고 판단해 조용히 버리면 된다. 손님은 아무런 추가 동작을 하지 않아도 되고, 봇의 상당수가 여기서 걸러진다.

2. '너무 빨리 제출된' 폼을 의심한다

사람은 문의 내용을 읽고 쓰는 데 최소 몇 초에서 수십 초가 걸린다. 반면 봇은 페이지가 열리자마자 1초도 안 돼 폼을 던지고 사라진다. 그래서 폼이 화면에 나타난 시각을 몰래 기록해 두었다가, 제출까지 걸린 시간이 비정상적으로 짧으면(예: 3초 미만) 봇으로 간주하는 방법이 잘 통한다. 반대로 창을 열어 두고 며칠 뒤 제출하는 경우도 있으니 상한 시간까지 함께 두면 더 정확하다. 손님은 이 검사가 있는지도 모른 채 지나간다.

3. 캡차는 최후의 수단으로, 부담 적은 것부터

'나는 로봇이 아닙니다' 체크나 찌그러진 글자 맞히기 같은 캡차(CAPTCHA)는 확실하지만, 손님에게 숙제를 하나 더 내주는 셈이라 진짜 문의까지 줄어들 수 있다. 그래서 1·2번 장치로 대부분을 막고, 그래도 스팸이 넘어올 때 마지막에 얹는 것이 순서다. 요즘은 구글 reCAPTCHA v3나 클라우드플레어 Turnstile처럼 손님이 아무것도 클릭하지 않아도 뒤에서 조용히 사람 여부를 판별하는 방식이 있으니, 굳이 글자 맞히기로 손님을 괴롭힐 필요는 없다.

4. 걸러내는 판단은 반드시 서버에서 한 번 더 한다

화면 쪽(자바스크립트)에서만 스팸을 거르면, 봇은 화면을 거치지 않고 서버 주소로 곧장 데이터를 던져 그 검사를 통째로 건너뛴다. 그래서 최종 판단은 반드시 서버에서 이뤄져야 한다. 서버에서는 앞의 시간·꿀단지 검사에 더해, 본문에 링크가 몇 개 이상 들어 있는지, 특정 광고성 단어가 반복되는지, 같은 IP에서 짧은 시간에 몇 번이나 제출했는지 같은 신호를 함께 본다. 이런 규칙 몇 개만 겹쳐도 남은 스팸의 대부분이 걸린다.

5. 걸러낸 스팸도 버리되, '왜 걸렸는지'는 남긴다

스팸으로 판정한 문의는 손님 알림에서 빼야 알림이 다시 살아난다. 다만 곧바로 완전히 지우기보다, 스팸 보관함에 잠시 모아 두고 가끔 훑어보는 편이 안전하다. 어떤 규칙이 지나치게 빡빡해서 진짜 손님을 걸러 버리는 일(오탐)을 이렇게 잡아낼 수 있기 때문이다. 스팸을 막는 목적은 '봇을 완벽히 0으로 만드는 것'이 아니라 '진짜 손님의 한 줄이 파묻히지 않게 하는 것'이라는 점을 잊지 않는 게 좋다.

결국은 손님 한 명을 지키는 일

문의 폼 스팸 대응은 화려한 기술이 아니라, 꿀단지·제출 시간·서버 재검증 같은 여러 겹의 얇은 그물을 포개는 일이다. 한 겹씩은 허술해 보여도 겹쳐 두면 손님은 아무것도 눈치채지 못한 채 통과하고, 봇은 어느 그물엔가 걸린다. CYAN에서 작은 회사 홈페이지를 만들 때도 문의 폼에는 이 장치들을 기본으로 심어 둔다. 며칠 만에 열어 본 문의함에 진짜 손님의 연락 한 줄이 또렷이 남아 있게 하는 것, 그게 스팸을 막는 진짜 이유다.