PHP 中的这段代码如何容易受到 SQL 注入的攻击?
How is this code in PHP vulnerable to SQL Injection?
我了解 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 查询。
我真正的问题是:
- 在这种情况下,filter_input 是否阻止了任何事情?
- PDO '$query' 函数是否只允许一个语句?
- 如果这在这种情况下不易受攻击,是否还有其他情况会受到攻击?
首先,$email = filter_input(INPUT_GET, 'email');
与 $email = filter_input(INPUT_GET, 'email', FILTER_DEFAULT);
相同,不执行任何操作,FILTER_DEFAULT
记录为 "do nothing"。
其次,PDO 的 Query 函数似乎确实支持多语句(尽管使用方式相当烦人,我不能说我亲自玩过)。 PHP PDO multiple select query consistently dropping last rowset
第三,即使没有多语句支持,$email
也可以填充诸如 nobody@example.com' OR username='admin
到 return 之类的数据,而您并未计划 return用户。
从根本上说: 不要再担心糟糕的代码是否可以被利用,而是开始编写好的代码。开始使用正确准备的语句,不再担心注入。
我了解 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 查询。
我真正的问题是:
- 在这种情况下,filter_input 是否阻止了任何事情?
- PDO '$query' 函数是否只允许一个语句?
- 如果这在这种情况下不易受攻击,是否还有其他情况会受到攻击?
首先,$email = filter_input(INPUT_GET, 'email');
与 $email = filter_input(INPUT_GET, 'email', FILTER_DEFAULT);
相同,不执行任何操作,FILTER_DEFAULT
记录为 "do nothing"。
其次,PDO 的 Query 函数似乎确实支持多语句(尽管使用方式相当烦人,我不能说我亲自玩过)。 PHP PDO multiple select query consistently dropping last rowset
第三,即使没有多语句支持,$email
也可以填充诸如 nobody@example.com' OR username='admin
到 return 之类的数据,而您并未计划 return用户。
从根本上说: 不要再担心糟糕的代码是否可以被利用,而是开始编写好的代码。开始使用正确准备的语句,不再担心注入。