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

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

2025-06-30 13:18:06作者:裴麒琰

问题背景

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

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

项目优选

收起
kernelkernel
deepin linux kernel
C
22
6
docsdocs
OpenHarmony documentation | OpenHarmony开发者文档
Dockerfile
203
2.18 K
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
208
285
pytorchpytorch
Ascend Extension for PyTorch
Python
62
94
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
977
575
nop-entropynop-entropy
Nop Platform 2.0是基于可逆计算理论实现的采用面向语言编程范式的新一代低代码开发平台,包含基于全新原理从零开始研发的GraphQL引擎、ORM引擎、工作流引擎、报表引擎、规则引擎、批处理引引擎等完整设计。nop-entropy是它的后端部分,采用java语言实现,可选择集成Spring框架或者Quarkus框架。中小企业可以免费商用
Java
9
1
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
550
84
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
1.02 K
399
communitycommunity
本项目是CANN开源社区的核心管理仓库,包含社区的治理章程、治理组织、通用操作指引及流程规范等基础信息
393
27
MateChatMateChat
前端智能化场景解决方案UI库,轻松构建你的AI应用,我们将持续完善更新,欢迎你的使用与建议。 官网地址:https://matechat.gitcode.com
1.2 K
133