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;
Run Code Online (Sandbox Code Playgroud)
不知何故,这段代码允许某人查看我的数据库的全部内容.我以为mysql_real_escape_string会阻止那种攻击吗?我可以将$ id转换为一个应该解决问题的整数,但是我想知道我在这里做错了什么,所以我不会一直重复我的错误.
我认为问题的一部分是你没有使用引号$id,所以攻击者可能会发送id的值,1 OR 1=1而执行的SQL将是:
select * from version where id=1 OR 1=1
Run Code Online (Sandbox Code Playgroud)
mysql_real_escape_string() 只转义NULL,换行符和引号(\ x00,\n,\ r,\,','和\ x1a),因此如果不引用变量,它几乎没有帮助.
| 归档时间: |
|
| 查看次数: |
405 次 |
| 最近记录: |