在我的网站上,我有几种形式,其中有人(没有注册)可以向指定的注册用户发送消息。形式很简单,我想保持这种方式。如果我不想使用任何验证码,保护联系表格的最佳方式是垃圾邮件和机器人?
Your message:...
Your e-mail:...
[Send]
答案 0 :(得分:7)
所以选项:
有关这些以及我对他们的看法的详情。
在我看来,最好的是解决方案3,然后是解决方案2,然后是解决方案1,然后是解决方案4和5.
答案 1 :(得分:7)
在我看来,许多网站(除了门票销售商,谷歌等主要网站以及其他将被定位的网站)可以通过组合使用多种不同的技术来阻止评论/形式垃圾邮件而无需验证码。我最近创建了一个开源PHP项目,它实现了以下测试,以确定提交是否合法或垃圾邮件。
这是项目的URL。我喜欢上面的Kaii测试,会为phpFormProtect做一个很好的额外测试。 https://github.com/mccarthy/phpFormProtect
答案 2 :(得分:6)
您可以使用表单键技术保护表单:
如果没有验证码或类似的东西,就不可能真正保护表单免受滥用。
然而,使用这种技术的恶意垃圾邮件发送者必须
据我所知,没有自动垃圾邮件联系表单抓取工具。
此技术还可以保护您的表单免受多次意外提交。
这是一个代码示例:
<?php
session_start();
if (isset($_POST['form_submit'])) {
// do stuff
if (isset($_POST['formkey']) && isset($_SESSION['formkeys'][$_POST['formkey']])) {
echo "valid, doing stuff now ... "; flush();
// delete formkey from session
unset($_SESSION['formkeys'][$_POST['formkey']]);
// release session early - after committing the session data is read-only
session_write_close();
// do whatever you like with the form data here
send_contact_mail($_POST);
}
else {
echo "request invalid or timed out.";
}
}
else {
// show form with formkey
$formkey = md5("foo".microtime().rand(1,999999));
// put current formkey into list of valid form keys for the user session
if (!is_array($_SESSION['formkeys']) {
$_SESSION['formkeys'] = array();
]
$_SESSION['formkeys'][$formkey] = now();
?>
<html>
<head><title>form key</title></head>
<body>
<form method="POST">
<input type="hidden" name="PHPSESSID" value="<?=session_id()?>">
<input type="text" name="formkey"
value="<?= $formkey ?>">
<input type="submit" name="form_submit" value="Contact us!">
</form>
</body>
</html>
<?php } ?>
答案 3 :(得分:1)
您可以从IP实施时间限制。因此,如果垃圾邮件机器人试图一次又一次地发送表单(在特定的时间间隔内,例如1小时),则应拒绝该请求。
您必须通过检查和存储用户的IP来在服务器端执行此操作。然后,当他们再次发送表单时,检查用户是否已暂时处于被阻止的IP中。
这也是StackOverflow implemented 2年前的事。
答案 4 :(得分:0)
你可以做点什么来证明用户是人。如果你想保持简单,可能是一个问一个数学问题的字段,例如“2 + 5?”。但这不像验证码那么安全。但是,如果可能的垃圾邮件没有让你烦恼,那就可以了。
答案 5 :(得分:0)
使用:iScramble
基本上,它需要一个字符串(将您的html形式的HTML作为字符串存储在PHP中),并生成一个模糊的Javascript块。
它可以帮助隐藏用于保护表单的那些表单密钥,或者完全对机器人完全隐藏表单。
自90年代以来,我一直在使用它(上面链接的页面显然至少很旧),而且我从未收到过垃圾邮件。