WordPress安全:使用Nonce保護(hù)主題和插件代碼
保護(hù)WordPress主題或插件代碼的安全至關(guān)重要,可以有效防止惡意用戶的攻擊。我們之前已經(jīng)介紹過如何在WordPress中清理、轉(zhuǎn)義和驗(yàn)證表單數(shù)據(jù),以及如何使用VIP掃描器提高WordPress主題質(zhì)量。今天,我們將探討Nonce(一次性使用數(shù)字)如何幫助保護(hù)WordPress主題和插件的安全。
關(guān)鍵要點(diǎn)
- WordPress Nonce,或“一次性使用數(shù)字”,是獨(dú)特的安全令牌,用于增強(qiáng)WordPress網(wǎng)站的安全性,方法是驗(yàn)證用戶請求并防止惡意企圖。它們在防止跨站點(diǎn)請求偽造(CSRF)攻擊方面特別有用。
- Nonce的工作原理是為每個(gè)用戶會(huì)話、表單提交或AJAX請求生成一個(gè)唯一令牌。然后在處理請求時(shí)驗(yàn)證此令牌,如果不匹配,則拒絕請求。這使得攻擊者難以預(yù)測或?yàn)E用令牌。
- 在WordPress中創(chuàng)建Nonce是通過使用WordPress函數(shù)
wp_create_nonce()
實(shí)現(xiàn)的,該函數(shù)接受一個(gè)表示要保護(hù)的操作的單個(gè)字符串參數(shù)。驗(yàn)證Nonce是使用wp_verify_nonce()
函數(shù)完成的,該函數(shù)接受兩個(gè)參數(shù):要驗(yàn)證的Nonce和關(guān)聯(lián)的操作。 - Nonce可用于WordPress中的AJAX請求,從而增加了防止CSRF攻擊的額外安全層。Nonce也是特定于用戶的,通過確保為一個(gè)用戶創(chuàng)建的Nonce對另一個(gè)用戶無效,提供了額外的安全層。
什么是WordPress Nonce?
WordPress Nonce定義為:
……一個(gè)“一次性使用數(shù)字”,用于幫助保護(hù)URL和表單免受某些類型的濫用(惡意或其他)。 http://m.miracleart.cn/link/c5af1dfde10402285102771ad64b3dac
雖然在WordPress中,Nonce從技術(shù)上講不是數(shù)字(它是由字母和數(shù)字組成的哈希值),但它確實(shí)有助于防止惡意用戶運(yùn)行操作。
WordPress Nonce的工作分為兩部分:
- 創(chuàng)建Nonce(哈希值),通過表單或操作提交它,以及
- 驗(yàn)證Nonce,然后接受表單數(shù)據(jù)或運(yùn)行操作。
例如,當(dāng)您在WordPress管理屏幕中刪除帖子時(shí),您會(huì)注意到URL包含一個(gè)_wpnonce
參數(shù):
http://m.miracleart.cn/link/18175d262a01ebf04bc03e38e48e3ffc
刪除帖子的例程將檢查帖子542是否具有a03ac85772
的Nonce值,然后再刪除帖子。如果Nonce不存在或與預(yù)期值不匹配,則不會(huì)刪除帖子。
這可以防止惡意用戶潛在地刪除大量帖子。例如,以下內(nèi)容將不起作用,因?yàn)镹once屬于帖子ID 542:
http://m.miracleart.cn/link/322d830da1130169fb4ca1c7543799d0 http://m.miracleart.cn/link/dd4143061640d55fb312dd0ce8afa76e http://m.miracleart.cn/link/9e0f9113b44003201076a9fade1b72d8
現(xiàn)在讓我們看看如何在插件中實(shí)現(xiàn)WordPress Nonce。
設(shè)置我們的WordPress插件
讓我們從一個(gè)具有自身設(shè)置屏幕的基本插件開始。設(shè)置屏幕有一個(gè)字段,可以提交并保存在WordPress選項(xiàng)表中。
在wp-content/plugins/implementing-wordpress-nonces/implementing-wordpress-nonces.php
中的新文件中輸入以下代碼:
// ... (插件代碼,與原文相同) ...
通過WordPress管理>插件屏幕激活插件,您將看到一個(gè)新的Nonces菜單項(xiàng):
單擊此項(xiàng),您將進(jìn)入設(shè)置屏幕,其中只有一個(gè)字段:
輸入任何值,單擊“保存”,如果一切正常,您將看到確認(rèn)信息以及您剛剛輸入的值:
演示安全漏洞
將以下URL輸入到您的Web瀏覽器地址欄中(將域名替換為您安裝WordPress的位置):
http://m.miracleart.cn/link/0e143c3bef0f7759c230664c4dc905f8
注意發(fā)生了什么?該值被簡單地保存為abc,只需直接訪問URL并登錄到WordPress即可:
雖然我們可以在代碼中使用$_POST
代替$_REQUEST
(我們使用$_REQUEST
是為了更容易演示安全問題),但這無濟(jì)于事——惡意用戶仍然可以通過自己或誘導(dǎo)您單擊鏈接來讓您向此屏幕發(fā)送POST請求,從而導(dǎo)致選項(xiàng)值更改。
這被稱為跨站點(diǎn)請求偽造(或CSRF)。惡意網(wǎng)站、電子郵件、應(yīng)用程序等會(huì)導(dǎo)致用戶的Web瀏覽器執(zhí)行不需要的操作。
我們現(xiàn)在將創(chuàng)建和驗(yàn)證WordPress Nonce,以防止這種攻擊成為可能。
使用Nonce保護(hù)我們的插件
如前所述,此過程分為兩個(gè)步驟:首先,我們需要?jiǎng)?chuàng)建一個(gè)將與我們的表單一起提交的Nonce。其次,我們需要在提交表單時(shí)驗(yàn)證該Nonce。
要在我們的表單中創(chuàng)建Nonce字段,我們可以使用wp_nonce_field()
:
獲取或顯示Nonce隱藏表單字段……用于驗(yàn)證表單請求的內(nèi)容是否來自當(dāng)前站點(diǎn),而不是其他地方……
在我們的輸入按鈕上方添加以下代碼:
// ... (插件代碼,與原文相同) ...
wp_nonce_field
接受四個(gè)參數(shù)——前兩個(gè)最重要:
$action
:這決定了我們正在運(yùn)行的特定操作,并且應(yīng)該唯一。最好用插件名稱作為操作的前綴,因?yàn)榭赡軙?huì)有多個(gè)操作運(yùn)行。在本例中,我們正在保存某些內(nèi)容,因此我們使用了implementing_wordpress_nonces_save
$name
:這決定了此函數(shù)創(chuàng)建的隱藏字段的名稱。如上所述,我們已使用插件名稱作為其前綴,因此將其命名為implementing_wordpress_nonces_nonce
如果我們重新加載設(shè)置屏幕,更改我們的值并單擊“保存”,您會(huì)注意到該值仍然會(huì)更改。我們現(xiàn)在需要實(shí)現(xiàn)對提交的Nonce字段的檢查,使用wp_verify_nonce( $name, $action )
:
驗(yàn)證Nonce是否正確且相對于指定操作未過期。該函數(shù)用于驗(yàn)證當(dāng)前請求中發(fā)送的Nonce,通常通過
$_REQUEST
PHP變量訪問。
將我們插件的admin_screen()
函數(shù)的“保存設(shè)置”部分替換為以下代碼:
wp_nonce_field( 'implementing_wordpress_nonces_save', 'implementing_wordpress_nonces_nonce' );
此代碼執(zhí)行以下幾個(gè)操作:
- 首先,它檢查我們是否提交了某些內(nèi)容。
- 然后,它檢查我們的Nonce字段是否存在,如果存在,則嘗試根據(jù)我們期望的操作驗(yàn)證Nonce的值。
- 如果檢查通過,則更新選項(xiàng)。
- 如果檢查失敗,我們將拋出一個(gè)403錯(cuò)誤,消息為“無效的Nonce指定”。
為了確保我們的Nonce正在創(chuàng)建和驗(yàn)證,讓我們再次嘗試訪問我們的“惡意”直接URL:
http://m.miracleart.cn/link/0e143c3bef0f7759c230664c4dc905f8.
如果我們的Nonce已實(shí)現(xiàn)并正在驗(yàn)證,您將看到“無效的Nonce指定”通知:
...(剩余部分與原文相同,只是對語言和表達(dá)方式進(jìn)行細(xì)微調(diào)整,保持原意不變)...
以上是什么是WordPress Nonces?的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

熱AI工具

Undress AI Tool
免費(fèi)脫衣服圖片

Undresser.AI Undress
人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover
用于從照片中去除衣服的在線人工智能工具。

Clothoff.io
AI脫衣機(jī)

Video Face Swap
使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的代碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級(jí)代碼編輯軟件(SublimeText3)

使用Git管理WordPress項(xiàng)目時(shí),應(yīng)只將主題、自定義插件和配置文件納入版本控制;設(shè)置.gitignore文件以忽略上傳目錄、緩存和敏感配置;利用webhook或CI工具實(shí)現(xiàn)自動(dòng)部署并注意數(shù)據(jù)庫處理;采用兩分支策略(main/develop)進(jìn)行協(xié)作開發(fā)。這樣做可避免沖突、保障安全,并提升協(xié)作與部署效率。

使用WordPress測試環(huán)境是為了確保新功能、插件或主題在正式上線前的安全性和兼容性,避免影響真實(shí)網(wǎng)站。搭建測試環(huán)境的步驟包括:下載安裝本地服務(wù)器軟件(如LocalWP、XAMPP),創(chuàng)建站點(diǎn)、設(shè)置數(shù)據(jù)庫和管理員賬號(hào),安裝主題和插件進(jìn)行測試;復(fù)制正式網(wǎng)站到測試環(huán)境的方法是通過插件導(dǎo)出站點(diǎn)、導(dǎo)入測試環(huán)境并替換域名;使用時(shí)應(yīng)注意不使用真實(shí)用戶數(shù)據(jù)、定期清理無用數(shù)據(jù)、備份測試狀態(tài)、適時(shí)重置環(huán)境,并統(tǒng)一團(tuán)隊(duì)配置以減少差異問題。

創(chuàng)建Gutenberg塊的關(guān)鍵在于理解其基本結(jié)構(gòu)并正確連接前后端資源。1.準(zhǔn)備開發(fā)環(huán)境:安裝本地WordPress、Node.js和@wordpress/scripts;2.使用PHP注冊塊并用JavaScript定義塊的編輯和顯示邏輯;3.通過npm構(gòu)建JS文件以使更改生效;4.遇到問題時(shí)檢查路徑、圖標(biāo)是否正確或使用實(shí)時(shí)監(jiān)聽構(gòu)建避免重復(fù)手動(dòng)編譯。按照這些步驟,可以逐步實(shí)現(xiàn)一個(gè)簡單的Gutenberg塊。

在WordPress中,當(dāng)新增自定義文章類型或修改固定鏈接結(jié)構(gòu)后,需手動(dòng)刷新重寫規(guī)則,此時(shí)可通過代碼調(diào)用flush_rewrite_rules()函數(shù)實(shí)現(xiàn)。1.可在主題或插件激活鉤子中添加該函數(shù)以自動(dòng)刷新;2.僅在必要時(shí)執(zhí)行一次,如添加CPT、分類法或修改鏈接結(jié)構(gòu)后;3.避免頻繁調(diào)用以免影響性能;4.多站點(diǎn)環(huán)境下需視情況為每個(gè)站點(diǎn)單獨(dú)刷新;5.某些托管環(huán)境可能限制規(guī)則保存。此外,訪問“設(shè)置>固定鏈接”頁面點(diǎn)擊保存也可觸發(fā)刷新,適合非自動(dòng)化場景。

tosetupredirectsinwordpressingthe.htaccessfile,locateThEfileInyourSite'sRootDirectorectoryAndDrectRectrulesabovethe#beginWordPresssection.forbasic301redirects,USETHEETHEETERECTREFTATRECTATREDERTREFTATREDERTREFTATRECTRECTATRECTRECTATREDECT301/OLD-PAGEHTTPS:

要實(shí)現(xiàn)響應(yīng)式WordPress主題設(shè)計(jì),首先要使用HTML5和移動(dòng)優(yōu)先的Meta標(biāo)簽,在header.php中添加viewport設(shè)置以確保移動(dòng)端正確顯示,并用HTML5結(jié)構(gòu)標(biāo)簽組織布局;其次,利用CSS媒體查詢實(shí)現(xiàn)不同屏幕寬度下的樣式適配,按移動(dòng)優(yōu)先原則編寫樣式,常用斷點(diǎn)包括480px、768px和1024px;第三,彈性處理圖片和布局,為圖片設(shè)置max-width:100%并使用Flexbox或Grid布局替代固定寬度;最后,通過瀏覽器開發(fā)者工具和真實(shí)設(shè)備進(jìn)行充分測試,優(yōu)化加載性能,確保響應(yīng)

UsingsMtpForWordPresseMailSimProvesDeliverabilitialComparedComparedTothEdeDefaultPhpMail()函數(shù).1.smtpauthenticateswithyouremailserver.2.somemomehostsdisablesablephpmail()

TOINTEGRATETHIRD-PARTYAPISINTOWORDPRESS,關(guān)注臺(tái)詞:1.SelectAutableabepianDobtainCredentialslikeapikeYsoroAuthtoKensByEnterRegisteringThemSecure.2.ChooseBeteBetB??eteBetB??eteBetB??etebetInpliCityOorcustimplicityOrcustomPliCoseTompliCoseTomploomcoseusionfunctionfunctionfunctibunitiacuciencipuity forfunigation。
