贝利信息

如何防止sql注入_mysql安全写法

日期:2025-12-24 00:00 / 作者:P粉602998670
防止SQL注入的核心是永远不拼接用户输入到SQL字符串中,应使用参数化查询、输入校验、最小权限原则、关闭错误信息暴露并启用日志审计。

防止 SQL 注入的核心是:**永远不拼接用户输入到 SQL 字符串中**。MySQL 安全写法的关键在于使用参数化查询(预处理语句),配合合理的权限控制与输入校验。

用预处理语句(Prepared Statements)代替字符串拼接

这是最有效、最通用的防御手段。PHP、Python、Java 等主流语言都支持 MySQL 的预处理接口,它把 SQL 结构和数据严格分离。

$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ? AND status = ?");
$stmt->execute([$user_input, 1]);
$result = $stmt->fetchAll();
$username = $_GET['name'];
$sql = "SELECT * FROM users WHERE username = '$username'"; // 用户输 ' OR 1=1 -- 就完蛋
$pdo->query($sql);

明确字段类型,对输入做基础校验

预处理能防注入,但不能替代业务逻辑校验。比如 ID 应为整数、手机号应匹配格式、用户名不应含 SQL 特殊符号等。

最小权限原则配置数据库账户

应用连接 MySQL 时,不要用 root 或高权限账号。按需分配权限:

关闭错误信息暴露,启用日志审计

生产环境必须关闭详细 MySQL 错误输出(如 “You have an error in your SQL syntax…”),否则会泄露表名、字段名甚至服务器路径。