首页
/ 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注入攻击的防护能力。

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

热门内容推荐

最新内容推荐

项目优选

收起
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
143
1.91 K
kernelkernel
deepin linux kernel
C
22
6
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
8
0
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
192
273
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
927
551
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
421
392
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
145
189
金融AI编程实战金融AI编程实战
为非计算机科班出身 (例如财经类高校金融学院) 同学量身定制,新手友好,让学生以亲身实践开源开发的方式,学会使用计算机自动化自己的科研/创新工作。案例以量化投资为主线,涉及 Bash、Python、SQL、BI、AI 等全技术栈,培养面向未来的数智化人才 (如数据工程师、数据分析师、数据科学家、数据决策者、量化投资人)。
Jupyter Notebook
75
64
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
344
1.3 K
easy-eseasy-es
Elasticsearch 国内Top1 elasticsearch搜索引擎框架es ORM框架,索引全自动智能托管,如丝般顺滑,与Mybatis-plus一致的API,屏蔽语言差异,开发者只需要会MySQL语法即可完成对Es的相关操作,零额外学习成本.底层采用RestHighLevelClient,兼具低码,易用,易拓展等特性,支持es独有的高亮,权重,分词,Geo,嵌套,父子类型等功能...
Java
36
8