ARTICLE DETAIL

资讯详情

深耕商务建站与企业官网运营的一线实战洞察。

PHP 实战:网站突然出现大量恶意请求怎么办?从Nginx防护到PHP安全加固完整方案

PHP 实战:网站突然出现大量恶意请求怎么办?从Nginx防护到PHP安全加固完整方案 一、问题背景网站访问正常但服务器压力突然升高最近维护一个 PHP 内容管理系统运维发现网站没有明显业务增长但是服务器请求量突然增加。监控服务器 CPU90% 内存正常 访问量 平时 5000次/小时 异常 20万次/小时用户访问首页 偶尔打不开 后台 登录缓慢二、问题定位发现大量异常URL请求查看 Nginx access.logtail -f /var/log/nginx/access.log发现GET /admin/login.php GET /wp-login.php GET /config.php GET /api/test.php大量重复访问。特点请求路径不存在IP数量很多请求频率异常三、为什么恶意请求会影响PHP很多 PHP 项目所有请求都会进入程序。流程用户请求 ↓ Nginx ↓ index.php ↓ PHP初始化 ↓ 数据库连接 ↓ 返回404即使页面不存在也消耗PHP进程CPU数据库连接四、第一步静态错误请求不要进入PHP错误架构不存在文件 ↓ PHP处理 ↓ 返回404优化Nginx直接处理。配置location / { try_files $uri $uri/ /index.php?$query_string; }效果真实文件直接返回。不存在统一处理。五、第二步限制单IP访问频率如果一个IP一分钟请求几千次。需要限制。Nginxlimit_req_zone $binary_remote_addr zonereq_limit:10m rate10r/s;使用location /api/ { limit_req zonereq_limit burst20 nodelay; }效果超过频率排队或者拒绝。六、第三步限制连接数量防止一个客户端建立大量连接。配置limit_conn_zone $binary_remote_addr zoneaddr:10m;使用location / { limit_conn addr 20; }七、第四步禁止访问敏感文件很多攻击扫描配置文件。例如.env .git config.php backup.sql禁止location ~ /\.(git|env) { deny all; }八、第五步PHP关闭危险功能查看php -i | grep disable_functions配置disable_functions exec, shell_exec, system, passthru避免WebShell执行系统命令。九、第六步上传文件安全处理很多漏洞来自文件上传。错误move_uploaded_file( $file, upload/.$name );问题用户可能上传PHP文件。例如shell.php优化限制后缀$allow[ jpg, png, webp ];检测$ext pathinfo( $file, PATHINFO_EXTENSION ); if(!in_array($ext,$allow)){ exit(禁止上传); }十、防止上传目录执行PHP即使上传也不能执行。Nginxlocation /upload { location ~ \.php$ { deny all; } }十一、第七步SQL注入防护危险$sql SELECT * FROM user WHERE id.$id;攻击?id1 OR 11使用预处理$stmt$pdo-prepare( SELECT * FROM user WHERE id? ); $stmt-execute([$id]);十二、第八步XSS攻击防护危险echo $_GET[name];攻击scriptalert(1)/script输出过滤echo htmlspecialchars( $name, ENT_QUOTES, UTF-8 );十三、第九步CSRF防护场景用户登录后台。攻击页面自动提交请求。解决Token。生成$_SESSION[csrf] bin2hex( random_bytes(16) );提交验证Token。十四、第十步增加安全响应头Nginxadd_header X-Frame-Options SAMEORIGIN; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection 1; modeblock;减少浏览器攻击风险。十五、日志分析定位攻击来源统计IPawk {print $1} access.log | sort | uniq -c | sort -nr查看请求最多IP。分析IP 1.1.1.1 请求 50000次然后结合防火墙处理。十六、使用CDN/WAF进行前置过滤架构用户 ↓ CDN/WAF ↓ Nginx ↓ PHP攻击请求在入口过滤。减少服务器压力。十七、生产环境常见错误1. 只靠PHP判断攻击问题请求已经消耗资源。应该前置过滤。2. 上传目录直接执行PHP风险上传漏洞。3. 数据库账号权限过高错误root账号运行网站应该使用业务账号。4. 错误日志暴露生产环境禁止显示详细错误。配置display_errorsOff log_errorsOn十八、上线前安全检查清单Nginx✅ 请求限速✅ 限制连接✅ 禁止敏感文件PHP✅ 关闭危险函数✅ 输入过滤✅ 错误隐藏数据库✅ 预处理SQL✅ 最小权限账号✅ 定期备份上传✅ 文件类型限制✅ 上传目录禁止执行PHP十九、优化效果优化前大量异常请求 ↓ PHP全部处理 ↓ 服务器资源耗尽 ↓ 网站卡顿优化后请求进入 ↓ Nginx过滤 ↓ 恶意请求拦截 ↓ PHP处理正常业务总结PHP网站安全不是只靠代码。完整防护需要Nginx限流 PHP安全配置 SQL防注入 上传保护 日志监控 CDN/WAF防护线上系统只有建立多层防护才能在面对异常访问时保持稳定。
返回列表
PREV
查看更多资讯
NEXT
返回资讯列表