如何防止谷歌机器人(或其他机器人)提交我的HTML表单和以前提交的信息?



我一直遇到问题,我的HTML表单被机器人错误地提交,我相信是谷歌机器人。

HTML 表单是典型的潜在客户生成表单。提交后,数据由php页面解析,将数据保存到典型的mysql数据库中,并通过电子邮件将数据发送给公司。当通过 onClick 事件提交表单时,第三方供应商脚本将数据发送到仪表板应用程序。

困境在于,在星期一收到的真正有效的表格提交,几天后又提交

。而且,这些"虚假"提交是快速连续"提交的,通常在一两分钟内,通常以八为一组。

托管服务器的人说是谷歌机器人正在提交表单,其中已经提交了有效信息。这些提交不是典型的垃圾邮件胡言乱语。

他们建议使用机器人.txt以防止机器人访问表单和解析页面。我已经做到了。我什至添加了元标记以防止机器人访问解析页面。似乎一切都失败了。

并且,在"虚假"提交后,数据将保存到数据库中,并将包含数据的电子邮件发送给公司。

但是,不会执行将数据发送到仪表板的第三方脚本。

因此,数据库中存在重复条目,公司的收件箱中充满了他们需要整理的重复条目。

有什么帮助吗?其他人有过这样的经历吗?机器人可以提交表单似乎很奇怪(如果它真的在提交表单,或者它是否以某种方式从诚实的表单提交中读取信息,然后再次提交表单以查看表单的去向?

提前感谢您对此问题的任何帮助和见解。

如果GoogleBot确实使用虚假数据提交表单,这意味着它认为您拥有导航表单,而不是联系表单。

确保仅通过method="POST"发送<form>,并使用典型的输入name属性,例如"名称"和"电子邮件"。要求它们在提交之前有效。

作为最后的手段,PHP 可以使用隐藏的随机数值来提供表单 HTML:

<?php
session_start();
$_SESSION['nonce'] = rand();
echo '<input type="hidden" name="nonce" value="'.$_SESSION['nonce'].'">';
?>

提交时检查:

<?php
session_start();
if ($_POST['nonce'] !== $_SESSION['nonce']) {
// bad stuff here
}
else unset($_SESSION['nonce']); // Prevent double submissions
?>

最新更新