在cloudflare和akamai上开启php2shell托管规则,核心是启用waf中的“managed rules”或“security policies”,并订阅包含php-fpm漏洞防护的特定规则集(如cloudflare的php-fpm protection或akamai的bot manager/advanced waf规则)。origin直连之所以需要防护,是因为绕过cdn后,源站直接暴露于公网,失去了cdn提供的ddos清洗、ip信誉过滤和高级waf规则引擎,攻击者可以直接针对源站的php配置缺陷(如cve-2024-29018)发起精准攻击。

如何在Cloudflare中配置PHP2Shell防护
在Cloudflare控制台开启防护,需进入Security > WAF > Managed Rules页面,搜索并启用名为“PHP-FPM Protection”的规则集。该规则集专门用于检测针对PHP-FPM FastCGI接口的溢出攻击,包括PHP2Shell利用链。启用后,Cloudflare会在边缘节点拦截恶意请求,无需修改源站代码即可生效。若使用自定义防火墙规则,可添加条件匹配`REQUEST_URI`包含`.php`且`QUERY_STRING`包含危险参数(如`cmd`、`exec`)的请求,并设置动作“Block”。对于已订阅Enterprise计划的用户,建议同时启用“Bot Fight Mode”以增强对自动化扫描工具的识别。

{
"rules": [
{
"id": "php-fpm-protection",
"enabled": true,
"description": "Detects PHP-FPM buffer overflow attacks (PHP2Shell)"
},
{
"id": "custom-php-block",
"expression": "(http.request.uri.path matches \".php$\") and (http.request.query contains \"cmd=\")",
"action": "block"
}
]
}
上述JSON示例展示了Cloudflare WAF规则的典型结构。第一条规则引用内置的PHP-FPM保护集,第二条为自定义规则,用于拦截常见的命令注入尝试。实际部署时,需在Cloudflare Dashboard中通过UI配置,而非直接提交JSON。启用后,可通过“Firewall Events”日志监控拦截情况,确认攻击是否被有效阻断。
Akamai如何实现等效的PHP2Shell防护
Akamai平台提供两种主要方式实现类似防护:一是通过“Security Policy”中的“Managed Rules”启用“PHP Security”规则组;二是使用“Advanced WAF”编写自定义规则。在Akamai Control Center中,导航至Security > Policies,选择目标策略,点击“Add Rule”,选择“Managed Rule”类别下的“PHP Vulnerabilities”。该规则组自动包含对CVE-2024-29018等已知漏洞的检测逻辑。若需更精细控制,可使用“Request Header”或“URI”字段构建自定义规则,例如匹配`Content-Type: application/x-www-form-urlencoded`且body中包含`system()`调用的请求。Akamai还推荐结合“Bot Manager”功能,识别来自可疑IP的批量探测行为。

{
"policy": {
"name": "PHP2Shell_Protection",
"rules": [
{
"name": "Managed_PHP_Security",
"type": "managed_rule",
"rule_set_id": "akamai-php-vulns-2024",
"action": "block"
},
{
"name": "Custom_CMD_Injection",
"type": "custom_rule",
"condition": "http.request.body contains 'system(' or 'exec('",
"action": "block"
}
]
}
}
此JSON示例模拟了Akamai安全策略的结构。第一条规则调用官方维护的PHP漏洞规则集,第二条为自定义规则,用于捕获未公开的命令注入模式。注意,Akamai的实际配置需通过其GUI或API完成,JSON仅为概念示意。启用后,建议在测试环境中验证规则有效性,避免误杀正常业务请求。
当Origin服务器直接接收PHP-FPM请求时会发生什么
如果Origin服务器直接处理来自外部的PHP-FPM FastCGI请求,而未经过CDN代理,则攻击者可利用PHP-FPM的缓冲区溢出漏洞(如PHP2Shell)直接执行任意系统命令。这是因为源站通常缺乏CDN层面的速率限制、IP黑名单和深度包检测能力。具体而言,当攻击者发送构造特殊的FastCGI数据包时,若源站PHP版本低于8.3.6或8.2.17,且未打补丁,则可能触发内存损坏,导致shellcode执行。此时,源站Web服务器(如Nginx或Apache)可能返回错误响应,但攻击已成功。因此,必须确保所有PHP-FPM请求仅通过可信代理(如CDN或反向代理)转发,并在源站启用`cgi.fix_pathinfo=0`等安全配置,以减少攻击面。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











