【发布时间】:2016-04-20 10:53:44
【问题描述】:
我知道你应该准备用户影响的所有 SQL 语句,这个问题更多的是看看你是否也可以有一个用户可以更改但你以不同方式处理错误的 SQL 查询。
可注入 SQL 的代码:
if(isset($_GET['delete']) && (int)$_GET['delete'] && is_numeric($_GET['delete'])){
$query = $handler->query('SELECT * FROM portfolio WHERE id =' . $_GET['delete']);
}
else{
echo'Error';
}
由于if 语句围绕它,SQL 查询会不会被注入,或者是否还有某种注入方式?
这纯粹是为了研究,显然不在任何真实的网站上。
这就是代码在准备时的样子,只是为了表明我不是询问如何准备:
if(isset($_GET['delete']) && (int)$_GET['delete'] && is_numeric($_GET['delete'])){
$query = $handler->prepare('SELECT * FROM portfolio WHERE id = :id');
$query->execute([
':id' => $_GET['delete']
]);
}
else{
echo'Error';
}
【问题讨论】:
-
如果使用参数化查询,您可以跳过该条件。在你的get变量中发送一个字符串只会导致没有匹配的行