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

藏色散人
リリース: 2021-03-12 11:40:48
転載
4762 人が閲覧しました

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 までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!