0
我非常喜欢PDO。我想知道从SQL注入现在是安全的吗?注射是否安全?
$name = isset($_GET['name']) ? $_GET['name'] : null;
// Fetch some info
$stmt = $db->prepare("SELECT * FROM players WHERE name = ? AND account_id = ?");
$stmt->execute(array($name, $aid));
$row = $stmt->fetch();
if ($row) {
$stmt = $db->prepare("DELETE FROM players WHERE id = ?");
$stmt->execute(array($row['id']));
header("Location: /account");
exit();
} else {
header("Location: /account");
exit();
}
是的。在'?'中使用绑定参数可防止SQL注入。这并不意味着用户无法删除他们没有权限删除的记录。务必验证执行此操作的用户是否具有“name”值的权限。 (因为我们看不到任何与权限相关的代码 - 只是单挑) –
还值得注意的是,你可以直接在'DELETE'上放置'SELECT'的WHERE子句并添加一个'TOP 1 '或'LIMIT 1',具体取决于你的dbms,通过单个查询得到相同的结果。除非你在pdo交易中,否则你的代码很容易被并发修改。 – Dan