WordPressのAjaxでセキュアな通信を行う

  • ---

    LINEで送る
  • -

    ブックマーク
  • -

    pocket
  • -

    rss
wordpress image
イラストACの画像をもとに加工しています。

WordPressのAjaxでセキュアな通信を行う方法を、サンプルコードを使って説明します。

nonceを使ってかんたんに実装します。

nonceとは何か?

nonceは使い捨てのランダムな値です。これを使ってサーバが正当なhttp/httpsリクエストを受信したことを確認します。

WordPressでは、nonceをワンタイムパスワードのように使います。じっさいは、nonce値は有効期間をもっていて、有効期間を過ぎたらランダムな値が変更されるしくみです。

有効期間のデフォルトは1日です。

実装はかんたんです。さっそく見てみましょう。

サンプルコードは『WordPressでAjaxを使う(管理画面 編)』を元にすすめます。WordPressでのAjaxの実装方法が分からない人は、こちらからどうぞ。

JavaScriptのコーディング

ここでは、キャッシュのクリア処理をサーバーにリクエストします。

jsファイルのキュー登録

キュー登録のサンプルコードです。

add_action('admin_enqueue_scripts', function() {
    wp_register_script('js_handle_name', plugins_url('my-plugins/js/clear-cache.js', __FILE__), array('jquery'), '1.0.0', true);

    $ajax = [
        'ajax_url' => admin_url('admin-ajax.php'),
        'check_nonce' => wp_create_nonce('ajax-nonce')
    ];
    wp_localize_script('js_handle_name', 'localize', $ajax);
    wp_enqueue_script('js_handle_name');
} );

wp_localize_script()のパラメータに、生成したnonceのランダムな値を追加します。

$ajax = [
    'check_nonce' => wp_create_nonce('ajax-nonce')
];
wp_localize_script('js_handle_name', 'localize', $ajax);

jsファイルの内容

次に、リクエストでnonceの値を送信するように、jsファイルの内容に追加します。

function clearCacheSnsCount() {
    jQuery.ajax({
        type: "POST",
        url: localize.ajax_url,
        dataType: 'text',
        data: {
            action: 'clear_cache',
            check_nonce: localize.check_nonce
        }
    }).done(function(data, textStatus, jqXHR) {
        outputMsg(data);
    }).fail(function() {
        outputMsg('cache clear error!!');
    });
}

check_nonceというクエリにnonceの値をつけて、リクエストを送信します。

サーバの処理(phpのコーディング)

次の関数がajaxで送信したリクエストをサーバーで受信する処理です。

function clear_cache() {
    $cache_file = '../cache/11111111111111111.cache';
    $success = __('Complete clear cache');
    $error = __('Clear cache failer');
    $result = '';

    if ( ! check_ajax_referer( 'clear_cache', 'check_nonce', false ) ) {
        echo $error;
        die();
    }

    if ( ! check_admin_referer( 'clear_cache', 'check_nonce' ) ) {
        echo $error;
        die();
    }

    if(file_exists($cache_file)) {
        if(unlink($cache_file)) {
            $result = $success;
        } else {
            $result = $error;
        }
    } else {
        $result = $success;
    }
    echo $result;
    die();
}
add_action('wp_ajax_clear_cache', 'clear_cache');

check_ajax_referer()は、Ajax通信用のnonce値の確認を行います。内容が一致しないときはfalseを返します。

check_admin_referer()は、管理画面用のnonce値の確認を行います。WordPressの管理画面でAjaxを実装するときに使います。

ログイン認証されてないときはfalseを返します。

パラメータには、Ajax通信で指定したactionと、nonceのクエリ変数名を指定します。

また、Ajaxでない通常のリクエスト用にwp_verify_nonce()も用意されています。

nonceだけで大丈夫か?

WordPressのnonceは有効期間があるので、正確にはワンタイムパスワードではなく、セキュアではないとも言えます。しかし、有効期間の設定の変更ができます。

たとえば、有効期間を4時間に変更するときは、functions.phpなどに次のように定義します。

add_filter( 'nonce_life', function () { return 4 * HOUR_IN_SECONDS; } );

有効期間をできるだけ短くして、ワンタイムパスワードに近いセキュリティができます。

それでも、これだけで大丈夫?と思うかもしれません。

いま、セキュアなWordpress運用としくみについてまとめ中です。ご紹介できるようになったら、随時公開していきます。

前のページ
WordPress: Ajaxの使い方(公開サイト 編)
WordPressの本
post-cta-image

たくさんあるなかで、WordPressの基本が学べる、目的別に学べる本を選びました。

  • WordPressの基本
  • Webサイト作成から運用まで全体的に学ぶ
  • ブログサイトの運営からサイトの収益化を学ぶ
  • サイト作成・運営 + 集客の方法を学ぶ
  • WordPressからPHPプログラミングを学ぶ
  • 最新のWordPress(バージョン5)に対応した本

の7冊です。どうしてもネット上で調べて勉強するのが苦手という人におすすめです。

この内容をモノにすればほかの本は必要ありません。あとは自分の力で、書籍を使わずにインターネット上にある情報だけで学んでいけます。


WordPressの本7選

SNSでも記事を配信しています。
コメントを残す

*

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

top
この記事を気に入ったらぜひシェアも!!