你能展示这段代码的 SQL 注入示例吗?
Can you show examples of SQL Injection on this code?
我的朋友是 PHP 概念的新手(我也是),他开发了下面的代码。我知道它很脆弱,我告诉他我可以在他的数据库上做一些事情,比如弄乱其他表,更新其他值等。
代码的漏洞部分是一个 INPUT,他将其用于普通搜索。这不是登录。
$email = filter_input(INPUT_GET, 'email');
if ($email != '') {
$stm = $db->query("SELECT * from clients WHERE email = '$email'");
$result = $stm->fetchAll();
}
问题是我做不到,因为 query() 每个查询只允许一个语句。有没有办法弄乱他数据库中的任何重要内容? (这对我来说是一个挑战,要在实践中证明他的错误)
select 查询不能使用任何 SQL 注入修改数据,但它可以很容易地用于回显来自不同表的数据(如用户名和密码)。
在此处阅读第二个和第三个示例:
PHP's manual regarding sql injection
使用您的代码很容易修改 SQL 查询的条件。
通过使条件始终为真,我可以轻松获得所有客户:
http://localhost/inject.php?email=Client 1' OR '1'='1
我什至可以从另一个人那里读到细节table:
http://localhost/inject.php?email=Client 1' UNION SELECT * FROM articles WHERE '1' = '1
这完全取决于您以后如何处理结果,但正如我在这两个简单示例中所示,最好保护自己。
我的朋友是 PHP 概念的新手(我也是),他开发了下面的代码。我知道它很脆弱,我告诉他我可以在他的数据库上做一些事情,比如弄乱其他表,更新其他值等。
代码的漏洞部分是一个 INPUT,他将其用于普通搜索。这不是登录。
$email = filter_input(INPUT_GET, 'email');
if ($email != '') {
$stm = $db->query("SELECT * from clients WHERE email = '$email'");
$result = $stm->fetchAll();
}
问题是我做不到,因为 query() 每个查询只允许一个语句。有没有办法弄乱他数据库中的任何重要内容? (这对我来说是一个挑战,要在实践中证明他的错误)
select 查询不能使用任何 SQL 注入修改数据,但它可以很容易地用于回显来自不同表的数据(如用户名和密码)。
在此处阅读第二个和第三个示例: PHP's manual regarding sql injection
使用您的代码很容易修改 SQL 查询的条件。
通过使条件始终为真,我可以轻松获得所有客户:
http://localhost/inject.php?email=Client 1' OR '1'='1
我什至可以从另一个人那里读到细节table:
http://localhost/inject.php?email=Client 1' UNION SELECT * FROM articles WHERE '1' = '1
这完全取决于您以后如何处理结果,但正如我在这两个简单示例中所示,最好保护自己。