2

大家好,社区,

我有一个流量不错的网站,在我分析了 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代码或类似的东西吗?

非常感谢

4

1 回答 1

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 显示状态,如果您觉得自己很聪明,您甚至可以做一些花哨的事情,例如返回一个带有虚假结果的静态页面(这非常有效),而不是实际处理查询而不是返回错误或访问被拒绝的页面,脚本可能会检测到,从而允许攻击者检查错误并调整他们的脚本。

于 2012-12-28T23:48:04.990 回答