SilentShield

SilentShield로 WordPress 양식 보호하기

공식 플러그인 “SilentShield – Captcha & Anti-Spam”이 스크립트를 삽입하고 모든 제출을 귀하의 서버에서 검증합니다. 별도의 코드는 필요 없습니다. 이 가이드에는 저희가 플러그인으로 직접 테스트한 내용만 기재되어 있습니다.

WordPress 디렉터리에서 플러그인 보기

요구 사항

  • WordPress 5.2 이상 및 PHP 7.4 이상(WordPress 디렉터리의 플러그인 정보 기준).
  • 웹사이트가 https로 제공되어야 합니다. 보안 컨텍스트가 없으면 브라우저가 Web Crypto 기능을 제공하지 않아 nonce가 생성되지 않으며, 보호된 양식을 제출할 수 없습니다.
  • 귀하의 도메인용 키가 있는 SilentShield 계정. www. 또는 staging. 같은 하위 도메인도 포함됩니다.

보호할 수 있는 양식

2026. 10. 7.에 플러그인 2.15.14 및 WordPress 7.1.2로 테스트했습니다: 사람은 통과하여 서버에서 확인되고, 브라우저 없이 보낸 제출은 거부됩니다.

양식테스트한 버전상태
Contact Form 76.2작동함
Fluent Forms6.2.15작동함
WordPress 댓글7.1.2작동함
WordPress 로그인7.1.2작동함
WordPress 회원가입7.1.2작동함
WooCommerce 결제(클래식)11.1.2작동함
WPForms2.0.2.2작동함
WooCommerce 결제(블록 결제)11.1.2작동함
Elementor Forms4.3.4 (Pro 4.2.1)작동함
Avada Forms7.11.7작동함

설치

  1. WordPress에서 “플러그인 → 새로 추가”를 열고 “SilentShield”를 검색합니다.
  2. “SilentShield – Captcha & Anti-Spam for WordPress”를 설치하고 활성화합니다.
  3. 이제 메뉴에 “SilentShield” 항목이 표시됩니다.

키 입력 및 양식 활성화

  1. SilentShield 대시보드에서 귀하의 도메인용 키를 만들고 복사합니다.
  2. WordPress에서 “SilentShield → API / SilentShield”를 열고 “API Key”에 키를 붙여 넣은 다음 “Validate”를 클릭합니다.
  3. “Activate API”를 켜고 “Save”를 클릭합니다.
  4. “SilentShield → Forms”를 열고 위 표에서 “작동함”으로 표시된 각 양식 플러그인의 보호를 켭니다.

플러그인은 사이트 키를 브라우저와 서버의 검증 모두에 사용합니다. 이를 위해 서버 키는 필요하지 않습니다.

f12-security 플러그인용 서버 키

f12-security 플러그인은 선택적으로 SilentShield와 봇 관련 정보를 주고받을 수 있습니다. 알려진 봇의 핑거프린트를 전송하고, 귀하의 계정에 대한 서명된 목록을 가져옵니다. 이 호출은 방문자의 브라우저가 아니라 귀하의 서버에서 이루어집니다. 이를 위해 플러그인에는 도메인의 서버 키가 필요합니다. 페이지 소스 코드에 표시되는 일반 웹사이트 키가 아닙니다.

  1. SilentShield 대시보드에서 “API 키”를 열고 해당 도메인의 키를 선택합니다.
  2. “보안” 페이지로 이동하여 “서버 키” 섹션에서 “서버 키 생성”을 클릭합니다.
  3. 값을 즉시 복사해 두십시오. 이 값은 한 번만 표시되며, 저희는 사본을 보관하지 않습니다.
  4. f12-security에서 서버 키라고 표시된 항목에 입력한 후 저장합니다.

서버 키는 서버 설정에만 입력해야 하며, 방문자에게 제공되는 페이지나 스크립트에는 절대 넣지 마십시오. 키를 분실한 경우 대시보드에서 새로 생성하십시오. 이전 키는 그 즉시 무효가 됩니다.

작동 확인

실제 제출

양식이 있는 페이지를 비공개 창에서 열고 직접 입력하여 제출합니다. 양식의 일반적인 확인 메시지가 표시되고, SilentShield 대시보드에 해당 제출이 판정과 함께 나타납니다.

거부되는 제출

같은 내용을 브라우저 없이 보냅니다. 예를 들어 댓글이 열려 있는 게시물에 curl로 댓글을 보냅니다. 주소와 게시물 ID를 바꾸십시오:

Terminalbash
curl -i -X POST https://example.com/wp-comments-post.php \
  -d "comment_post_ID=1&author=Test&[email protected]&comment=Test"

플러그인 메시지와 함께 거부되어야 합니다. 영어 사이트에서는 “Captcha not correct: Behavior check”입니다. Contact Form 7에서는 양식에 “Behavior check”가 표시됩니다.

문제 해결

“보내기”를 클릭해도 아무 일도 일어나지 않습니다.
페이지가 https가 아닌 http로 제공되고 있지 않습니까? 그 경우 브라우저 콘솔에 “[SilentShield] Web Crypto fehlt im Worker …” 경고가 표시됩니다(메시지는 독일어입니다). 페이지를 https로 제공하십시오.
Contact Form 7이 “There was an error trying to send your message”를 표시합니다.
검증은 통과했으며, 실패한 것은 WordPress의 메일 발송입니다. 봇 차단이 아니라 메일 설정(예: SMTP)을 확인하십시오.
실제 방문자에게 “Behavior check”가 표시됩니다.
가장 흔한 원인은 JavaScript를 지연하거나 병합하는 최적화 플러그인입니다. 아래 참고 사항을 확인하십시오. 또한 키가 페이지의 도메인에 속하는지 확인하십시오.
WPForms 양식이 제출되지 않거나 블록 결제가 모든 주문을 거부합니다.
SilentShield 플러그인을 버전 2.15.14 이상으로 업데이트하십시오. 두 문제 모두 버전 2.15.12에서 측정되었으며, 2.15.14에서는 더 이상 발생하지 않습니다.
스크립트가 무엇을 하는지 보고 싶습니다.
페이지 주소에 ?silentshield-debug를 덧붙이십시오. 그러면 브라우저 콘솔에 검증의 모든 단계가 표시됩니다.

SilentShield을 JavaScript 최적화에서 제외하기

캐시·속도 플러그인(WP Rocket, Perfmatters, LiteSpeed, Autoptimize 등)은 JavaScript를 방문자의 첫 상호작용까지 지연시키거나 파일을 하나로 합칠 수 있습니다. 둘 다 SilentShield를 망가뜨립니다. 위젯이 클릭할 때까지 실행되지 않아 페이지 로드부터의 행동 신호(마우스 움직임, 입력 리듬, 타이밍)가 사라지고, 보호 기능은 필요한 정보의 일부만으로 동작합니다. 양식 검사는 아예 실행되지 않습니다. 다음 패턴을 최적화 플러그인의 제외 목록에 추가하세요. “JavaScript 지연”과 “JavaScript 결합” 양쪽 모두에 필요합니다:

제외 패턴text
client.js
behavior-captcha
silentshield

확인 방법: 양식이 있는 페이지를 열고 아무것도 클릭하지 않은 상태에서 브라우저 콘솔에 performance.getEntriesByType("resource").map(r=>r.name).filter(n=>n.includes("client.js")).join() 를 실행하세요. 결과가 비어 있으면 SilentShield가 아직 로드되지 않은 것이며, 제외 설정이 빠진 것입니다.

제한 사항

  • “SilentShield → Forms”에서 켠 양식 플러그인만 보호됩니다.
  • 테스트한 버전만 기재합니다. 플러그인은 다른 양식 플러그인도 감지하지만, 그것들이 SilentShield와 작동하는지는 테스트하지 않았습니다.
  • 플러그인에는 자체 검사(허니팟, 시간 측정 등)가 있으며, 이에 대해 “JavaScript check” 같은 자체 메시지를 표시합니다.
  • SilentShield는 봇으로부터 양식을 보호합니다. 웹 애플리케이션 방화벽이나 DDoS 방어를 대체하지 않습니다.

운영

  • 플러그인은 다른 플러그인과 마찬가지로 WordPress에서 업데이트합니다. 브라우저의 스크립트는 항상 최신 버전으로 저희가 제공합니다.
  • 모든 제출은 할당량에 두 번 계산됩니다. 브라우저의 보고로 한 번, 귀하의 서버에서의 검증으로 한 번입니다.
  • 판정과 거부된 제출은 SilentShield 대시보드에서 확인할 수 있습니다.

요금 및 할당량 보기

플러그인 없이: 직접 통합

자체 양식이거나 플러그인을 사용하지 않는 경우, 스크립트를 직접 삽입하고 모든 제출을 서버에서 검증하십시오. 이 검증이 없으면 스크립트는 보호하지 못합니다. 직접 보낸 요청을 막지 못하기 때문입니다.

1. 스크립트 추가

테마의 functions.php에 다음 코드를 추가하거나 'Insert Headers and Footers'와 같은 플러그인을 사용합니다:

functions.phpphp
// functions.php
function silentshield_enqueue() {
    wp_enqueue_script(
        'silentshield',
        'https://api.silentshield.io/client.js?k=YOUR_API_KEY',
        array(),
        null,
        true
    );
}
add_action('wp_enqueue_scripts', 'silentshield_enqueue');

2. 서버 측 검증

폼 핸들러에 Nonce 검증을 추가합니다. 커스텀 폼의 경우 처리 함수에 다음을 추가하세요:

PHPphp
function verify_silentshield_nonce() {
    $nonce = sanitize_text_field($_POST['behavior_nonce'] ?? '');
    if (empty($nonce)) {
        wp_die('Missing verification', 'Error', array('response' => 422));
    }

    $response = wp_remote_post('https://api.silentshield.io/api/v1/captcha/verify-nonce', array(
        'headers' => array(
            'Content-Type' => 'application/json',
            'X-Api-Key' => SILENTSHIELD_API_KEY,
        ),
        'body' => wp_json_encode(array('nonce' => $nonce)),
        'timeout' => 5,
    ));

    if (is_wp_error($response)) {
        return; // fail open
    }

    $body = json_decode(wp_remote_retrieve_body($response), true);
    if (($body['ok'] ?? false) !== true || ($body['verdict'] ?? '') !== 'human') {
        wp_die('Bot detected', 'Forbidden', array('response' => 403));
    }
}

API 키 저장

보안을 위해 API 키를 wp-config.php에 추가하세요:

wp-config.phpphp
// wp-config.php
define('SILENTSHIELD_API_KEY', 'your-api-key-here');

AI 에이전트 관찰

폼 보호 외에도 WordPress는 어떤 AI 크롤러(GPTBot, ClaudeBot, PerplexityBot 등)가 사이트를 읽는지 기록할 수 있습니다 — 지금은 작은 must-use 플러그인 파일로, 향후 플러그인 업데이트에 내장될 예정입니다.

자세히 보기: AI 에이전트 관찰 →