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

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門(mén)文章

熱工具

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

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

禪工作室 13.0.1
強(qiáng)大的PHP整合開(kāi)發(fā)環(huán)境

Dreamweaver CS6
視覺(jué)化網(wǎng)頁(yè)開(kāi)發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

熱門(mén)話題

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

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

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

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

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

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

要實(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媒體查詢(xún)實(shí)現(xiàn)不同屏幕寬度下的樣式適配,按移動(dòng)優(yōu)先原則編寫(xiě)樣式,常用斷點(diǎn)包括480px、768px和1024px;第三,彈性處理圖片和佈局,為圖片設(shè)置max-width:100%並使用Flexbox或Grid佈局替代固定寬度;最後,通過(guò)瀏覽器開(kāi)發(fā)者工具和真實(shí)設(shè)備進(jìn)行充分測(cè)試,優(yōu)化加載性能,確保響應(yīng)

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