WordPressでフォームを作成するなら、nonceを入れる

WordPressにはnonceという仕組みがあり、そのnonceを使うことで、CSRF対策ができる。

nonceとは

nonceを簡単に説明すると、WordPressが発行するセキュリティトークンのこと。
これを受け取り、認証することで、悪意のない正式なユーザーから、正しくpostされたかを認証できる。

CSRF対策につながる。

これはWordPressなら、必須と言っていいだろう。

使用例

formの中で使用する際はwp_nonce_field()を使う。

<form method="post">
    <!-- some inputs here ... -->
    <?php wp_nonce_field( 'action_name', 'nonce_field_name' ); ?>
</form>

※action_nameとnonce_field_nameは各自で適宜設定した名前に置き換えてほしい。

関数を引数なしでそのまま使った場合は、actionに-1,nonceに_wpnonceが入るが、セキュリティ的に落ちるので各自で設定しておくとよい。

form送信先では、フロント側か管理画面側で処理が異なる。

フロント側では、wp_verify_nonce関数を使って認証する。

<?php
if ( ! isset( $_POST['nonce_field_name'] ) || ! wp_verify_nonce( $_POST['nonce_field_name'], 'action_name' ) ) {
    print 'nonceを認証できませんでした。';
    exit;
}

となる。

管理画面側ではcheck_admin_refererで認証する。

<?php
if ( !empty( $_POST ) && check_admin_referer( 'action_name', 'nonce_field_name' ) ) {
    // 認証成功
}

なお、check_admin_refererがfalseとなった場合は自動で処理が終了し、failedページが表示される。

参考サイト

Nonces – Common APIs Handbook | Developer.WordPress.org
A nonce is a “number used once” to help protect URLs and forms from certain types of misuse, malicious or otherwise.…
https://wpdocs.osdn.jp/WordPress_Nonce
タイトルとURLをコピーしました