2011-08-03 52 views
0

我只是通过一些代码,并确保所有的用户输入符号通过mysql_real_escape_string()来防止sql注入。对于通过PHP的MD5 run()函数输入密码,是mysql_real_escape_string(仍需0?这似乎是在编码过程将摆脱潜在注入攻击。mysql_real_escape_string()仍然需要md5()?

回答

2

其实,yes和no。

你只有需要使用mysql_real_escape_string()如果你设置的md5()true第二个参数 - 其产生的RAW MD5哈希

否则,从东西回来像md5($password)的资料就只有一个字符串散列匹配这个章节exp /[a-z0-9]{32}/i - 哪个不需要需要要逃脱。

这些家伙解释为何以及如何利用原始MD5哈希值:

http://cvk.posterous.com/sql-injection-with-raw-md5-hashes

1
  1. MD5被足够的密码安全性 - MD5是一个古老的算法,这是很容易破解;如果你使用MD5来散列密码,你可能根本不会使用任何东西。目前的最佳实践建议是使用bcrypt算法。

  2. 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可用的密码存储的最佳解决方案。我强烈建议你使用它。

相关问题