WordPress 插件和主題開發人員的安全最佳實踐

已發表: 2020-12-09

作為 WordPress 開發人員,您必須就工作內容做出許多決定。 您的主要興趣和優先事項是構建一個令人驚嘆的主題或插件,當您坐在駕駛座上處理代碼時,安全措施通常會退居二線。 您最後一次坐下來檢查自己的代碼是否存在安全問題是什麼時候? 不,我不這麼認為

這些技巧是基於我在 CleverPlugins 開發插件和幫助無數客戶在被黑客入侵後讓他們的網站重新上線的經驗。 開發像 WP Security Ninja 這樣的安全插件並沒有讓我對其他人的代碼更加偏執。

網站被黑的最常見原因仍然是糟糕的密碼管理,但這不應該成為使用一些簡單方法保護代碼的藉口。

當您開發插件或主題時,您希望它變得流行並將其安裝在盡可能多的網站上。 您的成功越大,人們就越有可能濫用您的工作來入侵您用戶的網站。

由於WordPress的流行,它已成為黑客最常見的目標之一。 如果在插件或主題中檢測到漏洞,則可能意味著成千上萬(如果不是數十萬)網站被濫用。

不幸的是,知名產品中經常出現漏洞,因此值得採取一些基本的安全措施來保護您的用戶代碼。

WordPress.org 審核小組怎麼樣?

您可能會認為,在發佈到官方存儲庫之前審查插件和主題的團隊會檢查各種安全問題,但這個團隊很小,只有幾個人。 要檢查的插件和主題的隊列不斷增加,因此他們必須審查每個的時間是有限的。

但是,如果他們確實找到了某些東西,他們可能會自動關閉您的插件,直到您修復它或通過電子郵件向您發送警告,告知您必須在特定時間範圍內修復漏洞。

關鍵是,一旦您的插件或主題列在存儲庫中,您就可以通過存儲庫推送更新而無需額外篩選,因此漏洞可以隨時輕鬆潛入,並且幾乎在任何時間段內都不會被發現。

基本上,加強你的插件安全措施取決於你,所以讓我們看看一些方法可以保護你的 WordPress 產品,防止你遇到很多麻煩,並可能對你的品牌產生負面影響。

以下是您可以採取哪些措施來安全地開發 WordPress 插件或主題。

1、全方位考慮安全!

您永遠不知道誰可能在使用您的插件或主題,以及他們對安全性的了解程度(如果有的話)。

您永遠不知道誰可能在使用您的插件或主題,以及他們對安全性的理解程度(如果有的話)。

任何客戶網站上的管理員、編輯或普通用戶可能不使用安全密碼,他們的帳戶可能會被黑客入侵。 如果您的產品不安全,這些帳戶可能會被濫用以獲得進一步的訪問權限,以便在您客戶的網站上安裝惡意代碼。

您不應期望已配置網站運行的服務器的服務器管理員足夠了解如何保護您的網站免受同一服務器上的其他網站的影響。 如果網站由大型提供商託管,您可以期望網站被正確“分離”,但您不知道您的產品將安裝在哪裡。

這聽起來很偏執嗎? 可能是。 但是,如果並且當您的插件或主題變得超級流行時,您會很高興採取偏執的方法來確保安全。

如果並且當您的插件或主題變得超級流行時,您會很高興採取偏執的方法來確保安全。Tweet

2. 防止 XSS – 跨站腳本攻擊

隨著 WordPress 正在成為一個由 Gutenberg 和 ReactJS 更前端驅動的項目,這一點變得越來越重要。

WordPress 開發人員最常見的錯誤之一是忘記驗證和清理他們的代碼——使其容易受到 XSS 攻擊。 XSS 有幾種變體,但一般來說,當黑客被允許將代碼注入服務器然後讓它在訪問者的瀏覽器中執行時,就會發生 XSS 攻擊。

假設您有一個輸入字段。 為簡單起見,假設它是一個評論字段,用戶或訪問者可以在其中向帖子提交評論。

黑客將嘗試使用"<script>alert('XSS');</script>"提交評論。

現在,這只是一個在用戶屏幕上彈出警報的基本示例,僅此而已。 真正的黑客將使用評論字段注入代碼,從他們的站點加載代碼,這些代碼可以從訪問者的瀏覽器中竊取信息等等。

我們可以通過驗證、清理和轉義來防止這種情況發生。

驗證是在做任何事情之前檢查提交的數據,例如將其存儲在數據庫中。 每當提交數據時,您都可以對其進行檢查並確保其可接受。 如果它是數量字段,則需要一個數字。 如果不是數字,您可以向用戶返回錯誤消息。

清理數據正在處理提交的信息並確保它不包含我們不想存儲的任何內容,例如刪除任何不需要的字符。 WordPress 內置了幾個功能來幫助解決這個問題。 更多關於消毒的信息。

轉義是防止任何惡意代碼在您的瀏覽器中實際執行。 假設您已經在您的網站中註入了惡意代碼,或者另一個插件或主題讓黑客將代碼插入您正在使用的數據中——在顯示之前將數據轉義到屏幕上可以防止它成為問題。

讓我們看一下我們在"<script>alert('XSS');</script>"之前使用的相同簡單示例

如果我們不對這段代碼做任何事情,瀏覽器會認為它是 HTML 代碼。 這裡重要的細節是用於定義 HTML 標記的 < > 字符。 通過轉義這些,我們把<變成&lt;>進入&gt; 瀏覽器現在明白這不是實際的 HTML 代碼,它應該只顯示一個小於和大於號。

通過驗證、清理和轉義進出應用程序的所有數據,您可以保護用戶免受最常見的攻擊方法之一的侵害。

3.小心SQL注入

顧名思義,攻擊者可以使用 SQL 注入來使您的網站處理經過調整的 SQL 查詢,並使用它來訪問您的數據庫。

根據您存儲在網站上的數據,讓您的網站數據因 SQL 注入攻擊而洩露可能會從尷尬到完全破壞您的聲譽和業務。

SQL 注入是攻擊網站的一種古老方式,但它仍然非常有效,並且有很多人在尋找使用這種攻擊形式的方法。 2020 年 10 月,流行的 Loginizer WordPress 插件宣布他們存在 SQL 注入漏洞,導致超過 100 萬個網站處於危險之中。

2019 年,未知黑客通過 SQL 注入攻擊竊取了數百萬保加利亞人的稅收數據,2016 年,一群俄羅斯黑客在俄亥俄州提取了約 50 萬人的選民信息。 這些類型的攻擊仍然非常有效,您可以找到很多關於它們的信息。

關於清理數據輸入的漫畫

來源:https://xkcd.com/327/

SQL 注入最常見的地方是在接受用戶輸入的表單字段中——例如,名稱。 攻擊是通過在輸入字段中輸入部分 SQL 代碼來發生的,創建一個自定義查詢,給出與您預期不同的結果。

假設您有一個允許人們搜索特定名稱的表單。

SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' AND meta_key = 'celebrity_name';

這個簡單的示例將從 post 元表中提取所有行,其中所有行都具有名稱Henry和特定鍵celebrity_name ,這樣,我們不會返回整個數據庫,而只返回我們需要的特定行。

攻擊者會嘗試解析不同的值——例如'Henry' OR 1=1--

該查詢現在將返回具有我們特定值的所有行,或者其他任何內容——因為 SQL 中的OR 1=1始終為真。

不過,情況會變得更糟。 我們的 SQL 查詢只要求meta_key與我們正在尋找的特定值匹配的結果,因此我們不會返回所有內容。 這應該會限制 SQL 注入攻擊的影響,對吧?

好吧,不是這樣。 在 SQL 中,雙破折號是註釋指示符,因此後面的所有內容都會被註釋。

SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' OR 1=1--' AND meta_key = 'celebrity_name';

這意味著查詢如下所示:

SELECT * FROM wp_postmeta WHERE meta_value = 'Henry' OR 1=1

查詢現在基本上返回該數據庫表中的所有內容。

這只是一個簡單的例子。 有許多更複雜的方法可以訪問數據庫中的大部分(如果不是全部)信息。 攻擊者將能夠嘗試盲目的 SQL 注入攻擊,這意味著在您的數據庫上運行代碼——添加新管理員、刪除所有數據等等。

大多數攻擊都是隨機查詢字符串的形式,其中包含提交到您的網站表單的部分 SQL。 自動化腳本將檢測您網站輸出的任何更改,然後檢測潛在的攻擊。

一種簡單有效的方法是發送一個撇號'作為輸入,並查看它是否改變了任何內容、發生錯誤或返回更多結果。

WordPress來救援

任何開發人員都不應直接與數據庫交互,而應使用 WordPress 中內置的數據庫抽像類$wpdb

WordPress 中的$wpdb類具有安全與數據庫交互所需的所有 CRUD 功能,如果您的插件或主題需要,您甚至可以使用該類與您自己的數據庫表進行交互。

您可以通過預測在每個輸入表單中應該合理輸入什麼樣的數據來解決問題。 在前面的示例中,我們搜索了一個名稱。 我們可以清理輸入以確保我們只接受字母。 如果您有一個僅包含幾個選項的選擇框或單選組,您可以檢查數據以確保它只是您允許的選擇之一。

解決該問題的最重要的事情是使用$wpdb->prepare()函數準備數據。

此函數採用準備好的查詢字符串和要添加到 SQL 查詢的參數數組。

$meta_key = 'celebrity_name';
$meta_val = 'Henry'
$allhenrys = $wpdb->get_results(
  $wpdb->prepare(
    "SELECT * FROM $wpdb-&gt;postmeta WHERE meta_key = %s AND meta_value = %s",
    $meta_key,
    $meta_val
  )
);

所有工作都在prepare()函數中進行。 第一個參數,準備好的查詢——包含佔位符%s而不是實際值。 這被其他已解析的變量$meta_key$meta_val所取代。

注意 – 重要的是不要在佔位符周圍的查詢中使用撇號,因為該函數會為您添加這些撇號。

這是一個簡化的示例,但相同的過程可用於任何數據庫查詢,您可以將%s用於字符串,將%d用於整數,將%f用於浮點數。

還有針對特定情況的功能,例如向數據庫添加新行。 為此,您可以使用$wpdb->insert()

$wpdb->insert(
  "{$wpdb->prefix}my_custom_table",
  array(
    'name'   => 'Henry',
    'userid' => 123,
    'score'  => 10,
  ),
  array(
    '%s',
    '%d',
    '%d',
  )
);

使用 prepare 函數可以幫助防止大多數針對您的產品的 SQL 注入嘗試。

請記得查看 $wpdb 文檔。 有些函數會為您轉義輸入; 其他人希望您在將數據解析到函數之前自己轉義輸入。

4. 使用 nonces 來保護你的請求

在 WordPress 中使用 nonce 系統可以幫助您防止許多攻擊。 就安全性而言,隨機數是僅使用一次的數字。 我們的想法是將此唯一編號添加到您從代碼向 WordPress 安裝發出的所有請求中,以驗證此請求是否合法。

這有點像你需要給保鏢一個秘密密碼才能進入俱樂部

然而,WordPress 中的 nonce 有點不同——它們既不是數字也不是 nonce 只使用一次。

從技術上講,WordPress 中的 nonce 可以同時包含小寫字母和數字,而不是只使用一次,而是在一段時間後重新生成。

您使用 nonce 的方式是註冊您的 JavaScript 文件的 PHP 代碼會生成一些唯一的數字和字母組合,並對其進行解析,以便您的 JS 代碼可以讀取它。

每次 JavaScript 代碼向您的網站發送請求時,它都會發送該段代碼,如果代碼不匹配,您的代碼應該完全忽略該請求。

使用示例總是會更容易一些,因此讓我們看一下按照以下步驟在插件中加載 .js 文件的簡單方法:

在 WordPress 插件中使用 nonce

add_action('wp_enqueue_scripts', 'load_my_plugin_script');

function load_my_plugin_script() {
  // Register the script with all details and ensures it is loaded after jQuery
  wp_register_script('secure-plugin', plugin_dir_url( __FILE__ ). 'js/secure-plugin.js', array( 'jquery' ) );

  // Here happens the magic, we add some details to an object that we can later reference and read from in our JS code.
  wp_localize_script(
    'secure-plugin',
    'plugin_ajax_object',
    array(
      'nonce' => wp_create_nonce('secure-plugin-nonce')
    )
  );

  // Once that is done, we can now enqueue the script
  wp_enqueue_script('secure-plugin');
}

在這個函數中,我們告訴 WordPress 加載一個 JavaScript 文件。 首先,我們使用wp_register_script()註冊要加載的文件。

然後我們使用wp_localize_script()來解析一個數據數組,特別是“nonce”,它包含我們想要在 JS 代碼中使用的唯一 nonce。 請記住,您也可以在該數組中發送各種其他信息,但在此示例中我們只是保持簡單。

當您從 JavaScript 文件發送請求時,您需要包含該唯一隨機數。 這樣做很容易:

在 JavaScript 文件中使用來自 WordPress 插件的 nonce

jQuery(document).ready(function($) {
  $.ajax({
    url: ajaxurl, // WP variable, contains URL pointing to admin-ajax.php
    type: 'POST',
    data: {
      'action':      'get_custom_data',
      '_ajax_nonce': plugin_ajax_object.nonce,
      'user_data':   'Some input from a user'
    },
    success: function( response ) {
      // Here we do what happens if all is good - update the interface with a success message!?
    },
    error: function( response ) {
      // Whooops, something went wrong!
      // console.log(response);
    }
  });
});

由於我們使用wp_localize_script()我們可以在 JavaScript 中使用 plugin_ajax_object 變量。 我們將 nonce 作為變量_ajax_nonce

從 JavaScript 代碼檢查和驗證 WordPress 插件中的隨機數

add_action('wp_ajax_get_custom_data', 'get_custom_data');

function get_custom_data() {
  // Ready for the magic to protect your code?
  check_ajax_referer('secure-plugin-nonce');

  /**
   * That's it - the check_ajax_referer function verifies the nonce is correct or it dies and stops code execution if it fails.
   *
   * If you want to customize the error handling and perhaps return an error to your JS code, you could change the code to something like:
   * if ( ! check_ajax_referer( 'secure-plugin-nonce', false, false ) ) {    
   *   wp_send_json_error( 'Invalid nonce' );
   * }
   */

  $sanitized_user_data = sanitize_text_field( $_POST['user_data'] );

  // ... continue with the rest of your plugin's function code ...
}

神奇的是check_ajax_referer()函數檢查隨機數,如果隨機數與預期不匹配,則簡單地失敗並停止任何進一步的代碼執行。

您可以進一步自定義代碼,以向用戶返回有關所發生情況的特定信息。

在代碼中使用 nonce 是一種快速、簡單且有效的方法,可以防止多種類型的黑客攻擊。 這並不意味著您可以跳過所有其他安全措施,但它有助於減少最嚴重的問題。

還記得我說過從不相信任何人的話嗎? 這給我們帶來了另一種保護您的代碼的方法——清理。

訂閱並獲取我們的書的免費副本

11 種行之有效的技巧,可將您的信用卡糾紛勝訴率提高 740%

與朋友分享

輸入您朋友的電子郵件地址。 我們只會通過電子郵件向他們發送這本書,童子軍的榮幸。

謝謝你的分享

太棒了 - 一份“11 個經驗證的將信用卡糾紛勝訴率提高 740% 的技術”的副本剛剛發送到. 想幫助我們更多地傳播信息嗎? 繼續,與您的朋友和同事分享這本書。

感謝訂閱!

- 我們剛剛將您的“11 種經過驗證的技術,可將您的信用卡糾紛勝訴率提高 740%”的副本發送至.

您的電子郵件中有錯字嗎? 單擊此處編輯電子郵件地址並再次發送。

封面
封面

5.清理用戶輸入

在前面的示例中,我們包含了一條從 JS 發送到 PHP 的附加數據。 每次將數據輸入代碼時,您都應該期望它是不安全的。

'user_data':'Some input from a user'

在這個例子中,它是一個簡單的字符串,但是由於我們將數據發送回 PHP,我們需要確保輸入不包含任何可能在我們的 PHP 環境中被利用或存儲在數據庫中以允許進一步濫用的代碼。

進來消毒。 WordPress 有一系列功能,可以接受您提供的任何輸入並在將數據返回給您之前清理數據。

在此示例中,我們使用了函數sanitize_text_field() ,但 WordPress 帶有許多適用於不同類型數據的清理函數。

WordPress 中內置了許多其他出色的功能和方法,您可以使用它們來確保代碼安全並防止濫用。

你永遠不應該使用任何發送到你的代碼的數據,而不先對其進行清理。 查看這篇關於 WordPress 開發人員常見錯誤的文章,了解更多關於消毒和其他實用技巧的詳細信息。

這讓我想到了大多數 WordPress 開發人員都經歷過的下一個技巧:

6. 記住is_admin()不是你想的那樣

當你第一次開始考慮保護你的代碼免受惡意攻擊時,你可能會偶然發現函數is_admin() ,從名字上看,它聽起來就是你需要的一切,你需要做的就是用它來包裝你的代碼,並且一切都會好起來。

不,很遺憾沒有。 函數is_admin()僅檢測代碼是否正在網站的管理端執行。 它無法檢測您的代碼是否由普通用戶或管理員運行。

如果您只是在插件中輸入代碼,您將永遠不會注意到它,因為您很可能在管理界面中運行代碼,這意味著代碼只會評估為true ,您將停止思考並繼續做某事別的。

檢查用戶是否為管理員的正確方法是檢查用戶能力:

  if ( current_user_can( 'activate_plugins' ) ) { 
    // Do your code here
  }

不同的用戶角色有不同的功能,因此您可以進行更精細的控制。 在大多數情況下, 'activate_plugins'只是管理員需要的。

如果您想要一種允許管理員和編輯者做某事的方法,您應該測試'edit_pages'功能。

7. 將 rel=”noopener” 或 rel=”noreferrer” 添加到您的鏈接

鏈接到外部資源是很正常的,將target="_blank"添加到這些鏈接的老式方法是有意義的,因為您不希望您的用戶離開您的插件/主題頁面。

但是,這為您打開了所謂的 Tabnabbing 的大門。 這是一個安全問題,惡意 JavaScript 代碼可以通過濫用 JavaScript window.opener功能從您的用戶那裡竊取信息。

防止這種情況的發生就像在鏈接中添加rel="noopener"一樣簡單。 您今天鏈接到的頁面可能還不錯,但將來可能會改變。

rel=noopener表示您鏈接到的頁面無法訪問信息或獲得對您頁面的任何控制權。

rel=noreferrer做同樣的事情,並且還指示瀏覽器不要通過 Referrer 標頭傳遞任何推薦信息。 添加rel="noreferrer"意味著您鏈接到的頁面不知道您的訪問者來自哪裡。

注意:這兩個屬性不應與rel=nofollow混淆,後者與 SEO 有關。

8. 將 HTTPS 和安全令牌與第 3 方 API 一起使用

作為開發人員,您經常需要集成 API,安全地執行此操作以保護來回發送的數據至關重要。

幸運的是,已經制定瞭如何安全執行此操作的標準; 其中之一是HTTPS。 使用 HTTPS 引入了一層安全性,其中傳輸的所有數據都經過加密。

但是,要確保您的數據免受間諜的侵害,僅使用 HTTPS 是不夠的。

正如 Ars Technica 的這篇文章所解釋的,“HTTPS 並不意味著您的數據是安全的,它只是意味著您的連接是安全的。”

安全令牌 – JWT

處理通信和 API 集成的安全標準是使用 JSON Web Tokens,JWT。

安全令牌是通過向服務器發出請求來創建的,該服務器驗證用戶的登錄詳細信息並生成令牌,這是一小段包含數據的字符串,例如用戶名、ID 等。

當您向服務器發送任何後續請求時,您會在請求中包含該令牌。 此令牌證明您已通過身份驗證並具有訪問權限。 如果令牌有效且未過期,服務器將使用令牌中包含的用戶詳細信息並拉取請求的數據。

與使用 API 密鑰相比,服務器可以通過這種方式快速處理請求,後者需要在決定處理數據之前通過該密鑰查找用戶。 使用令牌,您可以在令牌內包含有關用戶的數據並保存多個數據庫查詢。

通過生成和隨後使用安全令牌的方式,不可能創建假令牌或操縱令牌的內容。 只有知道一個秘密密鑰才能創建一個有效的令牌,平台背後的公司將把它很好地隱藏起來。

要記住的一個非常重要的注意事項是令牌內的數據未加密。 不使令牌無效就不可能篡改令牌內容,但是令牌內的數據很容易被任何人讀取,因此不是存儲敏感數據的好地方。

如果您想深入了解令牌及其工作原理,一個很好的資源是 JSON Web 令牌簡介。

9. 不要使用 CDN 的外部庫

儘管通過 cdnjs.com 或其他免費的全球 CDN 包含您可能需要的任何庫可能很誘人,但也有一些缺點。

首先,您無法控制庫和潛入您包含的文件的任何惡意代碼。

雖然 CDN 通常從定義上講是穩定和快速的,但它們也受到更多攻擊。 如果您的代碼依賴於受攻擊的 CDN 上的 JS 庫,那麼您的插件和主題將加載非常緩慢或根本不加載。

這發生在一個客戶網站上,當時某個插件使用的公共 CDN 對某些地區的用戶來說超時,導致界面無法使用。 最後,我不得不更改插件以使用 JS 腳本的本地副本作為快速修復。

使用外部第三方來源也可能損害隱私。 CDN 可能會記錄您的所有用戶 IP - 請務必檢查 GDPR 政策並通知您的客戶。

一般來說,如果您使用信譽良好的 3rd 方 CDN 提供商,您不會遇到任何問題,但最簡單和最可靠的方法是分發您產品中包含的 JS 庫。

你知道嗎? WordPress 附帶了幾個 JS 庫。 您可能想要使用的許多更常見的 JS 庫都包含在 WordPress 中。 這些庫將滿足您的大部分基本需求。

開發者提示:請僅在您需要的特定頁面上加載額外的 JS 和 CSS 文件。 作為開發人員和用戶,我非常不喜歡通過在每個頁面上加載不需要的 JS 和 CSS 文件來減慢管理員速度的插件。 它不僅會減慢其他管理頁面的速度,而且還會真正擾亂視覺佈局,使一些管理頁面幾乎無法使用。

還有一些工具可以幫助您保護代碼,一個可以免費使用的好工具是 Coderisk。

正在招聘
高級 PHP 開發人員
構建 Freemius 產品、服務和 API 的核心,看看您對 WordPress 插件和主題業務的直接影響。
電子商務遷移專家
為開始使用 Freemius 銷售的插件和主題企業管理許可證遷移和產品集成流程。
內容營銷人員
通過可操作的書面、視覺和音頻內容分享我們關於銷售插件和主題的最佳方式的知識。

10.使用工具和服務來分析你的代碼

代碼風險

有許多自動化服務可以幫助識別代碼問題。 Exakat、SonarSource 和 PHPStan 僅舉幾例,也是我的最愛 - Coderisk.com - 一種在代碼中查找一些更明顯的安全錯誤的簡單方法。

該公司從公共 WordPress.org 存儲庫中掃描所有 WordPress 插件。 他們的軟件能夠根據不同的編碼標準掃描和識別數百種不同類型的安全問題。

根據他們自己的統計,到目前為止,他們已經掃描了超過 40 億行公共代碼,即使是頂級插件也存在相當多的問題。

註冊他們的免費服務非常簡單——您可以創建一個免費帳戶,然後開始申請您的插件。 聲明插件就像在下次部署新版本時將一行代碼放入 readme.txt 中一樣簡單。

這使您可以訪問他們對您的插件的最新掃描,並且在內部,他們具有有關每個問題的特定信息和詳細信息,並帶有直接指向您的代碼的鏈接。

Coderisk 安全儀表板

請記住,這是一項免費服務,因此他們可能不會經常更新對您插件的掃描,但是一旦您收到通知,就值得檢查您的代碼,因為自上次查看以來您可能已經引入了錯誤你的代碼。

一旦你掌握了它的竅​​門,這個界面就很容易導航,而且這個系統非常有用,給你很容易理解的錯誤說明,幫助你跟踪錯誤。

還有很多過濾錯誤的方法,您可以將每個問題標記為已修復或許多其他選項,以幫助您快速了解所有問題。

注意:如果您從未在您的代碼上運行 Coderisk(或其類別中的任何其他工具),請不要擔心您會收到警告的可疑問題的數量。 這些工具可能會產生大量誤報,因為它們只分析代碼而不了解業務邏輯。 使用該工具的輸出作為要查看的項目的可靠起始列表。

PHP_CodeSniffer

另一個檢查代碼的好工具是 PHP_CodeSniffer。 PHPCS 由兩個腳本組成,一個是檢查您的代碼並向您報告錯誤的 PHPCS,另一個是可以自動修復 PHPCS 識別的大量問題的 PHPCBF。

一旦安裝了 PHPCS,就可以很容易地從命令行使用它。 此工具不會阻止代碼中出現安全問題,但您可以消除簡單的編碼錯誤,這使得濫用任何更大的問題變得更加困難。

也可以將 PHPCS 直接集成到您的編輯器中,例如 Sublime Text 和 Visual Code。 通過這種方式,您可以輕鬆查看任何錯誤並在 IDE 中快速修復它們。

無論您是在團隊中工作還是作為單個開發人員工作,都值得使用自動化系統,因為它是消除您可能錯過的基本安全問題的簡單方法。

使用自動化系統掃描代碼以查找安全問題並不是一種安全的包羅萬象的錯誤方法,但它可以幫助您查明最明顯的錯誤。

11. 不要在沒有經過適當審查的情況下從網上複製粘貼代碼

確保您的 WP 產品盡可能安全應該是一個持續的過程,而不僅僅是偶爾。 當您引入新功能或刪除代碼時,您還可能引入新的安全問題。

谷歌並不總是你的朋友。 作為一名開發人員,您習慣於在廣闊的互聯網上查看代碼示例來激發您的靈感——或者如果您很懶惰,就在這里和那裡重寫一些零碎的代碼。

您在 Internet 上找到的大多數代碼片段很少準備好在安全的生產環境中使用,並且僅作為您嘗試修復的任何編碼問題的示例。 盲目地使用這些代碼並且沒有審查會很快引入問題。

作為 WordPress 開發人員,有很多工作要做,而通過數千次安裝來解決插件中的緊急安全問題不應該是其中之一。

請記住,您的聲譽受到威脅

如果您不注意插件或主題的安全性,那麼您的用戶、他們的業務、您的業務和您的聲譽就會受到威脅。 這可能會浪費很多時間和金錢!

安全漏洞會對客戶對您的品牌或產品的信任和信心產生巨大影響。 上面的 Loginizer 示例表明,即使是最令人尷尬的安全漏洞也可能發生在安全插件開發人員身上! 其他關於選民欺詐和政府黑客行為的例子告訴我們,任何人都是脆弱的。

如果並且當您發現漏洞時,請迅速採取行動解決它,並遵循最佳實踐公開宣布問題(如有必要)並發布修復程序。

如果您在溝通和可能由漏洞引起的“公共關係”問題上保持領先,那麼您可以避免一些巨大的麻煩並提高您的聲譽而不是損害它。

謝謝閱讀!

當您不知道從什麼開始時,查看您需要做的所有事情可能會令人生畏,而且很難找到正確的信息。 如果您不知道從哪裡開始,您應該考慮讓 WP 安全專家對您的產品進行審查(我也進行安全審查)。

節省金錢或時間進行安全審查很誘人,但從長遠來看,不盡可能保護您的產品的成本可能會更高。

這些只是您可以而且應該保護您的 WordPress 產品免受濫用的一些方法。 如果您有任何疑問,請記住——不要相信任何人