任意域名 (Any Hostname) 功能去除了在创建小组件时必须指定域名的要求,允许小组件在任何域上正常工作。
默认情况下,域名验证是一项用于防止未经授权使用您的小组件的安全功能。任意域名权限消除了这一限制,使得在创建小组件时域名字段变为可选。
启用后,可以在未指定必需域名的情况下创建小组件,并且可以在任何域上使用而无需预先配置。域名验证防护也会被移除。
要在使用“任意域名”功能时降低安全风险,请通过 Turnstile 分析 (Turnstile Analytics) 监控小组件的使用情况以识别异常模式,在您的应用程序代码中实施带有域名检查的服务器端验证,并使用 action 和 cData 参数跟踪小组件使用的来源并识别部署小组件的位置。
使用“任意域名”功能时,必须在服务器端代码中实施额外的验证以维持安全控制。始终验证 Siteverify 响应中的 hostname 字段。
async function validateTurnstileWithHostname(token, expectedHostnames = []) {
const response = await fetch('https://challenges.cloudflare.com/turnstile/v0/siteverify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
secret: process.env.TURNSTILE_SECRET,
response: token
})
});
const result = await response.json();
if (!result.success) {
return { valid: false, error: '令牌验证失败' };
}
// 使用“任意域名”时的额外域名验证
if (expectedHostnames.length > 0 && !expectedHostnames.includes(result.hostname)) {
return {
valid: false,
error: '主机名不在允许列表中',
hostname: result.hostname
};
}
return { valid: true, data: result };
}您应定期审查 Turnstile 分析中是否存在异常使用模式,并监控 Siteverify 响应中的 hostname 字段。您可以为小组件在非预期域上的使用设置警报。
使用 action 和 cData 参数来跟踪小组件使用来源。
<!-- 带有跟踪信息的小组件 -->
<div class="cf-turnstile"
data-sitekey="your-site-key"
data-action="customer-portal"
data-cdata="tenant-123"></div>“任意域名”功能对于拥有以下情况的客户特别有价值:
- 拥有庞大域名组合且需单独管理许多域名。
- 动态子域名创建,并且频繁创建子域名或客户特定域名。
- 多租户应用程序,例如为多个客户域名服务的 SaaS 平台。
- 在各种暂存 (staging) 和开发域名中进行测试的开发环境。