首页
/ CoreRuleSet项目中PHP过滤器绕过问题分析与改进方案

CoreRuleSet项目中PHP过滤器绕过问题分析与改进方案

2025-06-30 14:39:00作者:裴麒琰

问题背景

在Web应用安全防护领域,CoreRuleSet(CRS)作为ModSecurity的规则集,一直致力于提供全面的攻击防护。近期发现一个关于PHP注入攻击检测的潜在绕过问题,涉及PHP标签与XML声明的混淆使用。

技术细节

该问题的核心在于PHP解释器对标签语法的灵活处理。PHP允许使用<?xml :作为有效的PHP代码起始标记,其中的冒号(:)实际上是一个PHP标签(label)语法。这种特性使得攻击者可以构造特殊的"XML/PHP多语言"载荷,绕过现有的PHP注入检测规则。

具体表现为:

  • 攻击载荷示例:<?xml :echo 1;或更复杂的<?xml :fputCSV($alreadyOpenFile, array("foo", "bar"));
  • 这些载荷在PHP解释器中会被正常执行,但CRS的PHP注入检测规则(933100)未能有效识别

现有防护机制分析

当前CRS的933100规则使用以下正则表达式检测PHP注入:

(?:<\?(?:[^x]|x[^m]|xm[^l]|xml[^\s]|xml$|$)|<\?php|\[(?:/|\x5c)?php\])

该规则能够检测:

  • 基本的PHP开放标签<?<?php
  • 不完整的XML声明如<?x<?xm
  • 无空格后续内容的XML声明如<?xml:

但存在以下不足:

  • 无法检测<?xml :(带空格和冒号)这种有效PHP语法
  • 对XML声明后跟PHP代码的情况检测不够全面

改进方案

基于XML规范(W3C TR/xml)和PHP语法特性的深入分析,提出以下改进方案:

  1. XML声明规范分析

    • 合法XML声明格式为<?xml后跟版本、编码等属性
    • 只允许特定属性名:version、encoding、standalone
    • 属性间只允许特定空白字符(#x20、#x9、#xD、#xA)
  2. 改进的正则表达式

    (?:<\?(?:[^x]|x[^m]|xm[^l]|xml[^\s]|xml$|xml\s*[^a-zA-Z]|$)|<\?php|\[(?:/|\x5c)?php\])
    
    • 新增xml\s*[^a-zA-Z]模式检测非法后续内容
    • 保持对原有攻击模式的兼容检测
    • 严格限制XML声明后只能跟字母(属性名)或规范允许的空白
  3. 实现策略

    • 将复杂正则表达式分解为可维护的数据文件
    • 通过生成器构建最终规则表达式
    • 确保不影响现有规则性能

实际影响评估

该改进方案能够有效检测以下攻击变种:

  • <?xml :后跟任意PHP代码
  • 带多个空格的变种如<?xml :
  • 其他非规范XML声明后跟可执行代码的情况

同时避免了误报合法XML声明的情况,如:

  • <?xml version="1.0"?>
  • <?xml encoding="UTF-8"?>

总结

此次改进展示了安全规则集开发中的典型挑战:需要在多种语言规范间找到精确的检测平衡点。通过深入分析PHP和XML的语法规范,CRS项目组实现了既保持高检测率又避免误报的改进方案,进一步巩固了其对PHP注入攻击的防护能力。

登录后查看全文
热门项目推荐

热门内容推荐

最新内容推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
261
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
860
511
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
259
300
kernelkernel
deepin linux kernel
C
22
5
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
595
57
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
332
1.08 K