介绍
我们在早期的项目中处理了一些垃圾邮件问题,并通过以下简单概念防止任何垃圾邮件机器人。我现在想将其实施到一个更大的项目中。在我这样做之前,我希望对其进行优化,使其在同一页面上以多种形式工作,但我还没有得到诀窍,或者我不确定如果它没用,是否值得将它重建为更复杂的版本。
澄清一下:我不想处理 CAPTCHA 或类似的事情。只需做一个本地解决方案。
概念
如果用户关注input
表单的任何字段,则将发送 AJAX 查询,其中将生成随机哈希标签并将其存储到$_SESSION
变量中。这个散列也将被写入一个名为spamKey
(例如)的隐藏输入字段。
用户提交表单后,我检查$_SESSION["spamKey"]
变量是否等于$_POST["spamKey"]
变量,因此我决定是否处理查询。
编码
简单的模式
<form action="index.php" method="post" id="formOne">
<label for='input_eins'>Name</label>
<input type='text' id='input_eins' name='name' />
<label for='input_user'>E-Mail</label>
<input type='text' id='input_user' name='user' />
<label for='ta_text'>Comment</label>
<textarea name='text'></textarea>
<label for='input_spamKey'>spamKey</label>
<input type='text' id='input_spamKey' name='spamKey' />
<input type='submit' value='Senden'>
</form>
script.js(使用 jQuery)
var spamKey = false;
$("#formOne > input").focus(function() {
if(spamKey == false) {
dataString = "action=getSpamKey";
$.ajax({
url: 'asyncresponse.php',
data: dataString,
type: "POST",
success: function(data) {
$("#input_spamKey").val(data);
if(data != "") {
spamKey = true;
}
}
});
}
});
asyncresponse.php(信息:POST-Variables 已清理)
if($_POST["action"] == "getSpamKey") {
$spamKey = md5(time().microtime());
$_SESSION["spamKey"] = $spamKey;
echo $spamKey;
}
PHP中的检查例程
($_SESSION["spamKey"] == $_POST["spamKey"] && !empty($_SESSION["spamKey"]))
好的 - 我的问题是什么?
您建议我采取哪些步骤来保护多种表格?并且可能是一个基本问题 - 这是处理垃圾邮件问题的有效解决方案吗?
提前感谢您的帮助。
您可以在这里找到一个简单的演示:http: //godesign.ch/labor/antispam/index.php