gpt4 book ai didi

PHP 5.4 SQL 注入(inject)

转载 作者:行者123 更新时间:2023-11-29 13:01:58 25 4
gpt4 key购买 nike

我正在尝试创建一个简单的 php 页面来演示 SQL 注入(inject)。

<?php
...

if ($_POST) {
$user = $_POST['user'];

if ($result = $db->query("SELECT * FROM users WHERE username ='" . $user . "'")) {
// display result array
} else {
// invalid query
}
}

...
?>

我注入(inject) html 输入的代码是 whatever"OR 1=1; DROP TABLE users; -- 但它总是触发无效的查询 block 。我怎样才能欺骗脚本思考这个 SQL 有效吗?

最佳答案

How can I trick the script into thinking this SQL is valid?

你不能欺骗它认为它是有效的 SQL。实际上,您必须使其有效的 SQL。

当您回显生成的 SQL 语句以查看实际结果时可能会有所帮助:

$stmt = "SELECT * FROM users WHERE username ='" . $user . "'";
echo $stmt;
if ($result = $db->query($stmt)) {
// …
}

由于注入(inject)发生在 MySQL string literal ,您必须提供允许您转义该字符串文字的 SQL 片段。由于字符串文字括在单引号内,因此单个单引号将表示结束分隔符,并且任何后续数据不再解释为字符串:

user: whatever' OR '1'='1

这将导致:

SELECT * FROM users WHERE username ='whatever' OR '1'='1'
# \_________________/
# injected

请注意mysqli::query只执行一条语句。这就是第二条语句导致错误的原因。因此第二个 DROP TABLE 语句示例在这里不起作用。

关于PHP 5.4 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23214238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com