wp_verify_nonce() の使い方|説明・引数・注意点

説明

wp_verify_nonce() は、nonceが正しいかを検証する関数です。

基本構文

wp_verify_nonce( string $nonce, string|int $action = -1 ): int|false

引数

  • $nonce:検証するnonce
  • $action:生成時のアクション名

戻り値

有効なら 1(生成から12時間以内)または 2(12〜24時間)。無効なら false。

使い方(サンプル)

if ( ! wp_verify_nonce( $nonce, 'my_action' ) ) {
	wp_die( '不正なリクエストです' );
}

注意点

  • データを変更する処理では、権限チェックとあわせて必ず行います。
  • フォームから受け取ったnonceは、sanitize_text_field( wp_unslash( ... ) ) を通すとより安全です。

実務での使いどころ

  • フォームやAjaxで送られた、nonceが正しいかを、判定するとき(戻り値で、処理を分けたいとき)。

よくあるミスと対処

  • 戻り値を、true と比べている。戻り値は、1・2(有効)か、false。
  • $_POST の値を、wp_unslash() や、サニタイズせずに渡している。
  • nonceの確認だけで、権限の確認を省いている。権限は、current_user_can() で確認する。

NG例

if ( true === wp_verify_nonce( $_POST['my_nonce'], 'my_action' ) ) { // 戻り値は 1 か 2
	// ...
}

OK例

if ( isset( $_POST['my_nonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['my_nonce'] ) ), 'my_action' ) ) {
	// 検証に成功
}

使い分け早見表

関数 特徴
wp_verify_nonce() 戻り値で判定できる
check_admin_referer() 失敗すると、処理を止める(管理画面向け)
wp_create_nonce() nonceを作る

関連項目

wp_create_nonce()、check_admin_referer()、check_ajax_referer()

公式リファレンス:wp_verify_nonce() | Function | WordPress Developer Resources

コメント

タイトルとURLをコピーしました