2026年5月21日

2026年5月21日

WordPressのnonce(セキュリティトークン)の使い方

はじめに

この記事では、WordPressでnonce(セキュリティトークン)を使用してどのようにセキュリティを強化するかについて詳しく紹介します。nonceは、非同期な通信やフォーム送信時にユーザーの要求が偽装されていないことを確認するために使用される重要な機能です。

症状・背景

このテーマが必要になる主な場面:

  • フォームからのデータの送信を保護する
  • AJAXリクエストに対する安全性を確保する
  • 特定のユーザーが許可されたアクションを行うことを確認する
  • ウェブサイト上で起こる潜在的な攻撃や不正行為からウェブアプリケーションを守る

手順・設定方法

ステップ1: nonceの生成と送信

# WordPress内でnonceを生成するにはwp_nonce_field関数を使用します。
wp_nonce_field('your_action', 'your_token');

# フォーム内に生成したnonceを非表示のフィールドとして追加します。
<input type="hidden" name="your_token" value="<?php echo wp_create_nonce( 'your_action' ); ?>" />

ステップ2: nonceの検証

# nonceの有効性をチェックするためにwp_verify_nonce関数を使用します。
if ( !isset($_POST['your_token']) || !wp_verify_nonce( $_POST['your_token'], 'your_action' ) )
    wp_die('Nonce check failed!');

# チェックに成功した場合、nonceが正しいことが確認されます。

ステップ3: nonceの応用

# AJAXリクエストに対してnonceを使用する方法です。
add_action( 'wp_ajax_your_function', 'your_callback' );
function your_callback() {
    if ( !isset($_POST['your_token']) || !wp_verify_nonce( $_POST['your_token'], 'your_action' ) )
        wp_die('Nonce check failed!');
    
    // AJAXリクエストの処理
}

# フロントエンドからnonceを生成して送信するJavaScriptコード例です。
jQuery.ajax({
    type: "post",
    url: ajaxurl,
    data: {
        action: 'your_function',
        your_token: '<?php echo wp_create_nonce( "your_action" ); ?>'
    },
    success: function(response) {
        // 成功時の処理
    }
});

ステップ4: nonceのトラブルシュート

# nonceが正しく生成されなかった場合、エラーメッセージを出力します。
if ( !wp_verify_nonce( $_POST['your_token'], 'your_action' ) )
    echo "Nonce verification failed!";

注意事項

  • nonceは一回限りの使用を目的としています。一度使用したnonceは再利用可能ではありません。
  • nonceが生成された後にページがリフレッシュされると、古いnonceは無効になりますので注意が必要です。
  • nonceの有効期限は24時間とされていますが、必要に応じてカスタマイズすることが可能です。
  • 非常に重要なデータを送信する際には、その他のセキュリティ対策と一緒にnonceを使用してください。

まとめ

1. nonceの生成: wp_create_nonce関数を使用してnonceを生成します。

2. フォーム内のnonceフィールド: フォーム内に非表示のnonceフィールドを追加します。

3. nonceの検証: wp_verify_nonce関数を利用してnonceが正しいことを確認します。

4. AJAXリクエストとの組み合わせ: AJAXリクエストでnonceを使用することで安全性を向上させます。

5. トラブルシューティング: nonceの問題が出た場合、適切なエラーハンドリングを行うことが重要です。

関連記事:

お気軽にご相談ください

お見積りへ お問い合わせへ