
本文介绍如何通过集成 google recaptcha 有效拦截自动化脚本对 php 联系表单的恶意提交,解决因未验证请求来源而导致的服务器端滥发邮件问题。
你当前使用的 PHP 表单处理脚本(mail() 函数)虽然结构清晰、具备基础的注入检测(如换行符过滤),但完全缺乏用户行为验证机制——这正是导致 Ionos 服务器每日向你发送大量“来自你自己的网站”的垃圾邮件的根本原因。攻击者无需访问前端页面,即可直接向该 PHP 脚本发起 HTTP POST 请求,绕过所有前端限制,批量伪造表单数据触发 mail() 发送。
单纯依赖 isInjected() 这类字符串检测已远远不够。现代垃圾邮件机器人能轻易规避简单正则匹配,且你的脚本未校验请求来源、无会话状态、无时效性控制,本质上是一个开放的邮件中继接口。
✅ 正确解决方案:在前后端协同加入 Google reCAPTCHA v3(推荐)或 v2,实现无感或轻量交互式验证。
第一步:注册 reCAPTCHA 并获取密钥
访问 Google reCAPTCHA Admin Console → 选择 reCAPTCHA v3(更友好,无用户交互)→ 注册站点,添加你的域名(如 amatoria.com, yoursite1.com, yoursite2.com)→ 获取:
- Site key(前端使用)
- Secret key(后端验证用,切勿泄露)
第二步:修改 HTML 表单(前端)
在
第三步:增强 PHP 后端验证(关键!)
在 send_mail.php 开头添加 reCAPTCHA 校验逻辑,必须在 mail() 执行前完成:
// 新增:reCAPTCHA 验证(放在所有业务逻辑之前)
$secret_key = "YOUR_SECRET_KEY"; // ← 替换为你的 Secret Key
$recaptcha_response = $_POST['g-recaptcha-response'] ?? '';
if (empty($recaptcha_response)) {
header("Location: $error_page");
exit;
}
// 向 Google 验证 token
$verify_url = "https://www.google.com/recaptcha/api/siteverify";
$data = [
'secret' => $secret_key,
'response' => $recaptcha_response
];
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data)
]
];
$context = stream_context_create($options);
$result = file_get_contents($verify_url, false, $context);
$resp = json_decode($result, true);
// 若验证失败或分数过低(v3 默认阈值建议 ≥0.5),拒绝发送
if (!$resp['success'] || ($resp['score'] ?? 0) < 0.5) {
error_log("reCAPTCHA failed: " . print_r($resp, true));
header("Location: $error_page");
exit;
}⚠️ 注意事项: file_get_contents() 需确保服务器允许外网请求(Ionos 默认开启,但可检查 allow_url_fopen = On);若禁用,请改用 cURL。 永远不要跳过服务端校验——前端 token 可被篡改,仅作传输载体。 reCAPTCHA v3 返回 score 字段(0.0–1.0),0.5 是合理起点;可根据误报率动态调整。 建议同时保留原有 isInjected() 检查,作为纵深防御补充。
最后:清理与加固
- 删除或重命名旧版无防护的 send_mail.php,避免被暴力扫描发现。
- 在 .htaccess 中限制该脚本仅接受 POST 请求:
Require method POST - 定期检查服务器日志(如 access.log),筛选异常高频 POST 请求 IP 并封禁。
通过以上改造,你的联系表单将从“公开邮件接口”升级为受控通信通道——既保持用户体验流畅(v3 无感),又彻底切断机器人自动化投递路径。这才是 Ionos 等主机商无法代劳、但你必须自主实施的核心安全实践。










