Plugin Checkを実行すると、Nonce検証でサニタイズができていないと警告が出る場合の対処と考え方

公開日:2025(令和7)年9月9日/最終更新日:

WordPress Trouble Shooting and Repair | Personal WP Customization Notes (PWCN)

【景品表示法に基づく表記】ページ内のコンテンツには、商品プロモーションが含まれています

フォームにNonceフィールドを追加して、プログラム側で検証を行うような記述をすると、Plugin Checkで以下のように指摘されることがあります。

  • Detected usage of a non-sanitized input variable: $_POST[‘Nonceフィールド名’]
  • $_POST[‘Nonceフィールド名’] not unslashed before sanitization. Use wp_unslash() or similar

メッセージに従って以下のように修正するとこんな形にすれば解決します。

// nonceが正しくなければ無視する
if ( !wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['Nonceフィールド名'] ) ), 'Nonceキー' )  ) {
	return ;
}

ただこれって、wp_unslash()で末尾のスラッシュを削除した上でsanitize_text_field()で許可されている文字列以外は削除するという処理になるのですが、何ともコードが長くなりますし、何よりその処理をすることでフォームに出力されたNonceフィールドと一致しなくなる可能性があるのでは?と感じます。

これをいろいろと調べていくと、どうやらPlugin Checkでは一連のコードすべてを見通して警告を出しているのではなく、$_POST[”]などを使う箇所すべてでサニタイズとスラッシュの削除が行われているかをチェックしているだけのようです。

もしかすると整合性(チェック)が通らなければ、その画面の更新ができなくなる可能性があるので、何も加工せず生データでやり取りするのがベストでしょうから、以下のようにPlugin Checkで指摘されないようにコメントを付加して対処する方法もあります。

// nonceが正しくなければ無視する
// phpcsがサニタイズ処理とスラッシュの削除処理が欠けていると過剰反応するのを防ぐコメント
// phpcs:ignore WordPress.Security.ValidatedSanitizedInput.MissingUnslash , WordPress.Security.ValidatedSanitizedInput.InputNotSanitized
if ( !wp_verify_nonce( $_POST['Nonceフィールド名'] , 'Nonceキー' )  ) {
	return ;
}

どちらが正しいのかという点については専門でないためこれだ!とは言えなくて申し訳ないですが、整合性ということを考えればやはりコメントを追加する方がいいのでは?と思います。

まあ、公式プラグインとして登録したいのであれば、コメントを追加しておくことで「ここは無視させてるよ」と明示でき、かつ、整合性も担保できるのでベストなのでしょうけど、そうでなければPlugin Checkの「プラグインリポジトリ」にチェックを入れて検索した時に出る警告をどうしてもなくしたいということでなければ警告を出したままでも構わないと思います。

ちなみに私はどうしても..側なので、コード制作時にはコメントを付与するようにしています。

Lolipop ServerMoshimo Ad x-serverMoshimo Ad

WordPress Trouble Shooting and Repair | Personal WP Customization Notes (PWCN)
Plugin Checkで「Use of a direct database call is discouraged.」と出た時の対処(phpcsエラーへの対処)