WorkPressのノンシーの取り扱い


WordPressを作成し、特定のアクションのためのユニークなハッシュを確認するには、NCEシステムを使用して簡単に提供しています.WordPressはNoneを使用してセキュリティトークンを参照しますが、それらは真のnoncesではありません.以下にWordPressの使用方法を定義します.
WordPressのセキュリティトークンは「Nonces」と呼ばれています(これはNoncesからの上記の違いにも関わらず)ノンセスと同じ目的があります.彼らはCSRFを含む攻撃のいくつかのタイプから保護するのを助けるが、彼らが一回の使用のためにチェックされないので、リプレイ攻撃から保護しません.認証、認証、またはアクセス制御のために、noncesを決して頼らないでください.CurrentRule UserRank Can ()を使用して関数を保護し、常にNIESを侵害することができます.
nonceを使うことが適切でないという多くの時間がありますが、noncesの良い使用例のいくつかの例は以下の通りです.
  • データベースを変更するリンクをクリックする
  • データベースを変更するフォームを送信する
  • WordPressのREST APIを使用して投稿、実行、削除を行う
  • 注意:一回限りの使用コードは24時間有効です.これは、WordPressのバージョンをtrueに考慮していない理由です.

    ノンセの作り方


    Nonceを配置する場所によっては、WordPressにNOCESを作る方法がいくつかあります.

    非CEコード自体を生成する


    最も基本的なオプションはwp_create_nonce どれがあなたに値を与えるでしょう.このAPIをヘッダとしてREST APIエンドポイントに渡すのに便利です.
    $nonce = wp_create_nonce($action); // can be a string or integer
    
    // example:
    $nonce = wp_create_nonce('trash-post-23'); 
    // outputs: 5817bdf2ac
    

    NICEパラメータでURLを生成する


    次に、ベースURL、nonceアクション名、およびパラメータの名前をとります.これはURLパラメータとして追加された
    $url_with_nonce = wp_nonce_url($url, $action, $name);
    
    // example: 
    $url_with_nonce = wp_nonce_url('<https://localhost>', 'trash-post-23', '_wpnonce'); 
    // outputs: <https://localhost?_wpnonce=5817bdf2ac>
    

    nonce nameとvalueを持つhidden inputを生成する


    最後に、unce値を持つ非表示フィールドを出力する簡単な方法です.また、ユーザーは、以前のページから来て確認し、有効なnonceを確認できるように、参照URLを追加します.
    wp_nonce_field($action, $name, $referer, $echo);
    
    // example:
    wp_nonce_field('trash-post-23');
    
    // outputs: 
    // <input type="hidden" id="_wpnonce" name="_wpnonce" value="5817bdf2ac">
    // <input type="hidden" name="_wp_http_referer" value="/wp-admin/plugins.php?plugin_status=all&amp;paged=1&amp;s">
    

    非CEを確かめる方法


    WordPressのダッシュボードの中で作業するときは、呼び出しによってcheck_admin_referer . デフォルトでは、アクション名を渡す必要があります.デフォルトのパラメータ名を_wpnonce ), これを2番目のパラメータとして渡すことができます
    check_admin_referer($action, $name);
    
    // example: 
    check_admin_referer('trash-post-23');
    
    Asyncリクエストで作業する場合、いくつかのオプションがあります.

    チェックサムAjaxLessレファレンス


    The check_ajax_referer 関数は検証を処理し、リクエストを処理するのを止める
    check_ajax_referer($action);
    
    // example:
    check_ajax_referer('trash-post-23');
    

    ウッヘン


    The wp_verify_nonce 関数は検証を処理しますが、エラーを返すのはあなた次第です.403を返すことを推奨します.
    wp_verify_nonce($nonce, $action);
    
    // example:
    wp_verify_nonce('5817bdf2ac', 'trash-post-23'); // the nonce itself would be passed to the request and verified from the body or parameter list
    

    REST APIリクエストを使用したnoncesの使用


    あなたがWordPress(例えばフェッチで)であなた自身のAPI要求をつくっているならば、ポスト、プット、または削除を使用している要求を提出したいならば、あなたはNonce値を通過しなければなりません.幸いなことに、JavaScriptファイルを正しくキューイングしている場合はかなり簡単です.
    使用する場合wp_enqueue_script 他の関数を渡すことができますwp_localize_script 任意のデータを使用して、そのファイルからアクセスできます.
    wp_enqueue_script(
        'ndx-script',
        $path,
      [],
      '1.0.0',
      true
    );
    
    wp_localize_script(
        'ndx-script', 
        'wp_api', 
        [
            'nonce' => wp_create_nonce('wp_rest')
        ]
    );
    
    
    基本的には、enqueueスクリプトの名前を参照し、JavaScriptで使用する独自の変数名を設定し、オプションの配列を渡します.これで、JavaScriptのグローバルオブジェクトを提供します.ここでは、どのようにNINCEをフェッチ文で使用するでしょう
    fetch(PATH, {
        headers: {
            'X-WP-Nonce': wp_api.nonce
      },
      method: 'POST',
        body: JSON.stringify({ name: value })
    })
    .then(response => response.json())
    .then(response => {
        // do something here
    })
    
    この重要な部分は、FETCHステートメントの2番目のパラメータのヘッダオプションです.カスタムヘッダは常にX それからWP-Nonce は、WordPress自身で定義され、何を探すでしょう.
    このパターンについて素晴らしいことは、あなたの残りのエンドポイントでNINCEを確認する必要がないことです.システムはあなたのためにそれを世話して、あなたがnonceなしで何かを提出しようとするならば、403 :禁じられた誤りを返します
    注意:公的に消費可能なAPIエンドポイントは、URLフィールドにあるブラウザの右側のリストを取得できる理由です.

    包み上げ


    もう一度、適切な認証の代わりにNOCEsを使用しないでください.それらは単に認証されたユーザーが意図しない行動を実行するのを防ぐための余分のチェックです.
    REST APIでは特に、ここでのnonceの例はユーザがログインしている間に送られたリクエストだけであり、エンドポイントは、現在のユーザが意図したアクションを実行できるかどうかをチェックするためにパーミッションコールバックを使うべきです.
    私はまた、あなたのために重い持ち上げのいくつかの世話をするnonce関数を使用することをお勧めします.
    著者
    ・・・アクションボタン
    背景色:こっち重要
    カラー:竜華ffffff!重要
    ボーダーカラー:こっち重要


    デビッドウルフ


    Designer and developer. Follow me on twitter: https://twitter.com/wwuulf