首頁 CMS教程 &#&按 關於WordPress中的Nonce詳解

關於WordPress中的Nonce詳解

Mar 12, 2021 am 11:40 AM
wordpress

以下由WordPress教學專欄為大家介紹關於WordPress中的Nonce,希望對需要的朋友有幫助!

WordPress中的Nonce

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

建立一個Nonce

Nonce可以放在Url請求中,也可以放在一個Form的Hidden元素中,然後當Ajax請求時,透過Javascript來獲取他它。一個Nonce生命週期只在目前Session中,如果你登出登入後再登入,之前的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(必選)為要加入nonce的url,而$action為nonce定義的動作名字,可選,預設為-1。

預設情況下,產生的nonce在連結中的名字為_wpnonce,為了避免可能的衝突,在Wordpress3.6版本後,wp_nonce_url增加了可選的$name參數,可以讓使用者自己指定nonce在連結中的名字。如:

$complete_url = wp_nonce_url( $bare_url, 'trash-post_'.$post->ID, 'my_nonce' );
登入後複製

向Form新增nonce

你可以能過wp_nonce_field()方法新增一個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 );
登入後複製

調用上面的方法,會產生類似下面的程式碼:

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

單獨產生一個nonce

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

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

同樣的,$action為可選參數,預設為-1。上面的方法會回傳類似「295a686963」的結果。

驗證nonce有效性

驗證表單中的nonce

在Admin管理介面,你可以透過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>
登入後複製

驗證方法:

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

1
wp_verify_nonce( $nonce, $action );
登入後複製

以上是關於WordPress中的Nonce詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

wordpress文章列表怎麼調 wordpress文章列表怎麼調 Apr 20, 2025 am 10:48 AM

有四種方法可以調整 WordPress 文章列表:使用主題選項、使用插件(如 Post Types Order、WP Post List、Boxy Stuff)、使用代碼(在 functions.php 文件中添加設置)或直接修改 WordPress 數據庫。

wordpress屏蔽ip的插件有哪些 wordpress屏蔽ip的插件有哪些 Apr 20, 2025 am 08:27 AM

WordPress 屏蔽 IP 的插件選擇至關重要。可考慮以下類型:基於 .htaccess:高效,但操作複雜;數據庫操作:靈活,但效率較低;基於防火牆:安全性能高,但配置複雜;自行編寫:最高控制權,但需要更多技術水平。

wordpress怎麼寫頁頭 wordpress怎麼寫頁頭 Apr 20, 2025 pm 12:09 PM

在WordPress中創建自定義頁頭的步驟如下:編輯主題文件“header.php”。添加您的網站名稱和描述。創建導航菜單。添加搜索欄。保存更改並查看您的自定義頁頭。

wordpress編輯日期怎麼取消 wordpress編輯日期怎麼取消 Apr 20, 2025 am 10:54 AM

WordPress 編輯日期可以通過三種方法取消:1. 安裝 Enable Post Date Disable 插件;2. 在 functions.php 文件中添加代碼;3. 手動編輯 wp_posts 表中的 post_modified 列。

wordpress主題頭部圖片如何更換 wordpress主題頭部圖片如何更換 Apr 20, 2025 am 10:00 AM

更換 WordPress 主題頭部圖片的分步指南:登錄 WordPress 儀錶盤,導航至“外觀”&gt;“主題”。選擇要編輯的主題,然後單擊“自定義”。打開“主題選項”面板並尋找“網站標頭”或“頭部圖片”選項。單擊“選擇圖像”按鈕並上傳新的頭部圖片。裁剪圖像並單擊“保存並裁剪”。單擊“保存並發布”按鈕以更新更改。

wordpress主機怎麼建站 wordpress主機怎麼建站 Apr 20, 2025 am 11:12 AM

要使用 WordPress 主機建站,需要:選擇一個可靠的主機提供商。購買一個域名。設置 WordPress 主機帳戶。選擇一個主題。添加頁面和文章。安裝插件。自定義您的網站。發布您的網站。

wordpress模板怎麼導入 wordpress模板怎麼導入 Apr 20, 2025 am 10:18 AM

WordPress模板可快速創建專業網站。導入模板的步驟包括:選擇並下載模板。登錄WordPress儀錶盤。在“外觀”菜單中選擇“主題”。點擊“添加新主題”。點擊“上傳主題”,選擇下載的模板.zip文件。點擊“立即安裝”。點擊“激活”按鈕。通過“自定義”菜單自定義模板。

wordpress網站賬號登錄 wordpress網站賬號登錄 Apr 20, 2025 am 09:06 AM

登錄 WordPress 網站賬號的步驟:訪問登錄頁面:輸入網站網址加上 "/wp-login.php"。輸入用戶名和密碼。點擊“登錄”。驗證兩步驗證(可選)。成功登錄後,您將看到網站儀錶盤。

See all articles