我只是浏览了一些代码,并确保所有用户输入都是通过mysql_real_escape_string()进行的,以防止sql注入。对于通过PHP的md5()函数运行的密码输入,是否仍然需要mysql_real_escape_string(0 )?似乎编码过程将消除潜在的注入攻击。
发布于 2011-08-03 18:10:54
事实上,是和不是。
如果您将的第二个参数设置为true --这将生成原始的md5哈希,则只需要来使用md5()。
否则,从md5($password)之类的东西返回的唯一数据将是一个与regexp /[a-z0-9]{32}/i匹配的字符串哈希--它不需要对进行转义。
这些人解释了为什么以及如何利用原始的md5散列:
http://cvk.posterous.com/sql-injection-with-raw-md5-hashes
发布于 2012-12-20 21:39:11
mysql_real_escape_string()和其余的mysql_xxx()函数现在不再推荐使用。它们被认为是过时和不安全的,并且已经有一段时间没有被推荐使用了。即将发布的PHPV5.5将正式否决它们,但是您应该尝试停止使用它们,即使您还没有计划升级到5.5。有关这方面的更多信息,请参见Why shouldn't I use mysql_* functions in PHP? .正如我所说,MD5是不安全的,人们为自己编写的大多数解决方案也是不安全的。哈希密码的最佳解决方案是使用一个高质量的库来完成您的工作。PHP5.5将包括一组专门编写的密码处理函数,这将使整个操作更容易保持安全。还有一个版本的这个库已经被移植到PHP5.3或5.4中。您可以从这里下载此backport版本:https://github.com/ircmaxell/password_compat
此时,这可能是PHP中可用的密码存储的唯一最佳解决方案。我强烈建议你使用它。
https://stackoverflow.com/questions/6931016
复制相似问题