溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

WordPress中的Nonce有什么用

發(fā)布時(shí)間:2021-03-12 13:41:36 來源:億速云 閱讀:363 作者:小新 欄目:建站服務(wù)器

這篇文章主要介紹WordPress中的Nonce有什么用,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

WordPress中的Nonce

Nonce是number used once的縮寫,Wordpress的nonce不是數(shù)字,而一是串由數(shù)字和字符組成的Hash值,不僅只能使用一次,還同時(shí)具有生命周期(lifetime),在生命周期內(nèi),針對每個(gè)用戶,同樣的參數(shù)會(huì)生成同樣的nonce值,直到生命周期結(jié)束。這篇文章我們就來介紹一下如何用Nonce來防止CSRF攻擊。

創(chuàng)建一個(gè)Nonce

Nonce可以被放在Url請求中,也可以放在一個(gè)Form的Hidden元素中,然后在Ajax請求時(shí),通過Javascript來獲取他它。一個(gè)Nonce生命周期只在當(dāng)前Session中,如果你退出登錄后再次登錄,之前的nonce也都會(huì)失效。

向URL中添加nonce

你可以通過wp_nonce_url()方法來向Url中添加一個(gè)Nonce:

wp_nonce_url( $actionurl, $action, $name );
// 例如:
$complete_url = wp_nonce_url( $bare_url, 'trash-post_'.$post->ID );

其中$bare_url(必選)為要添加nonce的url,而$action為為nonce定義的動(dòng)作名字,可選,默認(rèn)為-1。

默認(rèn)情況下,生成的nonce在鏈接中的名字為_wpnonce,為了避免可能的沖突,在Wordpress3.6版本后,wp_nonce_url增加了可選的$name參數(shù),可以讓用戶自己指定nonce在鏈接中的名字。如:

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

向Form中添加nonce

你可以能過wp_nonce_field()方法向表單中添加一個(gè)hidden元素:

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 );

調(diào)用上面的方法,會(huì)生成類似下面的代碼:

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

單獨(dú)生成一個(gè)nonce

如果你只是想要生成一個(gè)獨(dú)立的nonce,可以過wp_create_nonce()方法:

wp_create_nonce( $action );
// 例如:
$nonce = wp_create_nonce( 'my-action_'.$post->ID );

同樣的,$action為可選參數(shù),默認(rèn)為-1。上面的方法會(huì)返回類似“295a686963”的結(jié)果。

驗(yàn)證nonce有效性

驗(yàn)證表單中的nonce

在Admin管理界面,你可以通過check_admin_referer方法來驗(yàn)證Url中Nonce的有效性:

check_admin_referer( $action, $query_arg );

下面是一個(gè)例子演示如何在插件中使用check_admin_referer驗(yàn)證nonce:

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

驗(yàn)證方法:

check_admin_referer( 'name_of_my_action', 'name_of_nonce_field' );

驗(yàn)證Ajax中的nonce

如果要檢查Ajax請求中的nonce有效性,可以使用check_ajax_referer()方法:

check_ajax_referer( $action, $query_arg, $die )

$die指定如果$nonce無效,是否結(jié)束腳本執(zhí)行。(默認(rèn)為True)

一個(gè)簡單使用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>

在向后通過下面的代碼進(jìn)行驗(yàn)證:

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();
}

驗(yàn)證獨(dú)立生成的nonce

wp_verify_nonce( $nonce, $action );

以上是“WordPress中的Nonce有什么用”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI