Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 防止滥用搜查_Php_Search_Optimization_Bots - Fatal编程技术网

Php 防止滥用搜查

Php 防止滥用搜查,php,search,optimization,bots,Php,Search,Optimization,Bots,我无法在谷歌上搜索到关于这个主题的有用信息,所以我希望能找到与这个主题相关的文章的链接,或者在这里直接回答,两者都可以 我在一个有很多访问者的站点上用PHP/MySQL实现了一个搜索系统,因此我将对访问者在搜索字段中输入的字符长度以及两次搜索之间所需的最短时间实施一些限制。由于我对这些问题有点陌生,并且我不知道为什么通常会这样做,所以我只是假设实现字符最小长度是为了最小化数据库返回的结果数量,搜索之间的时间间隔是为了防止机器人对搜索系统进行垃圾邮件攻击,从而降低网站速度。是这样吗 最后,如何实现

我无法在谷歌上搜索到关于这个主题的有用信息,所以我希望能找到与这个主题相关的文章的链接,或者在这里直接回答,两者都可以


我在一个有很多访问者的站点上用PHP/MySQL实现了一个搜索系统,因此我将对访问者在搜索字段中输入的字符长度以及两次搜索之间所需的最短时间实施一些限制。由于我对这些问题有点陌生,并且我不知道为什么通常会这样做,所以我只是假设实现字符最小长度是为了最小化数据库返回的结果数量,搜索之间的时间间隔是为了防止机器人对搜索系统进行垃圾邮件攻击,从而降低网站速度。是这样吗

最后,如何实现两次搜索之间的最短时间。我用伪代码提出的解决方案是

在提交搜索表单的URL处设置测试cookie 将用户重定向到应该输出搜索结果的URL 检查测试cookie是否存在 如果没有,则输出一条警告,说明他可能是机器人,不允许使用搜索系统 检查是否存在告知上次搜索时间的cookie 如果这是少于5秒前,输出警告,提示他应该等待,然后再搜索 搜索 将上次搜索时间设置为当前时间的cookie 输出搜索结果 这是最好的方法吗


我理解这意味着禁用cookies的访问者将无法使用搜索系统,但这真的是一个问题吗?我找不到2012年的统计数据,但我设法找到数据显示2009年有3.7%的人禁用了cookie。这似乎不多,我想现在应该更少了

只有我的假设,即实现字符最小长度是为了最小化数据库将返回的结果数量。你的假设完全正确。它通过强迫用户思考他们希望搜索的内容来减少潜在结果的数量

至于向你的搜索发送垃圾邮件的机器人,你可以实现一个,最常用的是。如果不想立即显示验证码,可以通过会话跟踪用户提交搜索的次数,如果在某个时间范围内出现X次搜索,则呈现验证码


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

这样你就阻止了搜索引擎为搜索结果编制索引。一种更干净的方法是:

获取源于搜索的IP 将该IP存储在缓存系统(如memcached)中,并记录进行查询的时间 如果另一个查询是从同一个IP发送的,并且传递时间少于x秒,只需拒绝它或让用户等待即可 为了提高性能,您可以做的另一件事是查看分析,查看哪些查询最频繁,并缓存这些查询。因此,当收到请求时,您可以提供缓存版本,而不是进行完整的数据库查询、解析等


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

因为我对这些问题有点陌生,我真的不知道这样做的真正原因,您是否考虑过可能没有必要?我不在任何工作或个人网站上使用它。@Dagon我考虑过这一点,以前也从未实现过。但是这个特定的网站最近遭受了很多DDoS攻击,客户担心将来会出现类似的问题,所以我认为搜索滥用应该是另外一件要防止的事情……如果你想花时间修复不存在的问题,那就玩吧!从什么时候开始goolge机器人填写和订阅站点搜索?据我所知,如果有人链接,则不会这样做:谷歌可能会将该页面添加到该特定域的爬网列表中。如果这是唯一的链接,那么这只会是个问题。你的ip想法行不通,ip=人一个人可以是许多ip,一个ip可以是数千人是的,当然不是,我说这是最好的选择。这是一个简单的选择,我发现它提高了相当多的性能。然而,如果你觉得这个答案是错误的,我就把它去掉。谢谢两位。虽然我想迈克·珀塞尔的回答解决了我们两种解决方案的问题。是的,Youtube也有这样的评论。好的想法,会考虑的。非常感谢。