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()函数进行密码验证。
我们看到它使用了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类就可以解决用户验证的问题。
网友评论