2013-03-21 71 views
1

我无法谷歌在这个问题上有用的东西,所以我会很感激链接到在这个问题处理的文章,或直接在这里回答,要么罚款。防止搜索滥用​​

我在一个网站上实现了一个PHP/MySQL搜索系统,这个网站有很多访问者,所以我要实现一些限制,允许访问者在搜索字段中输入的字符长度和两次搜索之间所需的最短时间。由于我对这些问题很陌生,而且我不知道为什么通常会这样做的“真正原因”,所以我只假设字符最小长度是为了尽量减少数据库返回结果的数量而实现的,并且搜索之间的时间间隔将被执行,以防止机器人将垃圾邮件发送到搜索系统并减慢网站速度。是对的吗?

最后,如何实现两次搜索之间的最短时间的问题。我想出了一个解决方案,在伪代码,这是

  1. 设置的URL检测Cookie,其中搜索表单提交给
  2. 将用户重定向到URL在搜索结果应该是输出
  3. 检查测试cookie存在
    • 如果不是,输出自己是不是允许使用的搜索系统警告(可能是一个机器人)
  4. 检查一个cookie存在,告诉蒂姆最后的搜索
    • 如果这是不太有5秒前,输出一个警告,他应该再次搜索
  5. 搜索
  6. 设置与上次搜索到当前为止的cookie之前等待电子
  7. 输出搜索结果

这是做的最好的方法是什么?

我知道这意味着禁用cookies的访问者将无法使用搜索系统,但这些日子真的是个问题吗?我无法找到2012年的统计数据,但我设法找到了数据,说2009年有3.7%的人已经禁用了Cookie。这看起来不是很多,我想这些日子可能应该更少。

+0

“由于我对这些问题有所了解,并且我并不真正了解为什么通常会这样做的”真正原因“,”您认为可能没有必要吗?我不做任何工作或个人网站。 – 2013-03-21 00:31:59

+0

@Dagon我已经考虑过这个,我也没有实现过。但是这个特定的网站最近遭到了很多DDoS的攻击,客户对这个问题的未来问题感到害怕,所以我认为搜索滥用应该是另外一件事情,以防止... – 3Nex 2013-03-21 00:57:58

+0

如果你想花时间修复不存在的问题 - 玩的开心! – 2013-03-21 01:01:05

回答

0

“只有我假设字符最小长度是为了最小化数据库返回结果的数量而实现的”。你的假设是绝对正确的。它通过迫使用户思考,他们希望搜索什么来减少潜在结果的数量。

就垃圾邮件发送您的搜索,您可以实施captcha,最常用的是recaptcha。如果您不想立即显示验证码,则可以跟踪(通过会话)用户提交搜索的次数,并且如果在特定时间范围内发生X次搜索,则渲染验证码。

我见过像SO和thechive.com这样的网站实施这种类型的策略,其中captcha不会立即呈现,但会在呈现阈值时呈现。

+0

是的,Youtube也有评论。好好想想,会考虑的。谢谢。 – 3Nex 2013-03-21 01:01:47

0

这样可以防止搜索引擎将您的搜索结果编入索引。这样做的一个更清洁的方式是:

  1. 获取IP在哪里搜索起源
  2. 商店知识产权在缓存系统,如分布式缓存和查询作出
  3. 如果另一个查询是从同一发送时间IP和小于X秒只需通过拒绝或者让用户等待

可以做,以提高性能的另一件事是看看分析,看看哪些查询是由最经常和缓存的,所以当一个请求进入服务缓存的版本,而不是完整的数据库查询,解析等...

另一个天真的选择是让脚本每天运行1-2次,运行所有常见查询并创建用户在创建特定搜索查询时碰到的静态HTML文件,而不是点击D b。

+0

自从何时goolge bot填写并submt网站搜索? – 2013-03-21 00:39:13

+0

据我所知,如果有人链接:http://example.com?q = myQuery可能有一种可能性,谷歌将该页面添加到该特定域的抓取列表 – 2013-03-21 00:42:16

+0

只会是一个问题,如果是唯一的联系。你的IP想法不会工作,IP!=人。一个人可以是很多ip,一个ip可以是成千上万的人 – 2013-03-21 00:44:59