1

介绍

我们在早期的项目中处理了一些垃圾邮件问题,并通过以下简单概念防止任何垃圾邮件机器人。我现在想将其实施到一个更大的项目中。在我这样做之前,我希望对其进行优化,使其在同一页面上以多种形式工作,但我还没有得到诀窍,或者我不确定如果它没用,是否值得将它重建为更复杂的版本。

澄清一下:我不想处理 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

4

1 回答 1

1

验证码曾经是防止垃圾邮件的有效方法。它现在被破坏了,因为它被广泛实施,创造了破坏它的经济动机(谷歌“验证码被破坏”)。

我已经看到这种方法在项目中很有效。你冒着有人在某个时候会被激励打破它的风险。正确实施,我相信它在这个时间点提供了合理的防止垃圾邮件的保护。

于 2013-01-09T17:10:39.753 回答