我知道SQL注入的基础知识以及如何避免它。 我知道我的代码容易受到攻击,但我正在尝试注入SQL,但它无法运行。这是关于知道它是如何易受攻击的,因为在实践中,我不能这样做。
这是代码:
$email = filter_input(INPUT_GET, 'email');
if ($email != '') {
try {
$stm1 = $db->query("SELECT * from clients WHERE email = '$email'");
$result = $stm1->fetchAll();
} catch (Exception $ex) {
echo $ex->getMessage();
}
}
我正试图通过此输入注入
<input id="textinput" name="email" type="text">
我使用的代码如下:
'; UPDATE clients set status = 0 WHERE client_id = 1
请注意,这是一个有效的SQL查询。
我真正的问题是:
答案 0 :(得分:3)
首先,$email = filter_input(INPUT_GET, 'email');
不执行与$email = filter_input(INPUT_GET, 'email', FILTER_DEFAULT);
相同的操作,FILTER_DEFAULT
被记录为“不执行任何操作”。
其次,PDO的Query函数确实支持多个语句(尽管使用方式相当烦人,我不能说我个人玩过它)。 PHP PDO multiple select query consistently dropping last rowset
第三,即使没有多语句支持,$email
也可以填充类似nobody@example.com' OR username='admin
的内容,以返回您未计划返回给用户的数据。
从根本上说:不再担心糟糕的代码是否可被利用,而是开始编写好的代码。开始使用准备好的语句,不再担心注射。