SilentShield で WordPress のフォームを保護する
公式プラグイン「SilentShield – Captcha & Anti-Spam」がスクリプトを組み込み、すべての送信をお客様のサーバーで検証します。独自のコードは不要です。このガイドには、私たちがプラグインで実際にテストした内容のみを記載しています。
要件
- 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 7 | 6.2 | 動作します |
| Fluent Forms | 6.2.15 | 動作します |
| WordPress のコメント | 7.1.2 | 動作します |
| WordPress のログイン | 7.1.2 | 動作します |
| WordPress のユーザー登録 | 7.1.2 | 動作します |
| WooCommerce のチェックアウト(クラシック) | 11.1.2 | 動作します |
| WPForms | 2.0.2.2 | 動作します |
| WooCommerce のチェックアウト(ブロックチェックアウト) | 11.1.2 | 動作します |
| Elementor Forms | 4.3.4 (Pro 4.2.1) | 動作します |
| Avada Forms | 7.11.7 | 動作します |
インストール
- WordPress で「プラグイン → 新規追加」を開き、「SilentShield」を検索します。
- 「SilentShield – Captcha & Anti-Spam for WordPress」をインストールして有効化します。
- メニューに「SilentShield」という項目が表示されます。
キーを入力してフォームを有効にする
- SilentShield ダッシュボードでドメイン用のキーを作成し、コピーします。
- WordPress で「SilentShield → API / SilentShield」を開き、「API Key」にキーを貼り付けて「Validate」をクリックします。
- 「Activate API」をオンにして「Save」をクリックします。
- 「SilentShield → Forms」を開き、上の表で「動作します」となっている各フォームプラグインの保護をオンにします。
プラグインはサイトキーを、ブラウザーでもサーバーでの検証でも使用します。そのためにサーバーキーは必要ありません。
f12-security プラグイン用のサーバーキー
f12-security プラグインは、任意で SilentShield とボットに関する情報をやり取りできます。既知のボットのフィンガープリントを報告し、お客様のアカウント向けの署名付きリストを取得します。これらの呼び出しを行うのは訪問者のブラウザではなく、お客様のサーバーです。そのためプラグインには、お客様のドメインのサーバーキーが必要です。ページのソースコードに表示される通常のウェブサイトキーではありません。
- SilentShield のダッシュボードで「APIキー」を開き、お客様のドメインのキーを選択してください。
- 「セキュリティ」ページに移動し、「サーバーキー」セクションで「サーバーキーを作成」をクリックしてください。
- 表示された値はすぐにコピーしてください。表示されるのは一度きりで、当社はコピーを保管しません。
- f12-security のサーバーキーと表示されたフィールドに入力し、保存してください。
サーバーキーは、お客様のサーバーの設定にのみ保管してください。訪問者に配信されるページやスクリプトには決して含めないでください。紛失した場合は、ダッシュボードで新しいキーを作成してください。古いキーは無効になります。
動作を確認する
本物の送信
フォームのあるページをプライベートウィンドウで開き、手で入力して送信します。フォームの通常の確認メッセージが表示され、SilentShield ダッシュボードに送信がその判定とともに表示されます。
拒否される送信
同じ内容をブラウザーを使わずに送信します。たとえば、コメントが開いている投稿に curl でコメントを送ります。アドレスと投稿 ID を置き換えてください:
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 を訪問者の最初の操作まで遅延させたり、ファイルを 1 つにまとめたりできます。どちらも SilentShield を壊します。ウィジェットはクリックされるまで動かず、ページ読み込みからの行動シグナル(マウスの動き、入力のリズム、タイミング)が失われ、保護は必要な情報のごく一部で動くことになります。フォームスキャンはまったく実行されません。次のパターンを最適化プラグインの除外リストに追加してください。「JavaScript の遅延」と「JavaScript の結合」の両方に必要です:
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 はボットからフォームを保護します。Web アプリケーションファイアウォールや DDoS 対策の代わりにはなりません。
運用
- プラグインはほかのプラグインと同様に WordPress から更新します。ブラウザーのスクリプトは常に最新版が当社から配信されます。
- 1 回の送信はクォータに 2 回カウントされます。ブラウザーからの報告で 1 回、お客様のサーバーでの検証で 1 回です。
- 判定と拒否された送信は SilentShield ダッシュボードで確認できます。
プラグインを使わない場合:独自の組み込み
独自のフォームの場合やプラグインを使わない場合は、スクリプトをご自身で組み込み、すべての送信をサーバーで検証してください。この検証がなければスクリプトは保護になりません。直接送信されたリクエストを止めることはできません。
1. スクリプトを追加する
テーマのfunctions.phpに以下のコードを追加するか、「Insert Headers and Footers」などのプラグインを使用してください:
// 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検証を追加します。カスタムフォームの場合は、処理関数に以下を追加してください:
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.php
define('SILENTSHIELD_API_KEY', 'your-api-key-here');AIエージェントの観測
フォーム保護に加えて、WordPressはどのAIクローラー(GPTBot、ClaudeBot、PerplexityBotなど)がサイトを読んでいるかも記録できます — 現在は小さなmust-useプラグインファイルで、今後のプラグインアップデートで組み込みになります。