PHP密码的安全性
时间:2007-11-25
来源:互联网
任何数据都不是绝对安全的,想想任何人都可以接触你的服务器(是不是有公司替你管理服务器?),接触你的数据库(是不是有公司替你备份数据?),但你对此却无能为力。也就是说你的数据库被偷的机会是很大的。那么,最简单的(安全措施)就是对用户的登陆密码加密。
哈希方法(Hashing)
Hash是将原密码运用单向算法运算后得出的字符串。换句话说,就是加密很容易,解密极困难(如果应用得法,解密几乎不可能)。 先将加密结果(Hash)放在数据库里,当用户登录时,可将其登录密码加密(Hash)后,再与之前放在数据库中的结果比对。如下例
代码:
if( $user->passwordhash == sha1( $_POST['password'] ) )(shal : Secure Hash Algorithm .译者注)
代码:
if( $user->passwordhash == hash( 'whirlpool', $_POST['password'] ) )但还有个问题,偷窃者偷取数据库后,就有大量的时间使用彩虹表来破解。其原理是将常用词(比如从字典中提取每个词)加密后的字符串比对数据库里的字符串。
用不了个把小时,近半的密码可能已被破解。
防范措施就是在每个密码加密时增加一段随机产生的字符(可叫其变形算法或随便什么)。耗时的彩虹表攻击法是基於字典的词。要破解加料后的密码,就要根据增加的每一个字符重建一本字典,攻击会因太耗时而不能成事。每个密码都要附加一段不同的字符,字符本身就根本不用加密。
例子
安全加密方法如下
代码:
// get a new salt - 8 hexadecimal characters long// current PHP installations should not exceed 8 characters
// on dechex( mt_rand() )
// but we future proof it anyway with substr()
function getPasswordSalt()
{
return substr( str_pad( dechex( mt_rand() ), 8, '0',
STR_PAD_LEFT ), -8 );
}
// calculate the hash from a salt and a password
function getPasswordHash( $salt, $password )
{
return $salt . ( hash( 'whirlpool', $salt . $password ) );
}
// compare a password to a hash
function comparePassword( $password, $hash )
{
$salt = substr( $hash, 0, 8 );
return $hash == getPasswordHash( $salt, $password );
}
// get a new hash for a password
$hash = getPasswordHash( getPasswordSalt(), $password );
最后,正如Thomas Ptacek说的,你没必要用世界上最快的算法来加密,它是留给攻击者用的。
(译者注:原文和对比翻译见英文版)
作者: goodonyou 发布时间: 2007-11-24
作者: PHPChina 发布时间: 2007-11-24
作者: dzjzmj 发布时间: 2007-12-12

作者: PHPChina 发布时间: 2007-12-12



作者: luzhou 发布时间: 2007-12-12
作者: MoHock 发布时间: 2007-12-12
作者: s36376149 发布时间: 2007-12-15

作者: gently 发布时间: 2007-12-16
引用:
原帖由 lxylxy888666 于 2007-12-16 12:33 发表

作者: lxylxy888666 发布时间: 2007-12-16
比如Discuz论坛,在客户端有个cdb_auth的cookie,里面包含了用户id、md5后的密码、所属组信息,这个cdb_auth在服务器端加密后再用base64编码。客户端每次请求,Discuz会解密这个Cookie,用于验证身份。
Discuz可逆加密的核心东西是非常简单的XOR过程,只是对XOR算子的生成下了很大心思。感兴趣的可以去看下我以前写的介绍:http://blog.csdn.net/carche/archive/2007/06/23/1663829.aspx
最后说一下,Discuz没有采用SessionId来保存用户信息是有道理的,是为了防止cookie欺骗。
作者: luzhou 发布时间: 2007-12-17
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28