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)验证是否为合法整数。

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

巧文书
巧文书

巧文书是一款AI写标书、AI写方案的产品。通过自研的先进AI大模型,精准解析招标文件,智能生成投标内容。

下载

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或暴露于公网。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

1681

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1116

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1020

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

948

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1396

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1227

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1438

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1302

2023.11.13

笔记本电脑卡反应很慢处理方法汇总
笔记本电脑卡反应很慢处理方法汇总

本专题整合了笔记本电脑卡反应慢解决方法,阅读专题下面的文章了解更多详细内容。

1

2025.12.25

热门下载

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

精品课程

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

共48课时 | 1.4万人学习

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

共3课时 | 0.3万人学习

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

共1课时 | 771人学习

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

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