用变量拼接 SQL(SQL 注入)
为什么危险
把输入拼接进 SQL,攻击者就能改写查询本身,读取、修改或删除数据库中的任何数据。预处理语句将查询与参数分开发送,输入永远不会变成 SQL。
$id = $_GET['id'];
$rows = $db->query("SELECT * FROM users WHERE id = $id");
$stmt = $db->prepare('SELECT * FROM users WHERE id = ?');
$stmt->execute([$_GET['id']]);
$rows = $stmt->fetchAll();
修复方法
使用预处理语句:$db->prepare('... WHERE id = ?'),再 execute([$id])。
扫描我的代码
扫描我的代码 →
粘贴文件,PHP Safe 会指出所有符合此规则的代码行。