我知道旧的mysql密码功能(4.1之前版本)被认为是不安全的,但我不确定为什么。它被认为是不安全的具体原因是什么?
答案 0 :(得分:3)
根据MySQL docs on password hashing:
密码散列机制已在MySQL 4.1中更新提供 更好的安全性和降低密码被拦截的风险。
我不确定它是否意味着“减少密码被截获的风险”,或者它只是意味着它们更难破解,但主要区别在于产生的散列的大小。
4.1之前,散列大小为16个字节
从4.1+开始,散列大小为41个字节(*
+ 40个字节)。
相对于较大的散列函数,16字节散列非常小且易于发现冲突。 MD5通常被认为是强度不足的,它产生两倍--32个字节。相比之下,16个字节基本上是可悲的。为了比较:
pre-4.1 MySQL PASSWORD: 16 bytes
MD5: 32 bytes
SHA 1: 40 bytes
4.1+ MySQL PASSWORD: 41 bytes (40 bytes, prepended with an asterisk)
SHA-256: 64 bytes
SHA-512: 128 bytes
新的密码哈希方案与SHA-1相当,后者略好于MD5,但仍不足以推荐用于密码。
答案 1 :(得分:1)
根据:Old MySQL password cracking
使用旧密码格式创建一个16字节的哈希,例如:
6f8c114b58f2ce9e
对于相同的密码,MySQL4.1哈希长度为41个字节:
* 6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4
从表面上看,似乎授予了这种额外的安全级别 使用新密码可能不重要。但是,来源 代码已在允许的创意通用许可下发布 很快破解旧的MySQL密码。
密码'a @ 4~1b'的散列为2c28061c5bda971d。
使用上面提到的破解程序,这个密码可以 在一台2岁的笔记本电脑上以1秒钟的速度破解。
通过使用SQL注入攻击,用户可能会这样做 未经许可查看my.cnf文件。在搜索中输入此内容 如果是第二个,框可以在浏览器中呈现文件的内容 select语句中的param显示在屏幕上而不是 正确逃脱:
某事'UNION ALL SELECT 1,(选择 LOAD_FILE('/ etc / my.cnf')),3,4,5,密码来自用户ORDER BY'7
如果未经授权的用户能够拦截您的散列密码,则很容易强制它们并获取纯文本密码。复杂的密码仍然难以破解,但8个字符的密码将花费很少的时间。
由于更改了MySQL密码哈希的长度,因此强制散列哈希要困难得多。