include "../admin/site.php"; // Setup db connection.
$appid = -1;
if (is_string($_GET["id"]))
{
$id = mysql_real_escape_string($_GET["id"]);
$sql = "select * from version where id=$id";
$ver = mysql_query($sql);
if ($id > 0 && $ver && mysql_num_rows($ver))
{
$appid = mysql_result($ver, 0, "AppID");
$app = DLookUp("apps", "name", "id=$appid");
$name = mysql_result($ver, 0, "Name");
$notes = mysql_result($ver, 0, "Notes");
}
else $app = "No version by that ID";
}
else $app = "No ID";
/* some html snipped */
if (isset($app) && isset($name))
echo $app . " v" . $name;
else
echo "v###";
/* some html snipped */
if (isset($appid))
{
$url = "/" . DLookUp("apps", "Page", "id=$appid");
echo "<a href=\"$url\">Up</a> to $app...";
}
if (isset($notes))
echo $notes;
不知何故,这段代码允许某人查看我数据库的全部内容。我本以为 mysql_real_escape_string 会阻止这种攻击?我可以将 $id 转换为一个整数,这应该可以解决问题,但我想了解我在这里做错了什么,所以我不会继续重复我的错误。
我认为问题的一部分是你没有使用引号$id
,因此攻击者可能会发送一个 id 值,即1 OR 1=1
执行的 SQL 为:
select * from version where id=1 OR 1=1
mysql_real_escape_string()
仅转义 NULL、换行符和引号(\x00、\n、\r、\、'、" 和 \x1a),因此如果不引用变量,则没有什么帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)