提问人:badroit 提问时间:5/4/2021 更新时间:5/4/2021 访问量:98
创建易受多语句 SQL 注入攻击的 PHP 应用程序
Create a PHP application vulnerable to multi-statement SQL injections
问:
我正在尝试使用 PDO 在 PHP 中创建一个应用程序,该应用程序出于教育目的故意容易受到 SQL 注入的影响。基础数据库是 Postgres。
有了我,我可以很容易地演示样式注入,例如:pdo->query
' OR 1=1; --
$stmt = $pdo->query("SELECT amount FROM client.transactions WHERE clientid='". $id ."' ORDER BY amount DESC");
但是,如果我尝试用类似的东西捎带第二个语句,它不起作用,因为该语句在附加后作为准备好的语句发送,并且 Postgres 给出:'; UPDATE client.transactions SET amount=50000000 WHERE id=1; --
$id
SQLSTATE[42601]: Syntax error: 7 ERROR: cannot insert multiple commands into a prepared statement
理想情况下,代码会相当自然,因为我想与使用 .我想我需要的是类似的东西,但我可以在 Postgres 上运行,或者任何执行未准备好的 SQL 查询/语句的方法。pdo->prepare
mysqli::multi_query
答:
0赞
badroit
5/4/2021
#1
我找到了一个使用 pg_query
而不是 PDO 的解决方案。
$conn = pg_connect("host = ... port = ... dbname = ... user = ... password = ...");
$stmt = pg_query($conn, "SELECT amount FROM client.transactions WHERE clientid='". $id ."' ORDER BY amount DESC");
while ($row = pg_fetch_assoc($result))
{
// ...
}
这容易受到样式攻击。'; UPDATE client.transactions SET amount=50000000 WHERE id=1; --
评论
1赞
Nick
5/4/2021
严格来说,这不符合“我正在尝试使用 PDO 在 PHP 中创建应用程序”的问题要求。
0赞
badroit
5/5/2021
@Nick,这是真的,因此我没有接受答案。但这是一个合理的选择。如果使用 PDO 有一个看起来很自然的答案,我宁愿接受那个答案(尽管我没有找到解决方案并且怀疑存在一个,除了人为地解析语句之外)。;
评论