首頁 >CMS教程 >&#&按 >什麼是WordPress Nonces?

什麼是WordPress Nonces?

Jennifer Aniston
Jennifer Aniston原創
2025-02-16 12:58:09644瀏覽

WordPress安全:使用Nonce保護主題和插件代碼

保護WordPress主題或插件代碼的安全至關重要,可以有效防止惡意用戶的攻擊。我們之前已經介紹過如何在WordPress中清理、轉義和驗證表單數據,以及如何使用VIP掃描器提高WordPress主題質量。今天,我們將探討Nonce(一次性使用數字)如何幫助保護WordPress主題和插件的安全。

關鍵要點

  • WordPress Nonce,或“一次性使用數字”,是獨特的安全令牌,用於增強WordPress網站的安全性,方法是驗證用戶請求並防止惡意企圖。它們在防止跨站點請求偽造(CSRF)攻擊方面特別有用。
  • Nonce的工作原理是為每個用戶會話、表單提交或AJAX請求生成一個唯一令牌。然後在處理請求時驗證此令牌,如果不匹配,則拒絕請求。這使得攻擊者難以預測或濫用令牌。
  • 在WordPress中創建Nonce是通過使用WordPress函數wp_create_nonce()實現的,該函數接受一個表示要保護的操作的單個字符串參數。驗證Nonce是使用wp_verify_nonce()函數完成的,該函數接受兩個參數:要驗證的Nonce和關聯的操作。
  • Nonce可用於WordPress中的AJAX請求,從而增加了防止CSRF攻擊的額外安全層。 Nonce也是特定於用戶的,通過確保為一個用戶創建的Nonce對另一個用戶無效,提供了額外的安全層。

什麼是WordPress Nonce?

WordPress Nonce定義為:

……一個“一次性使用數字”,用於幫助保護URL和表單免受某些類型的濫用(惡意或其他)。 https://www.php.cn/link/c5af1dfde10402285102771ad64b3dac

雖然在WordPress中,Nonce從技術上講不是數字(它是由字母和數字組成的哈希值),但它確實有助於防止惡意用戶運行操作。

WordPress Nonce的工作分為兩部分:

  • 創建Nonce(哈希值),通過表單或操作提交它,以及
  • 驗證Nonce,然後接受表單數據或運行操作。

例如,當您在WordPress管理屏幕中刪除帖子時,您會注意到URL包含一個_wpnonce參數:

https://www.php.cn/link/18175d262a01ebf04bc03e38e48e3ffc

刪除帖子的例程將檢查帖子542是否具有a03ac85772的Nonce值,然後再刪除帖子。如果Nonce不存在或與預期值不匹配,則不會刪除帖子。

這可以防止惡意用戶潛在地刪除大量帖子。例如,以下內容將不起作用,因為Nonce屬於帖子ID 542:

https://www.php.cn/link/322d830da1130169fb4ca1c7543799d0 https://www.php.cn/link/dd4143061640d55fb312dd0ce8afa76e https://www.php.cn/link/9e0f9113b44003201076a9fade1b72d8

What Are WordPress Nonces?

現在讓我們看看如何在插件中實現WordPress Nonce。

設置我們的WordPress插件

讓我們從一個具有自身設置屏幕的基本插件開始。設置屏幕有一個字段,可以提交並保存在WordPress選項表中。

wp-content/plugins/implementing-wordpress-nonces/implementing-wordpress-nonces.php中的新文件中輸入以下代碼:

<code class="language-php">// ... (插件代码,与原文相同) ...</code>

通過WordPress管理>插件屏幕激活插件,您將看到一個新的Nonces菜單項:

What Are WordPress Nonces?

單擊此項,您將進入設置屏幕,其中只有一個字段:

What Are WordPress Nonces?

輸入任何值,單擊“保存”,如果一切正常,您將看到確認信息以及您剛剛輸入的值:

What Are WordPress Nonces?

演示安全漏洞

將以下URL輸入到您的Web瀏覽器地址欄中(將域名替換為您安裝WordPress的位置):

https://www.php.cn/link/0e143c3bef0f7759c230664c4dc905f8

注意發生了什麼?該值被簡單地保存為abc,只需直接訪問URL並登錄到WordPress即可:

What Are WordPress Nonces?

雖然我們可以在代碼中使用$_POST代替$_REQUEST(我們使用$_REQUEST是為了更容易演示安全問題),但這無濟於事——惡意用戶仍然可以通過自己或誘導您單擊鏈接來讓您向此屏幕發送POST請求,從而導致選項值更改。

這被稱為跨站點請求偽造(或CSRF)。惡意網站、電子郵件、應用程序等會導致用戶的Web瀏覽器執行不需要的操作。

我們現在將創建和驗證WordPress Nonce,以防止這種攻擊成為可能。

使用Nonce保護我們的插件

如前所述,此過程分為兩個步驟:首先,我們需要創建一個將與我們的表單一起提交的Nonce。其次,我們需要在提交表單時驗證該Nonce。

要在我們的表單中創建Nonce字段,我們可以使用wp_nonce_field()

獲取或顯示Nonce隱藏表單字段……用於驗證表單請求的內容是否來自當前站點,而不是其他地方……

在我們的輸入按鈕上方添加以下代碼:

<code class="language-php">// ... (插件代码,与原文相同) ...</code>

wp_nonce_field接受四個參數——前兩個最重要:

  • $action:這決定了我們正在運行的特定操作,並且應該唯一。最好用插件名稱作為操作的前綴,因為可能會有多個操作運行。在本例中,我們正在保存某些內容,因此我們使用了implementing_wordpress_nonces_save
  • $name:這決定了此函數創建的隱藏字段的名稱。如上所述,我們已使用插件名稱作為其前綴,因此將其命名為implementing_wordpress_nonces_nonce

如果我們重新加載設置屏幕,更改我們的值並單擊“保存”,您會注意到該值仍然會更改。我們現在需要實現對提交的Nonce字段的檢查,使用wp_verify_nonce( $name, $action )

驗證Nonce是否正確且相對於指定操作未過期。該函數用於驗證當前請求中發送的Nonce,通常通過$_REQUEST PHP變量訪問。

將我們插件的admin_screen()函數的“保存設置”部分替換為以下代碼:

<code class="language-php">wp_nonce_field( 'implementing_wordpress_nonces_save', 'implementing_wordpress_nonces_nonce' );</code>

此代碼執行以下幾個操作:

  • 首先,它檢查我們是否提交了某些內容。
  • 然後,它檢查我們的Nonce字段是否存在,如果存在,則嘗試根據我們期望的操作驗證Nonce的值。
  • 如果檢查通過,則更新選項。
  • 如果檢查失敗,我們將拋出一個403錯誤,消息為“無效的Nonce指定”。

為了確保我們的Nonce正在創建和驗證,讓我們再次嘗試訪問我們的“惡意”直接URL:

https://www.php.cn/link/0e143c3bef0f7759c230664c4dc905f8.

如果我們的Nonce已實現並正在驗證,您將看到“無效的Nonce指定”通知:

What Are WordPress Nonces?

...(剩餘部分與原文相同,只是對語言和表達方式進行細微調整,保持原意不變)...

以上是什麼是WordPress Nonces?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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