PHP代码安全防护指南:常见漏洞与修复方案详解
PHP代码安全防护:为什么你的网站总在被扫描?
在万图素材后台每天都能看到大量针对PHP站点的恶意探测请求。很多站长拿到网站源码后直接部署,却忽略了最基础的安全加固——这往往就是被入侵的起点。根据OWASP 2023年数据,SQL注入和文件上传漏洞仍占PHP应用攻击面的63%以上。今天我们从真实攻击案例出发,拆解最常见的几个致命隐患。
漏洞一:SQL注入——你的查询语句真的安全吗?
很多从网上下载的PHP教程里,还在用老旧的`mysql_query`拼接变量。比如`$_GET['id']`直接拼进WHERE子句,攻击者只需在URL后加`' OR 1=1--`就能拖走整个用户表。修复方案很简单:PDO预处理语句是底线。绑定参数后,数据库引擎会严格区分代码和数据,彻底阻断注入路径。另外,建议启用`mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT)`,让错误信息不直接回显给前端——这能防止攻击者通过报错内容逆向数据库结构。

文件上传漏洞:看似无害的图片也可能是个后门
设计素材站、模板下载站这类平台,文件上传功能是刚需。但很多JS代码只在前端校验了文件扩展名,攻击者用Burp Suite改包就能上传`shell.php.jpg`这类畸形文件。正确的做法是:服务端白名单校验MIME类型,同时用`getimagesize()`检测图片文件头,再加上`move_uploaded_file`后立即重命名并剥离可执行权限。如果业务允许,最好把上传目录放到Web根目录之外,通过路由脚本读取。
- 禁用危险函数:在`php.ini`中关闭`eval`、`assert`、`preg_replace`的/e修饰符
- 日志监控:开启`log_errors=On`并定期审计`error_log`,异常堆栈往往是攻击的前兆
XSS与CSRF:为什么你的管理后台总被篡改?
从网站模板市场买来的后台,如果没做输出转义,攻击者提交一个``到评论区,管理员一打开就被窃取Cookie。这里有个容易被忽略的细节:**富文本编辑器场景下不能简单用`htmlspecialchars`**,需要配合HTML Purifier这类白名单过滤库。同时,所有表单操作必须校验CSRF Token——特别是修改密码、删除数据的接口,建议用`random_bytes()`生成Token并设置短有效期。

实战排查清单:上线前必查的5个高危点
- 检查`phpinfo()`是否可公开访问——生产环境必须禁用
- 确认`session.cookie_httponly`和`session.cookie_secure`均为On
- 扫描源码中是否存在`system()`、`exec()`等命令执行函数
- 验证所有上传文件是否被强制重命名(含随机字符串)
- 测试登录接口是否有频率限制(未做防爆破的站点平均存活时间不足72小时)
另外提一句,从万图素材下载的程序源码,如果自带安装向导,务必在部署后删除`install/`目录。很多攻击者就是扫描`install/index.php`重装页面来获取数据库控制权的。
安全是持续对抗的过程。建议每季度用Composer更新依赖,关注PHP官方发布的Security Advisories。今天的防护指南主要针对中小站点常见短板,如果你的业务涉及支付或用户隐私数据,建议直接联系专业安全团队做渗透测试。代码安全没有一劳永逸,但至少把基础坑填上,能挡住90%的脚本小子。