我正在浏览一些代码并确保所有用户输入都是通过mysql_real_escape_string()进行符文以防止sql注入。对于通过PHP的md5()函数运行的密码输入,是mysql_real_escape_string(0仍然需要?看起来编码过程可以摆脱潜在的注入攻击。
答案 0 :(得分:2)
实际上,是和否。
如果您将mysql_real_escape_string()
的第二个参数设置为md5()
,则只有 才能使用true
RAW md5哈希。
否则,从md5($password)
之类的内容返回的唯一数据将是与此正则表达式/[a-z0-9]{32}/i
匹配的字符串哈希 - 这不是 需要 强>逃脱。
这些人解释了为什么以及如何利用原始md5哈希:
答案 1 :(得分:2)
MD5 不足以保证密码安全 - MD5是一种容易被黑客攻击的旧算法;如果您使用MD5进行散列密码,您可能根本不使用任何东西。目前的最佳做法建议是使用bcrypt算法。
mysql_real_escape_string()
以及其他mysql_xxx()
函数现已弃用。它们被认为是过时和不安全的,现在还没有被推荐使用。即将推出的PHP v5.5将正式弃用它们,但即使您不打算升级到5.5,也应该尝试停止使用它们。有关详情,请参阅Why shouldn't I use mysql_* functions in PHP?。
正如我所说,MD5并不安全,也不是人们为自己写的大多数解决方案。散列密码的最佳解决方案是使用高质量的库来为您完成工作。 PHP 5.5将包含一组专门编写的密码处理函数,这将使整个事情更容易保持安全。还有一个版本的这个库已被反向移植到PHP 5.3或5.4中。您可以从此处下载此backport版本:https://github.com/ircmaxell/password_compat
目前,这可能是PHP中可用的密码存储的最佳解决方案。我强烈建议你使用它。