php - 我的网络表单中的蜜罐似乎并没有阻止机器人提交
问题描述
我的网页上有一个表格。我经常从我认为是网络机器人的东西中得到空提交。为了阻止这种情况,我遵循了这篇文章中接受的答案的建议,并做了一个“蜂蜜陷阱”以停止自动提交。
我不确定我是否做错了什么,但我仍然每天大约收到一次空提交。
我做错了什么,还是有其他原因使这种方法现在可以工作?
我的 HTML:
<form action="post.php" method="post">
<label for="email"></label>
<input type="email" placeholder="Enter your email address..."
name="email" required>
<input type="checkbox" name="contact_me_by_fax_only" value="1" style="display:none !important" tabindex="-1" autocomplete="off">
<button type="submit" class="signupbtn">Sign Up</button>
</form>
我的PHP:
<?PHP
$honeypot = FALSE;
$email = $_POST["email"];
if (!empty($_REQUEST['contact_me_by_fax_only']) && (bool) $_REQUEST['contact_me_by_fax_only'] == TRUE) {
$honeypot = TRUE;
log_spambot($_REQUEST);
# treat as spambot
} else {
mail("my@email.com", "Message from $email", "message here");
header('Location: thanks.html');
}
?>
解决方案
使用isset()
复选框而不是!empty()
. 您的复选框的值为 1,因此它被视为不为空。
复选框的工作方式是,如果选中,则“设置”。
这更像是一个逻辑问题。
如果您想阻止机器人自动执行您的代码,请检查复选框是否“未”设置/单击并从那里处理。
逻辑:
- 如果选中该复选框,则表示有人执行了该操作,然后继续。
检查需要有人输入的空字段。
如果一切顺利,请继续邮寄。
如果未选中该复选框,请停止脚本继续运行,并可能显示有关它的消息并记录它。
您也可以将复选框设为“必需”,但使用服务器端方法来处理这一切。
推荐阅读
- java - 房间数据库:删除详细活动中的数据后,RecyclerView 不更新
- c# - 使用 C#,我们如何从 XML Schema 文件中提取属性值并将其输出到 CSV 文件中?
- vb.net - 后台工作人员忙于访问网站时下载未完成
- c# - 提示未显示在 Microsoft Teams 集成机器人中
- excel - Excel VSTO 插件使用 ChromiumFX 问题
- arrays - ngFor 不更新视图,除非单击视图 Angular
- sqlite - 我应该按什么顺序在 SQLite3 数据库中调用 ANALYZE 和 VACUUM?
- php - 服务器端渲染mysql限制n行并分页
- reactjs - React Native App 将无法启动 - 反应原生版本不匹配和 RCTView 为 validAttributes 生成的视图配置与原生不匹配
- android - 结束通话时出现异常 - “pjsua_conf_disconnect(id, sink.id) 错误:值或参数无效”