wordpress的用戶驗證以及密碼加密——phpass

wordpress作為一款博客型的CMS可以為很多小型信息服務的網站提供支持,通過wordpress我們可以快速搭建網站,也比較符合當前的創業開放需求。
隨著使用wordpress的時間增長,我們需求也發生了很多變化,這個時候我們可能希望自己開發一套系統來管理wordpress的內容。最近工作就是遇到了這樣的問題,自己的程序鏈接wordpress數據庫很簡單,唯一麻煩點的是用戶驗證,本片文章就討論一下wordpress是如何進行用戶驗證和密碼加密的。

密碼存儲wordpress數據庫的什么地方?

密碼在wordpress數據庫當中的wp_users表單的user_pass的字段當中。


密碼存儲位置

我們看到密碼是一堆亂碼生成的。非明文密碼是為了保證用戶數據安全。

密碼是如何加密的?

wordpress很早之前的加密方式是MD5,但是大家都知道MD5這種加密方式密碼被破解也只是個時間問題。


phpass

所以在wordpress當中使用了phpass加密的方式,用phpass加密過的密碼每次得到的結果都不一樣,所以這就意味著撞庫的成本會增加,(其實就2016年的計算水平來說已經很那了),加密的密碼當中會使用Blowfish,還會添加隨機的salt拼合到密碼當中。導致每次計算出來的密碼都是隨機的。(很想給大家科學的解釋一下,無奈筆者數學水平真的不行,這個加密邏輯還要多次迭代挺復雜的)

如何進行用戶驗證?

在wordpress當中程序使用wp_hash_password()函數進行密碼驗證。

wp_hash_password()

我們看到它使用了class-phpass.php這個類。
當然即便密碼生成方式很復雜,驗證還是沒有問題的,首先我們就需要在wp-includes文件夾當中找到wordpress用的類,因為這個類被wordpress稍微修改過,所以為了正確連接到wordpress數據庫進行驗證我們直接復制這個類,當然如果你用于自己的數據庫加密也可以直接從composer上安裝。

用法也比較簡單

phpass

引入phpass文件,(這里我改了名字,wordpress當中的名字是class-phpass.php)和wordpress當中wp_hash_password()函數的寫法類似就可以了。

$wp_hasher=new PasswordHash(8, TRUE);
$checkPassword=$wp_hasher->CheckPassword($password,$db_password);

先實例化這個類,實例化的時候其中參數8是迭代八次,wordpress默認就是讓密碼迭代8次,后面的true代表的是這個密碼是否是可移植的,如果不能移植我們的程序也就不能對wordpress的密碼進行驗證了。所以這里設置和wordpress的設置一樣就好。

下面的checkPassword()這個函數接受兩個參數,$password是我從post里得到的用戶輸入的密碼,$db_password是我從數據庫里直接抽取出來的密碼,讓這兩個密碼進行比對,組后可以返回true或者false。這樣就可以對用戶進行驗證了。

總結

基于wordpress開發自己的第三方應用,或者對wordpress進行整合的關鍵就是用戶驗證方面的內容。這里只要合理使用phpass類就可以解決用戶驗證的問題。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容