問題描述

我正在開發一個外掛,我很可能會在公共外掛庫中釋出它,以便其他人可以使用它。

該外掛將使用 API​​並使用您需要傳遞使用者名稱和密碼的 API 。所以我的外掛需要將這些登入憑據儲存在資料庫中。我不想將它們儲存在純文字中,儘管 API 需要純文字。

所以我的問題是如何儲存這些敏感的資訊?雜湊是出來的,所以它必須是某種加密。

在 WordPress 中有一個可以使用的唯一鍵,這將不同於部落格到部落格?我應該使用哪些 php 函式進行加密和解密?我正在尋找的功能將更可能在所有的 WP 安裝。

最佳解決方案

雖然我同意以前的答案,為了回答你實際提出的問題,需要注意的是使用這些常量之一用於 wp-config.php:


define('AUTH_KEY',        'redacted');
define('SECURE_AUTH_KEY', 'redacted');
define('LOGGED_IN_KEY',   'redacted');
define('NONCE_KEY',       'redacted');

它們意味著在 Wordpress 安裝中是獨一無二的,並且是關於在 WordPress 中找到的 pre-existing 金鑰的唯一選項。替代的是新增您自己的類似的常量,它們透過將其中一個與管理員電子郵件地址或類似的方式進行雜湊建立,然後將其儲存在隱藏的設定選項中,以防止在您的密碼之後意外修改金鑰時丟失金鑰外掛已安裝。危險在於,如果在初始安裝時不是唯一的,但是管理員/站點所有者決定在事件發生之後糾正故障,則不應意外中斷您的密碼加密。

至於加密/解密功能 – 快速的 Google 搜尋返回以下列表,其程式碼似乎符合賬單:http://maxvergelli.wordpress.com/2010/02/17/easy-to-use-and-strong-encryption-decryption-php-functions/


function encrypt($input_string, $key){
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $h_key = hash('sha256', $key, TRUE);
    return base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $h_key, $input_string, MCRYPT_MODE_ECB, $iv));
}

function decrypt($encrypted_input_string, $key){
    $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
    $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
    $h_key = hash('sha256', $key, TRUE);
    return trim(mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $h_key, base64_decode($encrypted_input_string), MCRYPT_MODE_ECB, $iv));
}

這裡有一些 AES 加密檔案:http://www.chilkatsoft.com/p/php_aes.asp

次佳解決方案

這正是 OAuth 設計的情況。

OAuth homepage

For Service Provider developers…

If you’re supporting…

  • web applications
  • server-side APIs
  • mashups

If you’re storing protected data on your users’ behalf, they shouldn’t be spreading their passwords around the web to get access to it. Use OAuth to give your users access to their data while protecting their account credentials.

OAuth 的優點是您不需要儲存使用者的密碼。當他們第一次設定外掛時,他們被要求透過應用程式登入使用者名稱和密碼 (通常是與 API 同一個伺服器上託管的頁面,並載入在頁面重定向,thickbox 或者 iframe 中) 。

使用者登入後,伺服器 (您的系統) 將建立一個安全金鑰,使其系統 (WordPress) 可以使用該 API 與 API 進行介面。該金鑰對於使用者帳戶和站點是唯一的 – 並且它給予應用程式 (在 WordPress 上) 的許可權,以代表使用者身份執行 API,而不會每次都傳遞其身份驗證資訊。

如果你想看到一個這樣的例子,請檢視 Jetpack

當您啟用外掛時,它會抱怨其未連線。當您使用”connect” 時,您可以透過 WordPress.com 輸入憑據,並設定 WordPress 與其 API 之間的 OAuth 互動。

但您只需執行一次,並且您的 WordPress.com 使用者名稱/密碼永遠不會儲存在本地 WordPress 資料庫中。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。