如果您的主机名通过 Cloudflare 进行代理,访问者可能会在您的网页上遇到挑战。
Cloudflare 通过挑战平台发出挑战,该平台与为 Turnstile 提供支持的底层技术相同。
与我们的挑战页面产品相比,Turnstile 允许您以更少侵扰的方式在网站的任何位置运行挑战,而无需使用 Cloudflare 的 CDN。
Microsoft Internet Explorer 不支持质询。如果您目前使用的是 Internet Explorer,请尝试使用其他现代 Web 浏览器(Chrome、Safari、Firefox)。如果您已经使用了现代 Web 浏览器,请确保它使用的是最新版本。
您的访问者的 HTTP 请求包含一个 referer 标头,它被设置为他们来自的网站。当他们遇到并解决质询页面时,带有 referer 的请求会被发送到源站,而对请求的响应则会提供给用户。响应页面上的 JavaScript 可能会读取 document.referer 的值,但这将不准确。
例如,来自特定网站的访问者通过您的域提供的插页式质询页面受到 WAF 规则的质询。一旦访问者加载了网站的主页,document.referer 的值就是您的域,而不是源网站。
这会影响像 Google Analytics 这样的工具,它从 JavaScript 中读取 referer,因为它取代了访问者以前访问过的网站。
您可以在现有的质询页面中添加跟踪脚本(例如 Google Tag Manager Javascript),以便在初始请求上捕获正确的 referer 标头。
<script>
(function () {
const gaIds = {
"<YOUR_DOMAIN>": "<GA_TRACKING_ID>",
};
const gaId = gaIds[window.location.hostname];
if (gaId) {
const src = "https://www.googletagmanager.com/gtag/js?id=";
const gaScript = document.createElement("script");
gaScript.src = src.concat(gaId);
document.body.appendChild(gaScript);
window.dataLayer = window.dataLayer || [];
function gtag() {
dataLayer.push(arguments);
}
gtag("js", new Date());
gtag("config", gaId);
} else {
console.warn(
"Google Analytics ID not found for host:",
window.location.hostname,
);
}
})();
</script>
</body>跨源资源共享 (CORS) 预检请求或 OPTIONS 会排除包含 cookie 的用户凭据。因此,请求将不会发送 cf_clearance cookie,导致其未能绕过质询页面(非交互式、托管或交互式质询)。
Cloudflare 向网站访问者发出质询以防止恶意活动,例如机器人攻击和 DDoS 尝试。如果合法的真实访问者意外遭到质询,其原因通常源自安全功能标记了他们的请求。
| 来源 | 描述 |
|---|---|
| 威胁分数高 | 具有高风险分数的 IP 地址会触发质询。 |
| IP 声誉 | 如果您的 IP 有可疑活动记录,它可能会被标记。 |
| 机器人检测 | 类似于机器人的自动化流量会被 Cloudflare 过滤。 |
| Web 应用程序防火墙 (WAF) 自定义规则 | 网站所有者可以设置针对特定区域或用户代理的规则。 |
| 浏览器完整性检查 | Cloudflare 验证浏览器是否符合特定标准。 |
| 质询通过 | 诸如 Privacy Pass 的技术减少了重复质询的频率。 |
为了避免重复的质询,访问者可以采取以下步骤以确保他们的环境不会触发安全检查:
- 确保您的 Web 浏览器已更新至最新的稳定版本,以完全兼容现代质询技术。
- 暂时禁用浏览器扩展,例如广告拦截器或隐私工具,这些工具可能会阻止标准的浏览器标头或必要的质询脚本。
- 如果您的 IP 地址声誉较差(通常在共享 VPN 或公司代理中出现),请尝试切换到另一个受信任的网络连接。
如果您需要阻止对特定请求应用**Block(阻止)或Challenge(质询)**操作(例如已知的搜索引擎爬虫、监控服务或内部 API),则必须使用 WAF 自定义规则配置排除项。
Cloudflare 支持两种创建这些排除项的主要方法:
创建例外的最强大方法是使用 Skip(跳过) 操作创建一个自定义规则。这允许匹配的请求绕过某些安全功能,包括机器人管理和其他 WAF 规则。
示例
阻止 Amazon Web Services (AWS) 和 Google Cloud Platform (GCP),因为有大量不受欢迎的流量,但允许 Cloudflare 验证的 Googlebot 和其他已知机器人。
-
基本规则,无排除项:
- 表达式:
(ip.src.asnum in {16509 15169} and not cf.client.bot) - 操作:Block(或一个质询操作)
- 表达式:
-
将 IP 地址从被阻止或质询中排除的规则:
- 表达式:
(ip.src.asnum in {16509 15169} and not cf.client.bot) and not (ip.src in {192.0.2.1 198.51.100.42 203.0.113.0/24}) - 操作:Block(或一个质询操作)
- 表达式:
-
两个规则以跳过特定 IP 的剩余自定义规则并阻止其余的。
-
规则 1:
- 表达式:
ip.src in {192.0.2.1 198.51.100.42 203.0.113.0/24} - 操作:Skip > 所有剩余自定义规则
- 表达式:
-
规则 2:
- 表达式:
(ip.src.asnum in {16509 15169} and not cf.client.bot) - 操作:Block(或一个质询操作)
- 表达式:
-
您可以通过将逻辑非运算符与排除列表(例如 IP 列表、国家/地区代码或 ASN)结合使用,来改进 Block(阻止) 或 Challenge(质询) 规则的表达式,以直接排除已知的良好流量。
这种方法对于简单的排除项很有用,但会使复杂的规则比单独的 Skip(跳过) 规则更难维护。
示例
从评估攻击分数的 Block(阻止) 或 Challenge(质询) 规则中排除多个 IP 地址。
-
基本规则,无排除项:
- 表达式:
(http.host eq "example.com" and cf.waf.score lt 20) - 操作:Block(或一个质询操作)
- 表达式:
-
将 IP 地址从被阻止/质询中排除的规则:
- 表达式:
(http.host eq "example.com" and cf.waf.score lt 20) and not (ip.src in {192.0.2.1 198.51.100.42 203.0.113.0/24}) - 操作:Block(或一个质询操作)
- 表达式:
-
两个规则以跳过特定 IP 的剩余自定义规则并阻止其余的。
-
规则 1:
- 表达式:
ip.src in {192.0.2.1 198.51.100.42 203.0.113.0/24} - 操作:Skip > 所有剩余自定义规则
- 表达式:
-
规则 2:
- 表达式:
(http.host eq "example.com" and cf.waf.score lt 20) - 操作:Block(或一个质询操作)
- 表达式:
-