ホームページ  >  記事  >  CMS チュートリアル  >  WordPressのNonceについて詳しく解説

WordPressのNonceについて詳しく解説

藏色散人
藏色散人転載
2021-03-12 11:40:484793ブラウズ

WordPress の次のチュートリアル コラムでは、WordPress の Nonce について紹介します。困っている友人の役に立てば幸いです。

WordPressのノンス

ノンスとは、一度だけ使われる数字の略で、WordPressのノンスは数字ではなく、数字を組み合わせたハッシュの文字列です。値は 1 回だけ使用できるだけでなく、有効期間もあり、有効期間中、同じパラメータは有効期間が終了するまで各ユーザーに対して同じ nonce 値を生成します。この記事では、Nonceを使ってCSRF攻撃を防ぐ方法を紹介します。

Nonce を作成する

Nonce は、URL リクエストまたはフォームの Hidden 要素に配置でき、Ajax リクエスト中に Javascript を通じて使用できます。 。 Nonce のライフサイクルは現在のセッション内のみであり、ログアウトして再度ログインすると、以前の Nonce も無効になります。

URL に nonce を追加

wp_nonce_url() メソッドを通じて URL に nonce を追加できます:

wp_nonce_url( $actionurl, $action, $name );
// 例如:
$complete_url = wp_nonce_url( $bare_url, 'trash-post_'.$post->ID );
$bare_url (必須 Select) はnonce が追加される URL、$action は nonce に定義されたアクション名 (オプション)、デフォルトは -1 です。

デフォルトでは、リンク内に生成される nonce の名前は _wpnonce です。競合の可能性を避けるために、WordPress 3.6 バージョン以降では、wp_nonce_url にオプションの $name パラメーターが追加され、ユーザーが自分で指定できるようになりました。リンク内のナンスの名前。例:

$complete_url = wp_nonce_url( $bare_url, 'trash-post_'.$post->ID, 'my_nonce' );

フォームに nonce を追加

wp_nonce_field() メソッドを使用してフォームに非表示要素を追加できます:

PHP

wp_nonce_field( $action, $name, $referer, $echo )
//例如 :
wp_nonce_field( 'delete-comment_'.$comment_id );
wp_nonce_field( $action, $name, $referer, $echo )
//例如 :
wp_nonce_field( 'delete-comment_'.$comment_id );
Call上記のメソッドは、次のようなコードを生成します。

<input type="hidden" id="_wpnonce" name="_wpnonce" value="796c7766b1" />
<input type="hidden" name="_wp_http_referer" value="/wp-admin/edit-comments.php" />

Generate a semicolon nonce

独立した nonce を生成したいだけの場合は、 wp_create_nonce() を渡すことができます。メソッド:

wp_create_nonce( $action );
// 例如:
$nonce = wp_create_nonce( 'my-action_'.$post->ID );
同様に、$action はオプションのパラメータで、デフォルトは -1 です。上記のメソッドは、「295a686963」のような結果を返します。

ノンスの有効性を確認する

フォーム内のノンスを確認する

管理者管理インターフェイスでは、次のことができます。 check_admin_referer メソッドを使用して、URL の nonce の有効性を検証します:

check_admin_referer( $action, $query_arg );
次は、check_admin_referer を使用してプラグインの nonce を検証する方法を示す例です:

<form method="post">
   <!-- some inputs here -->
   <?php wp_nonce_field( &#39;name_of_my_action&#39;, &#39;name_of_nonce_field&#39; ); ?>
</form>
Verificationメソッド:

check_admin_referer( 'name_of_my_action', 'name_of_nonce_field' );

Ajax での nonce の検証

Ajax リクエストの nonce の有効性を確認したい場合は、check_ajax_referer() メソッドを使用できます。 ##
check_ajax_referer( $action, $query_arg, $die )

$die は、$nonce が無効な場合にスクリプトの実行を終了するかどうかを指定します。 (デフォルトは True)

check_ajax_referer を使用する簡単な例:

<?php
//Set Your Nonce
$ajax_nonce = wp_create_nonce( "my-special-string" );
?>
 
<script type="text/javascript">
jQuery(document).ready(function($){
    var data = {
        action: 'my_action',
        security: '<?php echo $ajax_nonce; ?>',
        my_string: 'Hello World!'
    };
    $.post(ajaxurl, data, function(response) {
        alert("Response: " + response);
    });
});
</script>

次のコードを使用して逆方向に検証します:

add_action( 'wp_ajax_my_action', 'my_action_function' );
function my_action_function() {
    check_ajax_referer( 'my-special-string', 'security' );
    echo sanitize_text_field( $_POST['my_string'] );
    wp_die();
}

独自に生成された nonce を検証します

えええええ

以上がWordPressのNonceについて詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。