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

发布时间:2026/9/30 7:40:30
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防护线上系统只有建立多层防护才能在面对异常访问时保持稳定。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询