安企CMS使用 reCAPTCHA 漫游器防护功能阻止自动化攻击
reCAPTCHA 是一种强大的漫游器拦截工具,可保护网站免受网络垃圾、滥用行为和欺诈行为的侵害。它通过分析用户行为和其他因素来确定操作是由真人还是漫游器执行的。如果检测到可疑活动,reCAPTCHA 可能会采取措施来防止未经授权的访问,例如显示验证挑战或完全阻止互动。这有助于确保网站保持受保护状态,同时尽可能减少对合法用户的干扰。
以下是三项关键功能:
自适应风险评估:分析各种因素,评估用户是漫游器的风险,并相应地调整响应 高级漫游器检测:采用先进技术区分真人与漫游器,确保准确识别 持续学习:运用机器学习技术不断提高漫游器检测的准确率,并根据新的威胁做出调整
注意 服务器在国内的不要启用,国内无法正常使用该功能。
先在 Google Cloud 上配置
安企CMS现在支持配置使用 reCAPTCHA 拦截网站留言自动化攻击。下面是安企CMS接入 reCAPTCHA 的操作方法:
- 访问 https://cloud.google.com/security/products/recaptcha, 点击【开始使用】按钮,并填写网站信息(已添加网站的,点击【Fraud Defense 控制台】进去操作)。

- 在弹出的【注册新网站】页面中,填写标签、选择 reCAPTCHA 类型、域名、项目(如果没有项目,则需要先创建),填写完成后,点击提交按钮完成创建。

- 创建过程大约需要30秒左右,创建完成后,会来到【将 reCAPTCHA 添加到您的网站】页面,上面包含了 网站密钥 和 通信密钥,请几十妥善保管

再在 安企CMS 管理后台上配置
来到 安企CMS 网站的管理后台,在 功能 -> 系统功能 里找到【Akismet/reCAPTCHA】(也可以在顶部搜索栏搜索 reCAPTCHA)
点击【Akismet/reCAPTCHA】功能进入配置页面,在出现的页面中,选择 开启 reCAPTCHA, 并填写 网站密钥 和 通信密钥,点击保存使配置生效。

安企CMS 前端留言界面配置
在安企CMS 管理后台配置了 网站密钥 和 通信密钥 后,前端界面还不会直接出现 reCAPTCHA,还需要进行界面适配。
在安企CMS站点中,前端模板可以通过网站密钥变量 recaptcha_key 来判断站点有没有启用了 reCAPTCHA,如果启用了,则网站密钥recaptcha_key会存在正确的值。
我们在留言表单中添加对应的判断来使用 reCAPTCHA:
操作 template/default/guestbook/index.html(其他模板同理,留言表单均可用)
给 <form> 元素增加 id="guestbook-form",
在 form 表单内部添加如下代码:
<!-- 使返回值为JSON -->
<input type="hidden" name="return" value="json">
<p class="form-tip mt-2 hidden text-sm"></p>
{%- if recaptcha_key %}
<!-- 启用 reCAPTCHA -->
<script src="https://www.google.com/recaptcha/api.js?render={{recaptcha_key}}"></script>
<script>
(function () {
// 供提交脚本调用:获取 reCAPTCHA token,失败时回调 null 降级为直接提交
window.getRecaptchaToken = function (cb) {
if (typeof grecaptcha === 'undefined') {
cb(null);
return;
}
grecaptcha.ready(function () {
grecaptcha.execute('{{recaptcha_key}}', { action: 'guestbook' }).then(function (token) {
cb(token);
}).catch(function () {
cb(null);
});
});
};
})();
</script>
{%- endif %}
<script>
(function () {
var form = document.getElementById('guestbook-form');
if (!form) return;
var tip = form.querySelector('.form-tip');
var submitBtn = form.querySelector('button[type="submit"]');
function showTip(text, ok) {
if (!tip) return;
tip.textContent = text;
tip.classList.remove('hidden');
tip.classList.toggle('text-green-600', ok);
tip.classList.toggle('dark:text-green-400', ok);
tip.classList.toggle('text-red-600', !ok);
tip.classList.toggle('dark:text-red-400', !ok);
}
function doSubmit(token) {
if (token) {
var input = form.querySelector('input[name="recaptcha_token"]');
if (!input) {
input = document.createElement('input');
input.type = 'hidden';
input.name = 'recaptcha_token';
form.appendChild(input);
}
input.value = token;
}
if (submitBtn) submitBtn.disabled = true;
fetch(form.action, { method: 'POST', body: new FormData(form) })
.then(function (res) { return res.json(); })
.then(function (res) {
if (res.code === 0) {
showTip('留言提交成功,我们会尽快与您联系!', true);
form.reset();
} else {
showTip(res.msg || '留言提交失败,请稍后重试。', false);
}
})
.catch(function () {
showTip('留言提交失败,请稍后重试。', false);
})
.finally(function () {
if (submitBtn) submitBtn.disabled = false;
});
}
form.addEventListener('submit', function (e) {
e.preventDefault();
if (typeof window.getRecaptchaToken === 'function') {
window.getRecaptchaToken(doSubmit);
} else {
doSubmit(null);
}
});
})();
</script>
保存代码后,就可以启用 reCAPTCHA 了。
你在页面右下角看到 一个 reCAPTCHA 正常的图标,则表示配置完全正确
