php编写一个get方法的有sql漏洞的题
时间: 2024-05-08 15:21:05 浏览: 22
以下是一个可能存在 SQL 漏洞的 PHP GET 方法示例:
```
<?php
$db = mysqli_connect("localhost", "username", "password", "database");
if ($_SERVER["REQUEST_METHOD"] == "GET") {
$id = $_GET["id"];
$query = "SELECT * FROM users WHERE id=" . $id;
$result = mysqli_query($db, $query);
if ($result) {
while ($row = mysqli_fetch_assoc($result)) {
echo "Name: " . $row["name"] . "<br>";
echo "Email: " . $row["email"] . "<br>";
}
} else {
echo "Error: " . mysqli_error($db);
}
mysqli_close($db);
}
?>
```
在上面的示例中,如果攻击者将 `id` 参数设置为一个 SQL 查询,则可能会导致 SQL 注入攻击。例如,攻击者可以通过在 URL 中输入 `id=1'; DROP TABLE users; --` 来删除 `users` 表。
要防止 SQL 注入,应该使用参数化查询或转义用户输入。例如,在上面的示例中,可以使用 `mysqli_real_escape_string` 函数对 `$id` 进行转义,即:
```
$id = mysqli_real_escape_string($db, $_GET["id"]);
```
或者,可以使用参数化查询,即:
```
$query = "SELECT * FROM users WHERE id=?";
$stmt = mysqli_prepare($db, $query);
mysqli_stmt_bind_param($stmt, "i", $_GET["id"]);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
```