广州总部电话:020-85564311
广州总部电话:020-85564311
20年
互联网应用服务商
请输入搜索关键词
知识库 知识库

优网知识库

探索行业前沿,共享知识宝库

80%的PHP网站因权限漏洞被黑?3招根治部署安全痛点!

发布日期:2025-06-17 08:47:05 浏览次数: 822 来源:php的自我修养


商务合作加微信:2230304070 

学习与交流:PHP技术自我修养微信群 

自己维护的网站可自主下单自动发Ai assistant,Jetbrains全家桶独享代开与成品账号,正版激活码,Cursor工具激活,Idea部分付费插件比如:Laravel idea


有需要的可以看看:https://www.mano100.cn/thread-1942-1-1.html


以下文章正文

research and development


一、致命陷阱:777权限的毁灭性风险

# 错误示范:开放全局写入执行权限  
chmod-R777 /var/www/html  # 黑客可任意上传/执行恶意脚本  
  • 风险分析
  1. 黑客可上传WebShell控制服务器
  2. 敏感数据(数据库配置/用户信息)直接暴露
  3. 常见于外包项目/老旧系统,因"快速解决权限问题"而埋雷

真实案例:某电商站因runtime目录777权限,被植入挖矿脚本导致CPU爆满48小时。


》专题:phpstorm如何无限使用claude4 sonnet

二、安全部署黄金三法则

✅ 法则1:精准控制目录所有权

# 1. 将项目所有者设为Web服务用户(以Ubuntu+Nginx为例)  
sudochown-R www-data:www-data /var/www/project  

# 2. 将当前用户加入Web组(避免artisan/ftp操作失败)  
sudousermod-aG www-data $(whoami)# 当前用户加入www-data组  

关键解释

  • www-data
    Nginx/Apache默认运行用户(根据系统调整)
  • 避免直接使用root账户操作项目文件

✅ 法则2:按需分配目录权限

Laravel项目

# 仅开放storage和bootstrap缓存目录写权限  
sudochmod-R775 storage bootstrap/cache  
sudochgrp-R www-data storage bootstrap/cache  # 确保组权限  

ThinkPHP项目

# 仅开放runtime目录写权限  
sudochmod-R775 runtime  
sudochgrp-R www-data runtime  

权限分配原则

  • 代码目录(app/public等):755(禁止写入)
  • 缓存/日志目录:775(组内可写)
  • 配置文件:640(禁止执行)

✅ 法则3:封杀上传目录执行权限

Nginx防护配置

location ~ ^/(uploads|assets)/.*\.(php|jsp|py)${
deny all;# 禁止执行任何脚本
return403;
}

Apache防护配置(.htaccess):

<FilesMatch"\.(php|jsp|py)$">
<IfModule mod_authz_core.c>
Require all denied  
</IfModule>
<IfModule!mod_authz_core.c>
Order deny,allow  
Denyfrom all  
</IfModule>
</FilesMatch>

最佳实践
上传文件存储到云存储(OSS/S3),彻底隔离服务器执行风险:

// 阿里云OSS上传示例  
$ossClient->putObject('your-bucket','user_uploads/'.$fileName,$fileContent);

三、终极安全加固清单

四、为什么安全部署=程序员尊严?

“当黑客通过777权限植入后门,背锅的不是’PHP不安全‘,而是部署者的职业素养。”

  • 立即行动
  1. 扫描项目:find /path -type d -perm 777
  2. 使用PHPStan检测敏感函数(如eval/system
  3. 部署必装:ModSecurity(WAF防火墙)

五、深度防御:补充关键安全要点

1. 敏感文件隔离(防止源码泄露)

# 移动.env等配置文件到非Web目录  
mv .env /etc/php_project_conf/  
# 设置PHP仅允许访问指定目录(php.ini)  
open_basedir = /var/www/project:/tmp:/etc/php_project_conf  

风险场景

  • .env、config.php等文件被直接下载 → 数据库密码泄露
  • 解决方案
禁止访问.env(Nginx规则):
location ~ /\.env{
deny all;
return403;
}

2. 禁用危险PHP函数(php.ini配置)

disable_functions=exec,passthru,shell_exec,system,proc_open,popen,eval

为什么重要

  • 黑客通过文件上传漏洞调用system('rm -rf /') → 服务器瘫痪

3. 文件上传安全(超越基础权限控制)

// 强制重命名上传文件(避免.php.jpg绕过)  
$fileName=md5(uniqid()).'.'.pathinfo($uploadedName,PATHINFO_EXTENSION);
// 检查文件头(非扩展名欺骗)  
$allowedMimes=['image/jpeg'=>'jpg','image/png'=>'png'];
$fileInfo=finfo_open(FILEINFO_MIME_TYPE);
$mime=finfo_file($fileInfo,$tmpPath);
if(!isset($allowedMimes[$mime])){
thrownewException('非法文件类型!');
}

4. 目录监听与入侵检测(实时警报)

# 使用inotify监控关键目录(需安装inotify-tools)  
inotifywait -m-r /var/www/project/uploads -e create |
whileread path action file;do
if[["$file"=~\.php$ ]];then
echo"警报:上传了PHP文件! $path$file"| mail -s"入侵警报" admin@example.com  
fi
done

5. 隐藏PHP版本信息(防止针对性攻击)

# php.ini 配置  
expose_php=Off
# Nginx 隐藏PHP版本  
server_tokens off;  

效果

隐藏响应头中的X-Powered-By: PHP/7.4.3

六、自动化安全工具推荐

七、紧急响应:被入侵后的处理流程

立即隔离服务器
  • 断开外网访问,保留日志但不继续服务
取证分析

# 查找最近修改的PHP文件  
find /var/www -name"*.php"-mtime-1
# 检查可疑进程  
ps aux |grep-E'(wget|curl|sh|bash|nc|perl|python)'
修复步骤
  • 重置所有密码(数据库、SSH、FTP)
  • 使用Git纯净仓库覆盖被篡改文件

八、终极哲学:安全是一种习惯

每日检查清单

# 检查是否有777目录  
find /var/www -type d -perm777-ls
# 检查是否有可疑计划任务  
crontab-l&&ls-la /etc/cron.*  

记住:没有"暂时不安全"的服务器,只有"尚未被攻击"的服务器。

现在行动

# 一键生成安全报告(需root权限)  
awk -F: '($3 == "0") {print}' /etc/passwd &&\
find /var/www -perm -o+w -ls

(输出结果为空才是安全的!)



原文链接:
以上就是本篇文章的全部内容,希望各位程序员们努力提升个人技术。最后,小编温馨提示:每天阅读5分钟,每天学习一点点,每天进步一点点



点个赞


再走吧

优网科技,优秀企业首选的互联网供应服务商

优网科技秉承"专业团队、品质服务" 的经营理念,诚信务实的服务了近万家客户,成为众多世界500强、集团和上市公司的长期合作伙伴!

优网科技成立于2001年,擅长网站建设、网站与各类业务系统深度整合,致力于提供完善的企业互联网解决方案。优网科技提供PC端网站建设(品牌展示型、官方门户型、营销商务型、电子商务型、信息门户型、微信小程序定制开发、移动端应用(手机站APP开发)、微信定制开发(微信官网、微信商城、企业微信)等一系列互联网应用服务。


我要投稿

姓名

文章链接

提交即表示你已阅读并同意《个人信息保护声明》

专属顾问 专属顾问
扫码咨询您的优网专属顾问!
专属顾问
马上咨询
联系专属顾问
联系专属顾问
联系专属顾问
扫一扫马上咨询
扫一扫马上咨询

扫一扫马上咨询

和我们在线交谈!