블로그로 돌아가기
기초 게시일 28.09.2026 1분 분량

WordPress 문의 양식: 보안 점검 목록

Contact Form 7, WPForms, Gravity Forms, Ninja Forms, Fluent Forms 중 무엇을 쓰는지보다 설정과 유지 관리 방식이 더 중요합니다. 점검할 항목과 업데이트마다 다시 확인할 사항을 알아봅니다.

대부분의 WordPress 사이트는 Contact Form 7, WPForms, Gravity Forms, Ninja Forms, Fluent Forms 등 몇몇 양식 플러그인 중 하나를 사용합니다. 어느 것이든 안전하게 운영할 수도 있고 완전히 노출된 채 둘 수도 있습니다. 차이는 플러그인 자체보다는 설정, 주변 추가 기능, 서버에서 메일을 보내는 방식 및 도착한 메시지의 처리에 있는 경우가 많습니다.

  • 양식 플러그인과 모든 추가 기능을 최신으로 유지하고 사용하지 않는 것은 삭제하십시오.
  • 플러그인 자체의 허니팟, CAPTCHA 연동, 적합한 경우 Akismet 같은 스팸 방지를 활성화하고 실제 작동하는지 확인하십시오.
  • 자신의 도메인 주소에서 인증된 SMTP를 통해 알림을 발송하십시오.
  • 업로드 유형과 크기를 제한하고 업로드한 파일이 공개 목록에 표시되거나 탐색되지 않도록 하십시오.
  • 페이지와 소스 코드에 수신 이메일 주소를 노출하지 마십시오.
  • 필요한 제출 내용만 필요한 기간 동안 보관하십시오.
  • WordPress, 테마 또는 플러그인을 업데이트할 때마다 간단히 점검하십시오.

업데이트: 양식 플러그인과 주변의 모든 것

양식 플러그인은 인터넷의 누구에게서든 입력을 받으므로 인기 있는 공격 대상입니다. 보안 수정은 일반 업데이트로 배포되므로 신속히 업데이트하십시오. 주요 플러그인만이 아닙니다. 결제, 업로드, CRM 연결, 조건부 논리 또는 추가 CAPTCHA 제공업체를 위한 추가 기능은 자체 취약점이 있는 별도의 코드입니다. 시험 삼아 설치하고 잊은 플러그인도 마찬가지입니다. 비활성화만으로는 충분하지 않습니다. 비활성화한 플러그인도 서버에 남으며 경우에 따라 파일에 직접 접근할 수 있습니다. 사용하지 않으면 삭제하십시오.

스팸 방지: 켠 뒤 작동을 증명하십시오

대부분의 양식 플러그인은 자체 스팸 방지 옵션 또는 외부 서비스 연동을 제공합니다. 봇은 채우지만 사람에게는 보이지 않는 허니팟 필드, reCAPTCHA·hCaptcha·Cloudflare Turnstile 같은 CAPTCHA, 메시지 내용을 스팸 데이터베이스와 대조하는 Akismet이 있습니다. 옵션은 플러그인과 버전에 따라 다르므로 추측하지 말고 설정을 확인하십시오. 외부 CAPTCHA는 제삼자의 스크립트를 로드하고 Akismet은 제출 내용을 외부 서비스로 보냅니다. 둘 다 개인정보 처리방침에 명시해야 하며 설정에 따라 동의 관리에도 포함해야 합니다.

더 흔한 문제는 켜져 있지만 작동하지 않는 보호입니다. 공개 테스트 키로 실행하는 CAPTCHA는 모든 것을 통과시킵니다. 캐싱 또는 최적화 플러그인이나 JavaScript 오류로 스크립트가 차단된 위젯은 아무것도 막지 못합니다. 숨기는 스타일이 없는 허니팟 필드는 화면 낭독기가 읽고 실제 방문자가 채웁니다. 따라서 변경 후에는 비공개 창에서 양식을 열고 브라우저 콘솔과 페이지 소스를 확인한 뒤 테스트 메시지를 보내십시오. Google에 의존하지 않는 보호를 원한다면 무료 formexposed WordPress 플러그인이 허니팟, 시간 검사 및 작업 증명을 추가하고 플러그인 업데이트 후 사이트를 다시 점검합니다. 여러 선택지 중 하나입니다.

메일: 발송 방식과 목적지

기본적으로 WordPress는 서버의 PHP 메일 함수에 메일을 넘깁니다. 많은 호스팅 환경에서 이 메시지는 인증이 부족하여 스팸으로 분류되거나 조용히 사라집니다. 대신 SMTP 플러그인 또는 호스팅의 메일 서비스를 통해 사용자 이름과 비밀번호가 있는 실제 메일함과 전용 forms@ 주소 같은 자신의 도메인 발신 주소를 사용하십시오. 도메인의 SPF, DKIM 및 DMARC 레코드는 이 발신자를 포함해야 합니다. 방문자 주소를 From 필드에 넣지 마십시오. 자신의 도메인이 아니므로 DMARC 일치 검증을 통과하지 못하며 방문자 도메인의 정책에 따라 스팸으로 분류되거나 거부됩니다. Reply-To로 설정하면 여전히 한 번의 클릭으로 답장할 수 있습니다.

수신 주소는 페이지가 아니라 플러그인 설정에 있어야 합니다. 문의 페이지의 소스를 확인하십시오. 양식 옆의 mailto 링크나 수신 주소를 담은 숨겨진 필드는 모든 주소 수집 봇에게 그 주소를 넘겨줍니다. 오래된 양식이나 자체 제작한 양식에서는 더 심각할 수 있습니다. 서버가 숨겨진 수신자 필드를 신뢰하면 누구나 이를 바꾸어 양식으로 임의의 주소에 메일을 보낼 수 있습니다.

업로드 및 저장된 제출 내용

파일 업로드는 양식에서 가장 위험한 기능이므로 정말 필요한지부터 확인하십시오. 필요하다면 몇몇 위험한 유형만 차단하기보다 PDF와 일반 이미지 형식처럼 실제로 예상하는 유형만 허용하고 크기를 제한하십시오. 플러그인이 업로드를 저장하는 위치를 확인하십시오. 공개 디렉터리에서 목록을 볼 수 없어야 하며 가능하면 추측 가능한 주소로도 접근할 수 없어야 합니다. 처리한 뒤 삭제하거나 서버에 남기는 대신 첨부파일로 보내십시오.

많은 양식 플러그인이나 추가 기능은 스팸을 포함한 모든 제출을 WordPress 데이터베이스에 저장합니다. 메일 실패 시 유용한 백업이지만 계속 쌓이는 개인정보이기도 합니다. GDPR의 보존 제한 원칙(제5조(1)(e))에 따라 필요한 기간을 넘겨 보관해서는 안 됩니다. 제출 내용의 저장이 필요한지, 어떤 필드를 얼마나 오래 보관할지 결정하십시오. 자동 삭제 설정이 있다면 사용하고, 없다면 오래된 기록을 정기적으로 삭제하십시오. 데이터베이스 백업에도 같은 데이터가 포함됩니다.

업데이트할 때마다

  1. 1비공개 창에서 문의 페이지를 여십시오. 양식과 스팸 방지 요소가 정상적으로 표시되고 브라우저 콘솔에 오류가 없는지 확인합니다.
  2. 2페이지 소스를 확인하십시오. 허니팟 필드와 CAPTCHA 스크립트는 여전히 있어야 하고 수신 주소는 없어야 합니다.
  3. 3테스트 메시지를 보내십시오. 스팸이 아니라 받은편지함에 도착하고 헤더에 SPF, DKIM 및 DMARC 통과가 표시되는지 확인합니다.
  4. 4수신자, 발신 주소, 허용 업로드 유형과 크기, 제출 내용 보존 기간 등 중요한 설정을 확인하십시오.
  5. 5개인정보 처리방침 링크와 동의 문안이 여전히 양식에 표시되는지 확인하십시오.
  6. 6날짜와 점검한 항목을 기록하여 양식이 마지막으로 확실히 작동했던 시점을 알 수 있게 하십시오.

습관이 되면 시간이 얼마 들지 않으며, 그렇지 않으면 몇 주 동안 알아채지 못할 조용한 실패를 정확히 잡아냅니다. 외부 관점이 필요하다면 formexposed.com의 무료 점검이 아무것도 제출하지 않고 공개 양식 페이지를 살펴보고 예상한 보호가 존재하며 유효하게 설정되어 있는지 보여줍니다. 계정은 필요하지 않습니다.