核心要點(diǎn)
- WordPress 開(kāi)發(fā)者應(yīng)將所有數(shù)據(jù)視為不安全,直到證明其安全為止;盡可能使用 WordPress 函數(shù);并保持代碼更新,以確保主題的安全性。
- SQL 注入、跨站腳本 (XSS) 和跨站請(qǐng)求偽造 (CSRF) 是開(kāi)發(fā)者在編寫 WordPress 主題時(shí)需要注意的常見(jiàn)威脅。
- 驗(yàn)證、清理和轉(zhuǎn)義對(duì)于 WordPress 主題安全至關(guān)重要。驗(yàn)證確保輸入數(shù)據(jù)符合預(yù)期;清理在將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)之前對(duì)其進(jìn)行過(guò)濾或清理;轉(zhuǎn)義確保數(shù)據(jù)安全顯示。
- WordPress 提供許多內(nèi)置的驗(yàn)證、清理和轉(zhuǎn)義函數(shù)。這些函數(shù)包括
is_email()
、username_exists()
、term_exists()
、validate_file()
、sanitize_email()
、sanitize_option()
、sanitize_text_field()
、sanitize_hex_color()
、wp_kses_post()
、esc_html()
、esc_url()
、esc_attr()
和esc_textarea()
。
本文是與 SiteGround 合作創(chuàng)作的系列文章的一部分。感謝您支持使 SitePoint 成為可能的合作伙伴。
鑒于 WordPress 占據(jù)了 27% 的網(wǎng)絡(luò)份額,安全性是任何在這一廣受歡迎的開(kāi)源平臺(tái)上運(yùn)行網(wǎng)站的人的首要關(guān)注點(diǎn)。盡管 WordPress 核心代碼的安全性由專門的開(kāi)發(fā)團(tuán)隊(duì)負(fù)責(zé)維護(hù),但數(shù)千個(gè)第三方插件和主題卻并非如此,這些插件和主題擴(kuò)展了 WordPress 的功能,使其幾乎可以完成任何您想要的操作。僅僅一個(gè)存在漏洞的插件或主題就可能對(duì)數(shù)百萬(wàn)個(gè)網(wǎng)站構(gòu)成高風(fēng)險(xiǎn)。
除非您使用可靠的托管服務(wù)提供商(例如我們的合作伙伴 SiteGround),該提供商允許自動(dòng)更新 WordPress 插件并定期進(jìn)行安全檢查,否則您的網(wǎng)站主題和插件的安全性完全取決于您自己。
在本文中,我將介紹一些準(zhǔn)則和 WordPress 函數(shù),您可以在 WordPress 主題開(kāi)發(fā)中應(yīng)用這些準(zhǔn)則和函數(shù),以確保您的產(chǎn)品在編寫時(shí)就將用戶的安全放在首位。
安全意識(shí)強(qiáng)的開(kāi)發(fā)者的原則
對(duì)于專門的 WordPress 插件和主題開(kāi)發(fā)者而言,安全性是他們?cè)诰帉懨恳恍写a時(shí)都放在首位的因素。
編寫安全 WordPress 主題的整體方法包括關(guān)注以下一般原則:
- 將所有數(shù)據(jù)視為不安全,直到證明其安全為止。
- 盡可能使用 WordPress 函數(shù)。大多數(shù) WordPress API 都具有內(nèi)置的安全機(jī)制,這意味著使用它們可以大大降低代碼面臨漏洞的風(fēng)險(xiǎn)。
- 使用最新的技術(shù)和最佳實(shí)踐使您的代碼保持最新。
需要注意的事項(xiàng)
您需要注意的最常見(jiàn)威脅是:
- SQL 注入:攻擊者注入惡意的 SQL 代碼以控制網(wǎng)站的數(shù)據(jù)庫(kù)服務(wù)器。
- 跨站腳本 (XSS):攻擊者將惡意的 JavaScript 代碼注入網(wǎng)頁(yè)。
- 跨站請(qǐng)求偽造 (CSRF):攻擊者強(qiáng)制用戶在已通過(guò)身份驗(yàn)證的網(wǎng)站上執(zhí)行不需要的操作。
網(wǎng)絡(luò)安全一直在發(fā)展,因此了解最新的威脅至關(guān)重要。在 WordPress 方面,Sucuri 博客是了解漏洞和攻擊的好地方。
數(shù)據(jù)驗(yàn)證、清理和轉(zhuǎn)義
在接受來(lái)自任何來(lái)源(例如用戶、網(wǎng)絡(luò)服務(wù)、API 等)的任何輸入數(shù)據(jù)之前,您必須檢查它是否符合您的預(yù)期并且有效。此任務(wù)稱為驗(yàn)證。
例如,如果您通過(guò)網(wǎng)站上的表單收集用戶的電子郵件,則您的代碼需要檢查用戶是否輸入了一些文本輸入(例如,不是一些數(shù)字或什么都沒(méi)有),并且該輸入對(duì)應(yīng)于有效的電子郵件地址,然后再將該數(shù)據(jù)輸入數(shù)據(jù)庫(kù)。
您可能認(rèn)為這種檢查在主題中幾乎不需要。實(shí)際上,最好使用插件而不是主題來(lái)包含表單。但是,情況并非完全如此。例如,如果您計(jì)劃通過(guò)自定義器添加主題選項(xiàng),則可能需要對(duì)用戶的輸入執(zhí)行一些數(shù)據(jù)驗(yàn)證。
清理包括過(guò)濾或清理來(lái)自用戶、網(wǎng)絡(luò)服務(wù)等的數(shù)據(jù),這些數(shù)據(jù)即將存儲(chǔ)到數(shù)據(jù)庫(kù)中。在此過(guò)程中,您可以刪除數(shù)據(jù)中可能造成危害或不需要的任何內(nèi)容,例如 JavaScript 語(yǔ)句、特殊字符等。
轉(zhuǎn)義包括確保數(shù)據(jù)安全顯示,例如刪除特殊字符、編碼 HTML 字符等。這里的推薦做法是盡可能晚地進(jìn)行轉(zhuǎn)義,即在屏幕上顯示數(shù)據(jù)之前進(jìn)行轉(zhuǎn)義。
您需要在 WordPress 主題中進(jìn)行大量的清理和轉(zhuǎn)義。實(shí)際上,為了安全起見(jiàn),最好的方法是清理/轉(zhuǎn)義所有動(dòng)態(tài)數(shù)據(jù),即在 HTML 源代碼中未硬編碼的任何數(shù)據(jù)。
WordPress 驗(yàn)證函數(shù)
您可以使用許多方便的 PHP 函數(shù)執(zhí)行基本驗(yàn)證。
例如,要檢查變量是否不存在或其值設(shè)置為false,可以使用 empty()
。
但是,為了使驗(yàn)證變得輕而易舉,WordPress 提供了這些有用的函數(shù)。
-
您可以使用
is_email( $email )
函數(shù)檢查數(shù)據(jù)是否是有效的電子郵件地址。例如:
if ( is_email( 'test@domain.com' ) ) { echo '有效的電子郵件地址。'; }
-
要檢查有效的用戶名,WordPress 提供了
username_exists( $username )
:$username = 'testuser'; if ( username_exists( $username ) ): echo "用戶名已存在。"; endif;
-
要確保標(biāo)簽、類別或其他分類法術(shù)語(yǔ)存在,您可以使用
term_exists( $term, $taxonomy = '', $parent = null )
:// 檢查類別“cats”是否存在 $term = term_exists('cats', 'category'); if ($term !== 0 && $term !== null) { echo "“cats”類別存在。"; }
-
要確保文件路徑有效(但不是如果它存在),請(qǐng)使用
validate_file( $file, $allowed_files )
:$path = 'uploads/2017/05/myfile.php'; // 返回 0(有效路徑) return validate_file( $path );
WordPress 清理/轉(zhuǎn)義函數(shù)
使用內(nèi)置的 WordPress 函數(shù)來(lái)清理和轉(zhuǎn)義數(shù)據(jù)是完成這項(xiàng)工作的最快捷、最安全的方法,因此請(qǐng)將其作為您的首選。
以下只是一些我在開(kāi)發(fā) WordPress 主題時(shí)經(jīng)常使用的函數(shù)。
-
sanitize_email( $email )
刪除在有效電子郵件地址中不允許的所有字符。這是一個(gè)來(lái)自 Codex 條目的示例:$sanitized_email = sanitize_email(' admin@example.com! '); // 將輸出:admin@example.com echo $sanitized_email;
-
sanitize_option( $option, $value )
根據(jù)選項(xiàng)的性質(zhì)清理選項(xiàng)值,例如來(lái)自自定義器輸入的值。這是一個(gè)示例:sanitize_option( 'admin_email', 'admin@test.com!' );
-
sanitize_text_field( $str )
清理用戶或數(shù)據(jù)庫(kù)提供的字符串,但您可以使用它來(lái)清理任何您希望僅為純文本的數(shù)據(jù):// 輸出:標(biāo)題 echo sanitize_text_field('<h1>標(biāo)題</h1>');
-
sanitize_hex_color( $color )
和sanitize_hex_color_no_hash( $color )
在 WordPress 自定義器的上下文中工作。當(dāng)您的主題允許用戶為各種網(wǎng)站元素選擇顏色時(shí),它們非常方便。
第一個(gè)函數(shù)驗(yàn)證以 # 符號(hào)為前綴的十六進(jìn)制顏色條目,而第二個(gè)函數(shù)處理沒(méi)有 # 的顏色數(shù)據(jù)。
來(lái)自 WordPress.org 代碼參考的示例:
$wp_customize->add_setting( 'accent_color', array( 'default' => '#f72525', 'sanitize_callback' => 'sanitize_hex_color', ) );
-
wp_kses_post( $data )
過(guò)濾內(nèi)容,只留下允許的 HTML 標(biāo)簽。在自定義器上下文中,當(dāng)您的主題允許用戶輸入一些帶有 HTML 格式的文本時(shí),這非常有用:function yourtheme_sanitize_html( $input ) { return wp_kses_post( force_balance_tags( $input ) ); }
-
esc_html( $text )
是一種簡(jiǎn)單的轉(zhuǎn)義 HTML 塊的方法。例如,如果您想在 HTML 標(biāo)簽內(nèi)輸出一些文本,以確保此文本本身不包含任何 HTML 標(biāo)簽或其他無(wú)效字符,您可以編寫:<h2><?php echo esc_html( $title ); ?></h2>
-
esc_url( $url )
在您想要檢查和清理 URL(包括 href 和 src 屬性中的 URL)時(shí)非常有用。例如:<a href="http://miracleart.cn/link/9e52112668804599bae71e241e4b4548'https://website.com' ); ?>">很棒的網(wǎng)站</a>
-
esc_attr( $text )
用于您的主題動(dòng)態(tài)輸出 HTML 屬性的任何地方:<a href="http://miracleart.cn/link/1649f854581e9c03bc2c4e06023c5b99'/' ) ); ?>" rel="home"></a>
-
您可以使用
esc_textarea( $text )
來(lái)轉(zhuǎn)義用戶在文本區(qū)域中鍵入的文本:<textarea><?php echo esc_textarea( $text ); ?></textarea>
資源
以下很棒的資源對(duì)我真正掌握在 WordPress 主題中編寫安全代碼非常有幫助:
- WordPress.org 主題手冊(cè)中的主題安全性
- 安全編寫主題指南,F(xiàn)rank Klein
- 在 WordPress 中清理、轉(zhuǎn)義和驗(yàn)證數(shù)據(jù),Narayan Prusty
- WordPress 主題:XSS 漏洞和安全編碼實(shí)踐,Tony Perez
- 以 WordPress 的方式編寫安全的插件和主題,Ben Lobaugh。
或者,您可以在我們?yōu)槟淼倪@份方便的比較中了解托管服務(wù)提供商如何在 WordPress 安全性方面提供幫助。
如果您對(duì)主題開(kāi)發(fā)本身感興趣,您可以學(xué)習(xí)從頭開(kāi)始創(chuàng)建一個(gè)基本的主題,方法是在 SitePoint 的“構(gòu)建您的第一個(gè) WordPress 主題”課程中學(xué)習(xí):加載播放器……
結(jié)論
安全性必須放在所有 WordPress 開(kāi)發(fā)者的首位。WordPress 通過(guò)提供大量您可以插入主題中的現(xiàn)成函數(shù),讓您有一個(gè)良好的開(kāi)端。
因此,使用 WordPress 驗(yàn)證和清理/轉(zhuǎn)義函數(shù)是您開(kāi)始編寫安全可靠的 WordPress 主題(用戶將學(xué)會(huì)信任)的最簡(jiǎn)單方法。
在編寫 WordPress 主題或插件時(shí),您對(duì)安全性考慮了多少?您如何解決安全問(wèn)題?
點(diǎn)擊下面的評(píng)論框分享!
關(guān)于 WordPress 主題驗(yàn)證和轉(zhuǎn)義函數(shù)的常見(jiàn)問(wèn)題解答
什么是 WordPress 編碼標(biāo)準(zhǔn),為什么它們很重要?
WordPress 編碼標(biāo)準(zhǔn)是由 WordPress 制定的一套特定規(guī)則和指南,以確保 WordPress 代碼的一致性和質(zhì)量。這些標(biāo)準(zhǔn)很重要,因?yàn)樗鼈兪勾a更易于閱讀、理解和維護(hù)。它們還有助于防止常見(jiàn)的編碼錯(cuò)誤和安全漏洞。對(duì)于開(kāi)發(fā)者而言,遵循這些標(biāo)準(zhǔn)對(duì)于確保其主題和插件與 WordPress 及其他主題和插件兼容至關(guān)重要。
如何安全地編輯 WordPress 代碼?
如果操作不當(dāng),編輯 WordPress 代碼可能會(huì)很危險(xiǎn)。建議在更改主題代碼時(shí)使用子主題。這樣,您就可以進(jìn)行更改而不會(huì)影響原始主題。此外,在進(jìn)行任何更改之前,務(wù)必備份您的網(wǎng)站。使用合適的代碼編輯器,而不是 WordPress 編輯器來(lái)編輯代碼。最后,在將更改應(yīng)用于您的實(shí)時(shí)網(wǎng)站之前,請(qǐng)?jiān)跁捍婢W(wǎng)站上測(cè)試您的更改。
定性分析中代碼和主題的區(qū)別是什么?
在定性分析中,代碼用于標(biāo)記、編譯和組織您的數(shù)據(jù),而主題用于識(shí)別數(shù)據(jù)中的模式和關(guān)系。代碼通常是表示特定數(shù)據(jù)片段的單個(gè)單詞或短語(yǔ)。另一方面,主題更廣泛,代表從編碼數(shù)據(jù)中出現(xiàn)的更大的概念或想法。
什么是主題編碼,它如何在 WordPress 中使用?
主題編碼是定性研究中使用的一種方法,用于識(shí)別和分析數(shù)據(jù)中的模式或主題。在 WordPress 中,主題編碼可以指開(kāi)發(fā)具有特定設(shè)計(jì)或功能的主題的過(guò)程。這涉及以反映主題預(yù)期設(shè)計(jì)或功能的方式編寫和組織代碼。
什么是 WordPress 中的驗(yàn)證和轉(zhuǎn)義函數(shù)?
驗(yàn)證和轉(zhuǎn)義函數(shù)是 WordPress 中的安全措施。驗(yàn)證是檢查用戶輸入的數(shù)據(jù)以確保其在處理之前符合特定條件的過(guò)程。轉(zhuǎn)義是通過(guò)去除可能導(dǎo)致安全漏洞的有害數(shù)據(jù)來(lái)確保輸出安全的過(guò)程。這些函數(shù)對(duì)于防止 SQL 注入和跨站腳本 (XSS) 等安全問(wèn)題至關(guān)重要。
為什么在 WordPress 中驗(yàn)證和轉(zhuǎn)義數(shù)據(jù)很重要?
驗(yàn)證和轉(zhuǎn)義數(shù)據(jù)對(duì)于確保 WordPress 網(wǎng)站的安全非常重要。如果沒(méi)有這些過(guò)程,您的網(wǎng)站可能會(huì)受到攻擊,攻擊者會(huì)將有害數(shù)據(jù)注入您的網(wǎng)站,從而導(dǎo)致潛在的數(shù)據(jù)丟失或未經(jīng)授權(quán)訪問(wèn)您的網(wǎng)站。
如何在 WordPress 中驗(yàn)證和轉(zhuǎn)義數(shù)據(jù)?
WordPress 提供了一些用于驗(yàn)證和轉(zhuǎn)義數(shù)據(jù)的函數(shù)。例如,您可以使用 sanitize_text_field()
函數(shù)驗(yàn)證文本輸入,并使用 esc_html()
函數(shù)轉(zhuǎn)義 HTML 輸出。在處理用戶輸入或?qū)?shù)據(jù)輸出到瀏覽器時(shí),務(wù)必使用這些函數(shù)。
編寫安全 WordPress 代碼的最佳實(shí)踐是什么?
編寫安全 WordPress 代碼的一些最佳實(shí)踐包括遵循 WordPress 編碼標(biāo)準(zhǔn)、驗(yàn)證和轉(zhuǎn)義所有數(shù)據(jù)、使用 nonce 驗(yàn)證請(qǐng)求來(lái)源、在執(zhí)行操作之前檢查用戶權(quán)限以及使 WordPress、主題和插件保持最新。
如何了解更多關(guān)于 WordPress 編碼標(biāo)準(zhǔn)的信息?
WordPress 開(kāi)發(fā)者手冊(cè)是學(xué)習(xí) WordPress 編碼標(biāo)準(zhǔn)的絕佳資源。它提供了對(duì)標(biāo)準(zhǔn)的詳細(xì)解釋和示例。還提供許多在線教程和課程,涵蓋 WordPress 編碼標(biāo)準(zhǔn)。
在為 WordPress 編碼時(shí)應(yīng)避免的一些常見(jiàn)錯(cuò)誤是什么?
在為 WordPress 編碼時(shí)應(yīng)避免的一些常見(jiàn)錯(cuò)誤包括不遵循 WordPress 編碼標(biāo)準(zhǔn)、不驗(yàn)證或轉(zhuǎn)義數(shù)據(jù)、硬編碼 URL、不使用 nonce 進(jìn)行表單提交以及不使 WordPress、主題和插件保持最新。
以上是用內(nèi)置的WordPress函數(shù)編碼安全主題的詳細(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脫衣機(jī)

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

熱門文章

熱工具

記事本++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)

使用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è)試;復(fù)制正式網(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)題。

使用Git管理WordPress項(xiàng)目時(shí),應(yīng)只將主題、自定義插件和配置文件納入版本控制;設(shè)置.gitignore文件以忽略上傳目錄、緩存和敏感配置;利用webhook或CI工具實(shí)現(xiàn)自動(dòng)部署并注意數(shù)據(jù)庫(kù)處理;采用兩分支策略(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)建避免重復(fù)手動(dòng)編譯。按照這些步驟,可以逐步實(shí)現(xiàn)一個(gè)簡(jiǎn)單的Gutenberg塊。

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

在WordPress中,當(dāng)新增自定義文章類型或修改固定鏈接結(jié)構(gòu)后,需手動(dòng)刷新重寫規(guī)則,此時(shí)可通過(guò)代碼調(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ī)則保存。此外,訪問(wèn)“設(shè)置>固定鏈接”頁(yè)面點(diǎn)擊保存也可觸發(fā)刷新,適合非自動(dòng)化場(chǎng)景。

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媒體查詢實(shí)現(xiàn)不同屏幕寬度下的樣式適配,按移動(dòng)優(yōu)先原則編寫樣式,常用斷點(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。
