Jer*_*via 3 phpunit zend-framework
现在我正在使用Zend Framework并搞乱那个和phpunit.这是我的困境.
当我创建用户时,我在用户表中散列密码.我添加了两种盐,一种来自应用程序的静态盐,另一种是随机生成的.我使用数据库SHA函数,然后使用UNHEX将密码存储在二进制列中.为了告诉数据库如何散列密码,我使用Zend_Db_Expr,如下所示:
protected function _createPasswordDbExpression( $password )
{
$quoted = $this->getDbTable()->getAdapter()->quoteInto( 'UNHEX( SHA1( ? ) )', $password );
$binaryPassword = new Zend_Db_Expr( $quoted );
return $binaryPassword;
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我一直在使用xml数据集来指定预期的结果,但现在,使用散列密码,我不知道该怎么做.
我看到了解决方案,但必须有更好的方法.
我可以预先输入密码或密码,并且只在我的测试期间和我的xml文件中使用它.
还有其他解决方案可能更好,更可测试吗?
当phpunit尝试直接插入"哈希"密码时,我不确切知道这个二进制列会如何影响事情.
首先,永远不要那样做.有权访问数据库查询历史记录的任何人都可以看到原始密码(它们将存储在二进制日志中).相反,在应用程序中对它们进行哈希处理,以便销毁原始密码.通过这样做,您的数据库功能只是一个值存储而不是需要单元测试的东西.
一旦你使它成为一个PHP函数,单元测试是微不足道的(只需使用多个标准测试向量中的任何一个来确保它被正确地散列.
但是,我强烈建议使用salt和派生函数来安全地存储密码.你可以在这个答案中看到原因.就确切的算法而言,我建议实施PBKDF2.我有一个PHP实现,你可以在这里进行逆向工程(这个库尚未生产,但该算法是).
最后,我建议使用SHA2算法之一而不是SHA1(SHA256或SHA512就足够了).它更具抗碰撞性,往往被视为明显更强......
| 归档时间: |
|
| 查看次数: |
960 次 |
| 最近记录: |