You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Cookie实现CloudFlare HMAC验证 绕过WAF对管理员的误拦截

实现方案

核心问题解决:读取单个Cookie值

Cloudflare 防火墙语言原生支持直接提取指定Cookie的取值,无需手动解析完整Cookie字符串,语法为 http.cookie["你的Cookie名称"],可直接在校验函数中调用。

完整实现步骤

1. 服务端签发认证Cookie

首先在你的应用管理面板完成ACL认证后,按你设计的逻辑签发HMAC令牌Cookie,参考PHP实现代码:

// 配置项
$hmacSecret = '你自定义的高强度随机密钥,需和Cloudflare端配置完全一致';
$tokenValidSec = 86400; // 令牌有效期,单位秒,此处设为24小时
$expireTimestamp = time() + $tokenValidSec;
// 取真实用户IP,若服务器前置Cloudflare,建议使用 $_SERVER['HTTP_CF_CONNECTING_IP'] 取IP
$userRealIp = $_SERVER['REMOTE_ADDR'];

// 生成符合规则的令牌
$rawHash = hash_hmac('sha256', $userRealIp . $expireTimestamp, $hmacSecret, true);
$token = $expireTimestamp . '-' . base64_encode($rawHash);

// 写入Cookie,建议做权限限制避免泄露
setcookie(
  'admin_auth_token',
  $token,
  $expireTimestamp,
  '/admin/', // 仅管理面板路径携带Cookie,缩小泄露范围
  'your-domain.com', // 替换为你的实际域名
  true, // 仅HTTPS传输
  true // 禁止JS读取,防范XSS窃权
);

2. 配置Cloudflare放行规则

在Cloudflare防火墙规则中新增一条优先级最高的规则,动作选择「跳过WAF检测」,规则表达式参考如下:

# 先匹配管理面板的域名、路径范围,避免误放行其他业务
http.host eq "admin.your-domain.com"
and http.request.uri.path starts with "/"
# 确认Cookie存在
and http.cookie exists "admin_auth_token"
# HMAC校验,参数顺序依次为:密钥、令牌字符串、校验消息、有效期、哈希算法、时间戳长度、分隔符
and is_timed_hmac_valid_v0(
  "和PHP端完全一致的HMAC密钥",
  http.cookie["admin_auth_token"],
  ip.src,
  86400,
  "sha256",
  10,
  "-"
)

参数说明:10为Unix时间戳的长度(2030年前均为10位),最后一个参数-为你令牌中时间戳和哈希的分隔符,与你生成逻辑对应即可。

3. 规则优先级设置

将该放行规则调整至所有WAF拦截规则的最顶端,确保校验通过的请求直接跳过后续所有WAF检测逻辑,不会触发误拦截。

额外优化建议

  • 令牌有效期建议最长不超过7天,用户重新登录时自动刷新令牌,降低泄露风险
  • 可额外加URI路径匹配条件,仅放行管理面板相关路径的请求,进一步缩小规则作用范围
  • HMAC密钥需定期更换,且不要泄露到代码仓库等公开位置

内容的提问来源于stack exchange,提问作者Tyler V.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 10:15:02