0

0

PHP增删改查怎么防止SQL注入_php防注入技巧【安全】

星夢妙者

星夢妙者

发布时间:2025-12-25 21:31:02

|

416人浏览过

|

来源于php中文网

原创

防止sql注入应优先使用预处理语句(pdo或mysqli),辅以输入验证、禁用危险函数、最小权限数据库账户配置。

php增删改查怎么防止sql注入_php防注入技巧【安全】

如果在PHP中执行数据库增删改查操作时直接拼接用户输入的数据,则极易导致SQL注入攻击。以下是防止SQL注入的多种安全实践方法:

一、使用预处理语句(PDO)

预处理语句将SQL逻辑与用户数据分离,数据库驱动会自动对参数进行转义和类型绑定,从根本上杜绝SQL注入可能。

1、创建PDO连接并设置错误模式为异常模式:setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)

2、编写带占位符的SQL语句,例如:INSERT INTO users (name, email) VALUES (?, ?)

立即学习PHP免费学习笔记(深入)”;

3、调用prepare()方法获取PDOStatement对象。

4、调用execute()方法传入参数数组,如['张三', 'zhang@example.com']

5、查询操作同样适用,fetch()fetchAll()获取结果前已确保参数安全。

二、使用预处理语句(MySQLi面向对象方式)

MySQLi也支持预处理机制,通过绑定参数实现数据与SQL结构隔离,避免字符串拼接带来的风险。

1、使用new mysqli()建立连接,并确认connect_error为null。

2、调用prepare()方法传入含问号占位符的SQL,例如:SELECT * FROM products WHERE id = ? AND status = ?

3、使用bind_param()绑定变量,第一个参数指定类型(如"is"表示整型+字符串),后续为对应变量。

4、执行execute()后,通过get_result()获取结果集。

5、更新、删除操作同理,仅需替换SQL语句类型与绑定参数即可。

三、严格过滤与验证输入数据

在SQL执行前对用户输入进行类型校验、长度限制和内容白名单检查,可作为预处理之外的补充防御层。

1、对ID类参数使用filter_var($id, FILTER_VALIDATE_INT)验证是否为合法整数。

百宝箱
百宝箱

百宝箱是支付宝推出的一站式AI原生应用开发平台,无需任何代码基础,只需三步即可完成AI应用的创建与发布。

下载

2、对邮箱字段使用filter_var($email, FILTER_VALIDATE_EMAIL)进行格式校验。

3、对用户名等字符串字段使用strlen()限制最大长度,并用ctype_alnum()或正则/^[a-zA-Z0-9_\x{4e00}-\x{9fa5}]+$/u限定字符范围。

4、对下拉菜单、单选按钮等可控值,采用in_array($input, $allowed_values, true)进行白名单比对。

5、拒绝处理空值、全空格、仅特殊符号等明显异常输入,直接中断后续数据库操作。

四、禁用危险函数与动态拼接

避免使用已知存在注入风险的函数组合,切断SQL注入的常见入口路径。

1、绝对禁止使用mysql_query()及其相关函数(该扩展已被PHP 7.0废弃且无预处理支持)。

2、禁止将用户输入直接嵌入SQL字符串,如"SELECT * FROM table WHERE name = '$name'"

3、禁用eval()create_function()assert()等可执行动态代码的函数。

4、关闭magic_quotes_gpc(PHP 5.4+已移除),因其自动转义不可靠且干扰预处理逻辑。

5、不依赖客户端JavaScript验证,所有校验必须在服务端重复执行。

五、最小权限数据库账户配置

即使代码存在疏漏,受限的数据库账户权限也能大幅降低SQL注入成功后的危害程度。

1、为Web应用单独创建数据库用户,避免使用root或具有ALL PRIVILEGES的账号。

2、仅授予当前业务必需的权限,例如只读页面仅分配SELECT,后台管理才附加INSERT/UPDATE/DELETE

3、禁止授予FILEEXECUTEPROCESSSUPER等高危权限。

4、限制用户可访问的数据库范围,使用GRANT ... ON database_name.* TO 'user'@'host'精确指定库名。

5、生产环境数据库监听地址应绑定内网IP,禁止绑定0.0.0.0或暴露于公网。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

1133

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

381

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

2152

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

380

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

1683

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

585

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

440

2024.04.29

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 2.5万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 848人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号