2

我已经使用RIPS来测试我的代码是否存在 SQL 注入威胁。这是其中之一:

    Userinput reaches sensitive sink due to insecure usage of mysql_real_escape_string() without quotes (Blind exploitation)
370: mysql_query mysql_query("INSERT INTO `members` (`Username`, `Password`, `Name`, `AccessLevel`, `LastLogin`) VALUES ('" . mysql_real_escape_string($user) . "', '" . mysql_real_escape_string($pass) . "', '" . mysql_real_escape_string($fuln) . "', '" . mysql_real_escape_string($al) . "', '" . mysql_real_escape_string($now) . "');"); 
364: $user = htmlentities($_POST['user'], ENT_QUOTES); 
365: $pass = htmlentities(md5($_POST['pass']), ENT_QUOTES); 
366: $fuln = htmlentities($_POST['fuln'], ENT_QUOTES); 
367: $al = htmlentities($_POST['al'], ENT_QUOTES); 
368: $now = time(); 
requires:
359: if($action == "newadmin")
360: if($memberinfo['AccessLevel'] == 3)
363: if($_GET['submit'] == "new")
369: if($user && $pass && $fuln)

有人可以向我解释为什么这段代码容易受到 SQL 注入的攻击吗?我认为这要么是因为缺乏知识,要么是误报。我一直在研究,但我找不到任何新的东西,我似乎在绕圈子。

4

1 回答 1

1

这必须是误报。描述的问题是当您使用 时mysql_real_escape_string(),但您不能确保结果用引号引起来。我检查了,你的字符串是正确封闭的。

但是您应该注意,该mysqlAPI 自 PHP 5.5.0 起已弃用,您应该使用mysqliorPDO MySQL代替。

编辑:另请注意,根据评论,使用md5根本不安全,您应该在生成哈希之前通过将密码连接到密码来对其进行加盐。如果你给它加盐,入侵者不能简单地使用预先构建的哈希字典来获取密码,他们需要专门创建一个包含你的盐的新字典

于 2013-10-01T09:45:08.800 回答