MENU

check_admin_referer()

check_admin_referer() は、WordPressでフォームやリンクからのリクエストが正当な管理画面操作かどうかを検証するための関数です。

CSRF(クロスサイトリクエストフォージェリ)対策として使用され、セキュアなデータ送信や操作を行いたいときに不可欠な仕組みです。wp_nonce_field()wp_nonce_url() で生成したnonceを検証するのが主な役割です。

目次

基本構文

check_admin_referer( string $action = -1, string $query_arg = '_wpnonce' );

この関数は、管理画面のフォームなどで送信された _wpnonce の値が、事前に指定された $action と一致するかどうかを検証します。不一致の場合は wp_die() を実行し、処理を中断します。

引き数と戻り値

引数説明
$actionstringnonce の生成時に使用したアクション名。デフォルトは -1
$query_argstring検証対象のクエリ引数名(通常は _wpnonce)。
戻り値説明
truebool不一致の場合は wp_die() により終了されるため、false は返しません。

使用例

タグを使った使用例

フォームにnonceを付加し、チェックする流れ:

フォームの表示部分(例:管理画面)

<form method="post" action="">
  <?php wp_nonce_field('my_custom_action', 'my_custom_nonce'); ?>
  <input type="submit" value="送信">
</form>

送信されたデータの処理部分

if ( isset($_POST['my_custom_nonce']) ) {
    check_admin_referer('my_custom_action', 'my_custom_nonce');
    // 安全な処理
}
  • wp_nonce_field() で nonce を生成し、フォームに埋め込む
  • check_admin_referer() で、その nonce の有効性とアクションの整合性を確認

注意点

  • check_admin_referer() を使うことで、CSRF攻撃を防止できますが、nonce自体は完全な認証情報ではなく、「今ログイン中のユーザーがこの操作を意図して行ったか」を確認する目印にすぎません。
  • 非ログインユーザー向けのフロントエンドでは check_ajax_referer() などの関数の方が適しています。

良く一緒に使われる関数

wp_nonce_field()

wp_nonce_field('my_action', 'my_nonce_name');

この関数で生成した nonce を check_admin_referer() で検証します。

一緒に使うコード例

<form method="post">
  <?php wp_nonce_field('delete_item', 'delete_item_nonce'); ?>
  <button type="submit">削除</button>
</form>

<?php
if ( isset($_POST['delete_item_nonce']) ) {
    check_admin_referer('delete_item', 'delete_item_nonce');
    // 削除処理
}
?>

想定されるトラブル

この操作は許可されていません。”というエラーが出る

解決方法

  • nonceが期限切れ(デフォルトで24時間)になっている可能性があります。ページをリロードしてフォームを再送信してください。
  • wp_nonce_field() で指定したアクション名と、check_admin_referer() のアクション名が一致しているか確認してください。
  • フォームに method="post" が指定されていない、もしくは $_POST ではなく $_GET になっている場合は、意図通りに動作しないことがあります。

Q&A

非ログインユーザーにも使えますか?

check_admin_referer() はログインユーザーを前提とした関数です。非ログインユーザーには wp_verify_nonce() を直接使うか、check_ajax_referer() を使うと良いです。

nonce の有効期限は?

通常は24時間です。nonce_life フィルターで変更可能です。

まとめ

check_admin_referer() は WordPress のセキュリティを担保する重要な関数の一つで、CSRF対策に有効です。

主に wp_nonce_field() とセットで使い、管理画面内でのフォーム送信やリンク操作の正当性を検証します。

正しい使い方と理解をもって導入すれば、セキュアなカスタマイズが可能になります。

よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次