2012-12-28 36 views
2

您好所有社区,如何检测垃圾邮件形式的垃圾邮件并记录IP和输入?

我有体面的流量的网站,我在的AWStats分析一些日志后,我发现有很多垃圾邮件我的搜索形式不好的话(性爱机器人,年轻的...等等)。这是一个问题,因为每个搜索都有助于标签云。

我安装了防DDOS脚本(在CentOS),但它不适合我的需要,这和杀死一些搜索引擎的IP(至极是非常糟糕)。

搜索垃圾邮件是由过多的IP地址来,所以我不能简单地将它们添加到拒绝IP地址列表。一个好的解决方案是监视所有POST并将它们记录到带有搜索项+ IP地址的txt文件中。

这里是我的网站的网页表格:

<form action="<?= _domain ?>/search.php" method="get"> 
    <input type="text" name="q" value="<?=$q?>" id="query" /> 
    <select name="cat" style="margin-top: 5px;font-size: 16px;"> 
    <option value="all">All Files</option> 
    <?php list_categories('dropdown', $cat); ?> 
    </select> 
    <input type="submit" value="Search" id="submit" /><br /> 
</form> 

是否有人知道一个JavaScript代码,或类似的东西,可以帮助我呀?

非常感谢您

+0

只存储字阵列内,然后用用户输入的交叉检查,提交之前。 – samayo

+1

captcha怎么样? –

+0

THX你,是的验证码是一个很好的解决方案太多,但它是因为类似我没有验证码 – user1792805

回答

2

一个巧妙的解决了这一点,我所看到的是,以包括“蜜罐”输入框,并设置它的CSS显示值无法比拟的。如果这个盒子里有什么东西,你就知道它是一个脚本。另外,使用真正模糊的字段的真实名称,并传入一个令牌,您可以在提交后进行验证。例如:

<input type="text" name="zsdifhs" value="<?= $q ?>" id="zsdifhs" /> 
<input type="text" name="q" value="<?= $tok ?>" 
    id="query" style="display:none;" /> 

或者可能将其设置为您网页的背景颜色;如果这就是白色的,是这样的:

<input type="text" name="zsdifhs" value="<?= $q ?>" id="zsdifhs" /> 
<input type="text" name="q" value="<?= $tok ?>" 
    id="query" style="font-size: 1pt; color: white;" /> 

或者将其设置为一些不可见的保证金,如:

<input type="text" name="zsdifhs" value="<?= $q ?>" id="zsdifhs" /> 
<input type="text" name="q" value="<?= $tok ?>" 
    id="query" style="margin-left: 9000px;" /> 

在处理脚本时,如果$_POST['q']设置为任何东西,除了你传递的令牌,你知道它几乎肯定被脚本修改了。为了避免被发现,你也可以使用JavaScript来改变CSS显示状态,如果你感觉真的很聪明,你甚至可以做一些花哨的回报一样用虚假结果的静态页面(这是相当有效),而不是实际的处理查询,而不是返回一个错误或拒绝访问页面,该脚本可能会发现,允许攻击者检查,看看有什么错和调整自己的脚本。

+0

什么答案国王Skippus thx你:)代码看起来不错,如果我实现你的第一个代码$ _POST ['q'] =令牌传入/可以监视结果脚本/机器人/用户?有没有办法将日志存储到txt文件或什么? – user1792805

+0

生成页面时,创建一个随机的字母标记并将其存储在某处(如在数据库中的标记表中)。例如,给定页面加载的标记可能是“Moacoaco”,您可以将其插入到标记表中。然后,当表单被提交时,检查提交的标记以查看它是否存在于标记表中。如果是这样,请删除它并继续正常处理脚本。如果没有,那么你可能有一个脚本运行你的页面。此时,我可能会返回一个伪造结果的静态页面,记录它,并在10次左右尝试后,开始阻止IP地址。 –

+0

我看到国王Skippus,即使这是现在的一个很好的解决方案,有太多的步骤来完成这一点,因为我不是PHP开发人员,我明白,但我没有经验实现,因为你说,我知道它不是一个艰难的事情编码,但需要更多的学习.... thx你无论如何m8 – user1792805