【发布时间】:2011-12-06 11:27:09
【问题描述】:
首先,我并没有试图破解或做任何非法的事情。以为我让你们知道。我有一个客户希望我对他的系统进行一些修改,当我查看它时,我注意到没有任何东西被逃脱。我不是在开玩笑,什么都没有逃脱。我向他解释说,拥有这样的系统是不安全的。然后他继续告诉我,他的系统像这样已经好几年了,但什么也没发生。我需要向他展示他的系统不安全,但我真的不知道执行 sql 注入。以下是一些使用 $_GET 且未转义的查询。
SELECT *,DATE_FORMAT(joined,'%M %d, %Y') as \"Joined\" FROM `members` WHERE `name` LIKE '".$ltr."%' ORDER BY points DESC LIMIT $page,50
这是另一个:
SELECT * FROM groups WHERE id=$thisladder[grid]
我看到“可能”清理 $_GET 的唯一内容是这个函数:
if (!ini_get('register_globals')) {
$superglobals = array($_SERVER, $_ENV,
$_FILES, $_COOKIE, $_POST, $_GET);
if (isset($_SESSION)) {
array_unshift($superglobals, $_SESSION);
}
foreach ($superglobals as $superglobal) {
extract($superglobal, EXTR_SKIP);
}
}
上面的函数可能正在清理变量。是的,系统还使用寄存器全局变量,这也很糟糕。
我也做了备份,以防万一。
【问题讨论】:
-
您想知道如何防止 SQL 注入,或者向您的客户证明它是不安全的吗?
-
哦,伙计,它们不仅不会逃避任何东西,而且如果
register_globals功能被禁用,它们会明确模拟它!这是第一次! -
不知道怎么证明。但我确实知道 mysql_real_escape 和prepared statements 是要走的路。
-
"...他的系统像这样已经好几年了,但什么也没发生。"按照同样的逻辑,他应该得出结论,“我以前从来没有出过车祸,所以我不需要系安全带。”
-
只是因为你的社交能力不够好,无法告诉你工作的人需要解决的问题,你需要从技术上解决这个问题吗?你最好从根本上解决你的问题。不要告诉其他人你不熟悉 SQL 注入。
标签: php sql sql-injection