PHP入侵检测,侵检说白了就是侵检跟藏在你自己代码里的“定时炸弹”玩捉迷藏。我见过太多开发者,侵检以为用了PDO预处理就高枕无忧了,侵检结果一个不小心,侵检把用户输入直接拼进了`unserialize()`,侵检整个后台就跟脱光了衣服站在大街上一样。侵检
先看个真实案例。侵检某个电商站,侵检后台订单导出功能里,侵检有人把`$_GET['file']`直接怼进了`include`。侵检攻击者只需要在URL后面加个`?侵检file=php://filter/convert.base64-encode/resource=config.php`,数据库账号密码就全出来了。侵检这玩意儿不算高级漏洞,侵检但就是侵检能打穿一大片自以为是的站点。你问怎么防?第一步就是别信任何输入,哪怕是来自你自己数据库的——二次注入了解一下?
检测思路得换。别光盯着SQL注入和XSS这些老面孔,PHP特有的危险函数才是重灾区。`eval()`、`assert()`、`preg_replace()`带`/e`修饰符,这几个家伙只要被用户输入碰到,基本就是RCE(远程代码执行)。我自己的习惯是,在代码里写个简单的日志钩子,每次调用这些函数之前,把参数内容、调用栈、来源IP全记下来。不是用框架的日志,就纯手工`error_log()`,配合`debug_backtrace()`。丑是丑了点,但关键时刻能救命。
文件操作也得盯死。`file_put_contents()`、`unlink()`、`rename()`,这些函数如果路径参数里混入了用户可控值,轻则删站,重则写个webshell进去。有个土办法挺管用:在项目入口文件里定义一个全局函数,专门检查路径是否在允许的目录白名单内。用`realpath()`解析后比对前缀,不在就直接扔异常。这比那些复杂的WAF规则实在多了。
再说说日志分析。别傻乎乎地等攻击完了再翻日志,那叫验尸。我建议把PHP错误日志和访问日志分开,错误日志里凡是出现“`unexpected T_FUNCTION`”或者“`syntax error`”这类诡异报错的,多半是有人在试你的`eval()`漏洞。还有,正常用户不会在User-Agent里写`' or 1=1 --`,更不会在POST参数里塞数组。看到这种直接拉黑IP,不用犹豫。
最容易被忽视的是上传点。图片马这招都玩烂了,但照样能骗过不少检测脚本。别信MIME类型,别信文件头,直接禁用`$_FILES['file']['tmp_name']`的后缀名白名单之外的所有类型。还有,上传目录的PHP执行权限必须关掉,用Apache就把`php_flag engine off`写进`.htaccess`,Nginx就配`location ~ \.php$ { deny all; }`。这招能挡掉九成的图片马攻击。
最后说个反直觉的:别把所有精力都放在“堵”上,得学会“看”。我认识个老哥,他的检测系统就是每天凌晨三点跑一遍所有文件的哈希校验,跟Git仓库里的原始版本比对。多了新文件?查。改了老文件?查。哪怕只是多了一个空格,也得揪出来看是谁改的。这办法笨,但对付那些把后门藏了半年都没被发现的案例,比什么AI检测都管用。
PHP代码审计这活儿,没有银弹。你写的那几行检测逻辑,本身也可能被绕过。保持怀疑,保持日志的完整,别嫌麻烦。真被入侵了,最值钱的不是备份,是你从日志里还原出的攻击路径——那才是你下次不会再犯同样错误的唯一依据。