어떤 문제가 있으신가요?
세 가지 경우는 비슷해 보이지만 원인이 다릅니다.
- 스팸이 들어옵니다. 받은편지함이 광고, 링크, 의미 없는 텍스트로 가득 찹니다. 양식이 봇을 통과시키고 있습니다.
- 양식이 오류를 표시합니다. 방문자에게 “There was an error trying to send your message. Please try again later.”가 표시됩니다(한국어 사이트에서는 번역된 문구로 표시). 스팸 차단일 수도 있고 메일 발송 문제일 수도 있습니다.
- 실제 문의가 사라집니다. 아무도 불평하지 않지만 아무것도 도착하지 않습니다. 이 경우 보호 기능이 사람을 거부하고 있거나, 메일이 받은편지함에 도달하지 못하는 것일 수 있습니다.
보호 기능을 추가하기 전에 먼저 어떤 경우인지 파악하세요. 방법은 “메일 발송인가, 봇 차단인가?” 절에 설명되어 있습니다.
Contact Form 7에 기본으로 들어 있는 기능
Contact Form 7에는 스팸 대책이 여러 가지 내장되어 있습니다(버전 6.1.7 기준으로 확인).
- 금지 목록. CF7은 모든 제출을 “설정 → 토론”(“Disallowed Comment Keys”)의 목록과 대조합니다. 일치하면 스팸으로 처리됩니다. 반복되는 단어와 도메인에는 효과가 있지만 새로운 텍스트에는 효과가 없습니다.
- 퀴즈 필드.
[quiz]태그를 사용하면 양식이 직접 정한 질문을 묻습니다. 아무 양식이나 채우는 봇은 실패하지만, 귀하의 사이트를 노리고 만든 봇은 통과합니다. - Akismet. Akismet 플러그인과 Akismet 키가 있으면 CF7이 이름, 이메일 주소, 본문을 Akismet 서비스로 검사합니다.
- reCAPTCHA v3. CF7이 Google에서 스크립트를 불러오고 점수 기준에 못 미치는 제출을 거부합니다.
- Cloudflare Turnstile. CF7은 Turnstile을 통합하며, 스크립트는 Cloudflare에서 제공됩니다.
금지 목록과 퀴즈는 외부 서비스 없이 동작합니다. Akismet, reCAPTCHA, Turnstile은 방문자 데이터를 각 제공업체로 보내므로 개인정보 처리방침에 기재해야 합니다.
추가 봇 차단이 의미 있는 경우
전용 봇 차단은 다음과 같은 경우에 가치가 있습니다.
- 금지 목록과 퀴즈에도 불구하고 스팸이 계속 들어오는 경우,
- Google이나 Cloudflare의 스크립트를 불러오고 싶지 않은 경우,
- 거부된 모든 제출에 대해 거부된 이유를 확인하고 싶은 경우.
퀴즈만으로 양식이 충분히 보호된다면 더 필요한 것은 없습니다. 아무도 필요로 하지 않는 보호는 오류의 원인을 하나 더 늘릴 뿐입니다.
Contact Form 7용 SilentShield 설정
공식 플러그인 “SilentShield – Captcha & Anti-Spam”은 직접 코드를 작성하지 않아도 Contact Form 7을 보호합니다. Contact Form 7 6.1.7과 WordPress 7.0에서 테스트했습니다.
- WordPress 디렉터리에서 플러그인을 설치하고 활성화합니다.
- “SilentShield → API / SilentShield”에서 키를 입력하고 “Validate”를 클릭한 뒤 “Activate API”를 켜고 저장합니다.
- “SilentShield → Forms”에서 Contact Form 7을 켭니다.
사이트는 https로 운영되어야 하며, 그렇지 않으면 양식을 제출할 수 없습니다. 모든 단계와 테스트된 양식 플러그인은 WordPress 가이드에 있습니다. 모든 제출은 할당량에 포함됩니다. 가격 및 할당량을 참고하세요.
실제 제출과 실패한 시도 테스트
실제 제출: 시크릿 창에서 페이지를 열고 양식을 직접 작성해 제출합니다. 초록색 테두리가 있는 CF7의 확인 메시지가 표시되어야 합니다.
실패한 시도: 같은 양식을 브라우저 없이 CF7 인터페이스로 보냅니다. 양식 ID와 _wpcf7_unit_tag 값은 페이지 소스의 양식 숨김 필드에서 찾을 수 있습니다.
curl -X POST "https://example.com/?rest_route=/contact-form-7/v1/contact-forms/123/feedback" \
-F "_wpcf7=123" -F "_wpcf7_unit_tag=wpcf7-f123-p45-o1" -F "_wpcf7_container_post=45" \
-F "your-name=Test" -F "[email protected]" -F "your-message=Test"
"status":"spam"이 포함된 응답이 와야 합니다. SilentShield를 사용하면 메시지에 “Behavior check”가 표시됩니다.
메일 발송인가, 봇 차단인가?
mail_sentspammail_failedvalidation_failedContact Form 7에서 “스팸”과 “메일을 보낼 수 없음”은 같은 기본 문구를 사용합니다. 두 곳에서 구분할 수 있습니다.
- 메시지의 테두리 색: 테마가 CF7의 색을 덮어쓰지 않는 한, 주황색은 스팸, 빨간색은 메일 발송 실패를 뜻합니다.
- 브라우저의 응답: 개발자 도구(네트워크 탭)에서
feedback에 대한 응답에status가 들어 있으며, 값은spam또는mail_failed입니다.
mail_failed라면 봇 차단은 제출을 통과시킨 것이고, 문제는 WordPress의 메일 발송에 있습니다. 이 경우 메일 설정을 확인하세요. 예를 들어 SMTP 플러그인을 사용할 수 있습니다. spam이라면 보호 조치가 제출을 거부한 것입니다. SilentShield를 사용하면 메시지에 “Behavior check”처럼 이유가 표시됩니다.
한계
- 사람이 손으로 쓰는 스팸은 어떤 보호로도 막을 수 없습니다.
- 브라우저에서 JavaScript가 동작하지 않으면 보호된 양식으로의 제출은 거부됩니다.
- SilentShield는 양식을 봇으로부터 보호합니다. 웹 애플리케이션 방화벽이나 DDoS 방어를 대체하지 않습니다.