【发布时间】:2015-12-08 07:28:27
【问题描述】:
我有一个我在 MYSQL 和 PHP 中创建的应用程序,据说 MYSQL 会受到 SQL 注入的影响——(我尊重这一点)但为什么呢?我的代码在这种情况下可以正常工作,或者有人可以证明我错了吗?
有一个包含 2 个字段、用户名和密码的表单,我将其发布在一个页面上。这是我的代码:
$user = stripslashes($user);
$pwd = trim($pwd);
$pwd = stripslashes($pwd);
$user = mysql_real_escape_string($user);
$pwd = mysql_real_escape_string($pwd);
$pwd = md5($pwd);
$rs = mysql_query("select * from `login` where upper(USER_ID) = upper('$user') AND PASS = '$pwd'");
我的用户名是管理员。
那么,那是我的代码,我在做转义,这怎么可能受到 SQL 注入?对于那些说 PDO 是未来的人来说,这是一个公开的挑战 :)。
谢谢。
【问题讨论】:
-
是时候跨入 21 世纪了。 MD5 也经历了更好的日子。
-
mysql_real_escape_string有很多方法。不过,它们通常涉及奇怪的 Unicode 字符。md5不安全,很确定制作它的人已经这么说了。 -
你真的不应该使用 MD5 密码哈希,你真的应该使用 PHP 的 built-in functions 来处理密码安全。如果您使用的 PHP 版本低于 5.5,您可以使用
password_hash()compatibility pack。 -
你可能仍然可以使用
mysql_函数,但 MD5 最终会咬你,比垃圾场的狗还难。 -
为什么?
mysql_API 有巨大的安全漏洞,一些功能,如mysql_real_escape_string()很容易被击败。一旦被击败,您可能会被介绍给Little Bobby Tables。此外,针对 MD5 的 hack 被广泛宣传,使得哈希非常容易被破解。
标签: php mysql mysqli pdo sql-injection