フォームに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の「プラグインリポジトリ」にチェックを入れて検索した時に出る警告をどうしてもなくしたいということでなければ警告を出したままでも構わないと思います。
ちなみに私はどうしても..側なので、コード制作時にはコメントを付与するようにしています。
コメントを残す