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 );
ログイン後にコピー
$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 );
ログイン後にコピー
<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 );
ログイン後にコピー
ノンスの有効性を確認する
フォーム内のノンスを確認する
管理者管理インターフェイスでは、次のことができます。 check_admin_referer メソッドを使用して、URL の nonce の有効性を検証します:check_admin_referer( $action, $query_arg );
ログイン後にコピー
<form method="post"> <!-- some inputs here --> <?php wp_nonce_field( 'name_of_my_action', 'name_of_nonce_field' ); ?> </form>
ログイン後にコピー
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(); }
ログイン後にコピー
えええええ