应使用预处理语句与参数化查询、MySQLi参数化查询、严格输入过滤验证、禁用危险函数与动态拼接、配置最小权限数据库账户五项措施防范SQL注入。

如果您的PHP应用程序直接将用户输入拼接到SQL查询中,则数据库可能面临SQL注入攻击的风险。以下是防止SQL注入的具体安全措施:
一、使用预处理语句与参数化查询
预处理语句将SQL逻辑与用户数据严格分离,数据库引擎在执行前先编译语句结构,再绑定参数值,从而彻底阻断恶意SQL代码的注入路径。
1、使用PDO创建预处理语句,调用prepare()方法传入含占位符的SQL字符串。
2、调用bindValue()或bindParam()方法为每个占位符绑定具体变量,确保类型与值被独立处理。
立即学习“PHP免费学习笔记(深入)”;
3、执行execute()方法运行已绑定参数的语句,此时用户输入仅作为数据值参与,不参与SQL语法解析。
二、使用MySQLi面向对象方式的参数化查询
MySQLi扩展支持面向对象接口,通过prepare()和bind_param()组合实现类型安全的参数绑定,强制区分SQL结构与数据内容。
1、实例化mysqli类并建立数据库连接。
2、调用prepare()方法传入带有问号占位符的SQL语句。
3、使用bind_param()指定参数类型(如"s"表示字符串、"i"表示整数)并传入对应变量。
4、调用execute()执行查询,数据库将自动转义并隔离所有绑定值。
三、严格过滤与验证输入数据
在接收用户输入后立即进行上下文相关的格式校验与白名单过滤,从源头剔除非法字符与非预期结构,降低误用风险。
1、对数字型参数使用is_numeric()或filter_var($input, FILTER_VALIDATE_INT)确认其为合法整数。
Angel工作室企业网站管理系统全DIV+CSS模板,中英文显示,防注入sql关键字过滤,多浏览器适应,完美兼容IE6-IE8,火狐,谷歌等符合标准的浏览器,模板样式集中在一个CSS样式中,内容与样式完全分离,方便网站设计人员开发模板与管理。系统较为安全,以设计防注入,敏感字符屏蔽。新闻,产品,单页独立关键字设计,提高搜索引擎收录。内置IIS测试,双击打启动预览网站 Angel工作室企业网站
2、对邮箱字段调用filter_var($email, FILTER_VALIDATE_EMAIL)验证格式有效性。
3、对用户名等标识符使用preg_match()配合白名单正则(如"/^[a-zA-Z0-9_]{3,16}$/")限制字符范围与长度。
四、禁用危险函数与动态拼接
避免使用mysql_query()、eval()、create_function()等已被废弃或可执行任意代码的函数;杜绝将$_GET、$_POST等超全局变量直接嵌入SQL字符串。
1、检查代码中是否存在类似"SELECT * FROM users WHERE id = " . $_GET['id'] 的字符串拼接模式。
2、将所有涉及SQL构建的字符串操作替换为预处理语句或ORM查询方法。
3、在开发环境中启用display_errors = On,并配置error_reporting(E_ALL),及时捕获并修正未过滤的变量引用。
五、最小权限数据库账户配置
应用程序所使用的数据库账户不应具备CREATE、DROP、ALTER、UNION SELECT、LOAD_FILE等高危权限,即使发生注入也难以造成结构性破坏。
1、登录数据库管理界面或使用命令行连接到MySQL服务端。
2、执行CREATE USER 'app_user'@'localhost' IDENTIFIED BY '强密码'语句新建专用账户。
3、仅授予该账户对目标数据库的SELECT、INSERT、UPDATE、DELETE权限,运行GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'app_user'@'localhost'。
4、执行FLUSH PRIVILEGES使权限变更立即生效。










