Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.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
Mysql 如何处理使用站点内搜索的机器人程序,并用过多的请求溢出SQL?_Mysql_Get_Bots_Flooding - Fatal编程技术网

Mysql 如何处理使用站点内搜索的机器人程序,并用过多的请求溢出SQL?

Mysql 如何处理使用站点内搜索的机器人程序,并用过多的请求溢出SQL?,mysql,get,bots,flooding,Mysql,Get,Bots,Flooding,最好的做法是不使用洪水限制来骚扰用户,但同时阻止机器人进行自动搜索 发生了什么事: 我对奇怪的搜索行为有了更多的了解,我终于有时间去发现它是谁。它是157.55.39.*也称为Bing。这很奇怪,因为当检测到_GET['q']时,会添加noindex 但问题是,它们正在减慢SQL server的速度,因为传入的请求实例太多了 到目前为止我所做的: 我已执行搜索洪水限制。但是,由于我是用会话cookie完成的,从上一次搜索的时间戳开始检查和计算,bing显然忽略了cookie并继续 最坏的情况是添

最好的做法是不使用洪水限制来骚扰用户,但同时阻止机器人进行自动搜索

发生了什么事:

我对奇怪的搜索行为有了更多的了解,我终于有时间去发现它是谁。它是157.55.39.*也称为Bing。这很奇怪,因为当检测到_GET['q']时,会添加noindex

但问题是,它们正在减慢SQL server的速度,因为传入的请求实例太多了

到目前为止我所做的:

我已执行搜索洪水限制。但是,由于我是用会话cookie完成的,从上一次搜索的时间戳开始检查和计算,bing显然忽略了cookie并继续

最坏的情况是添加reCAPTHA,但我不希望每次搜索时都出现“你是人类吗?”复选框。它只应在检测到洪水时出现。所以基本上,真正的问题是,如何检测来自客户端的太多请求,从而触发某种recaptcha来停止请求

编辑#1:
我目前处理的情况如下:

<?

# Get end IP
define('CLIENT_IP', (filter_var(@$_SERVER['HTTP_X_FORWARDED_IP'], FILTER_VALIDATE_IP) ? @$_SERVER['HTTP_X_FORWARDED_IP'] : (filter_var(@$_SERVER['HTTP_X_FORWARDED_FOR'], FILTER_VALIDATE_IP) ? @$_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'])));

# Detect BING:
if (substr(CLIENT_IP, 0, strrpos(CLIENT_IP, '.')) == '157.55.39') {

    # Tell them not right now:
    Header('HTTP/1.1 503 Service Temporarily Unavailable');

    # ..and block the request
    die();
}
我还在bing站长控制台里告诉大家,不要在流量高峰时打扰我们


总的来说,这立即显示了服务器资源使用的积极反馈。但是,我将为相同的查询实现总体洪水限制,特别是在涉及_GET的地方。因此,如果必应决定访问AJAX调用(例如:?action=upvote&postid=1)。

垃圾邮件是所有网站所有者都难以解决的问题。
有很多方法可以建立良好的保护,从非常简单的方法开始,以非常硬和强大的保护机制结束

但对于你,我现在看到了一个简单的解决方案。
使用robots.txt并禁止Bing spider爬网您的搜索页面。
你可以这样做

您的robots.txt文件如下所示:

User-agent: bingbot
Disallow: /search.html?q=
但这将完全阻止搜索引擎蜘蛛抓取您的搜索结果。
如果您只想限制此类请求,而不是完全阻止它们,请尝试以下方法:

User-agent: bingbot
crawl-delay: 10
这将迫使Bing仅每隔10秒抓取您的网站页面。
但是如果有这样的延迟,它一天只能抓取8640页(这是每天请求的非常少的数量)。
如果你擅长这个,那你就没事了。

但是,如果您想通过服务器本身手动控制这种行为,那么该怎么办呢?这样不仅可以保护搜索表单免受网络爬虫的攻击,还可以防止黑客的攻击?
他们每小时可以轻松地向您的服务器发送超过50000个请求。

在这种情况下,我向您推荐两种解决方案。
首先,将CloudFlare连接到您的网站,不要忘记检查您的服务器真实IP是否仍然可以通过以下服务使用,例如,因为许多具有CF保护的网站在这方面缺乏(甚至一度流行)。
如果您的活动服务器IP在历史上是可见的,那么您可以考虑更改它(强烈推荐)。 其次,您可以使用MemCached存储洪水数据,并检测某个IP是否查询过多(即30 q/min)。
如果他们这样做了,请在一段时间内阻止他们使用perform(通过MemCached)的机会。


当然,这不是您可以使用的最佳解决方案,但它可以工作,而且对您的服务器来说成本不高。

另外,假设我检测到157.55.39.*并将其阻止,那么最合适的响应是什么?HTTP 503或400?难道你没有robots.txt告诉体面的搜索者不要进入搜索路径吗?你有没有尝试不在cookies中存储洪水限制数据?因为这是非常愚蠢的解决方案,他们从不储存/使用饼干。一个非常简单的解决方案是使用MemCached来存储此类数据,但这在很大程度上取决于项目的大小(负载)。p、 您还可以通过robots更改搜索引擎的规则。TXT也许这是Webmasters.se上的更多主题,我在那里也看到了一些特定的阻止和重定向。@AbrahamTugalov我使用了临时快速肮脏解决方案的cookie。但我认为,使用memcache/redis检查洪水是唯一的解决方案。但最简单的解决方案是检查最后一个搜索查询时间戳吗?我希望/search.html被编入索引,但是/search.html?q=test not--on$\u GET['q']它添加了NOINDEX,FOLLOW。谢谢,总的来说,这解决了我的问题。我想补充一点,bing似乎和google具有相同的忽略URL参数。它允许您添加要忽略的“q”。但是Disallow:/search.html?q=我不知道,这将完全帮助我。很高兴提供帮助,如果您有解决方案,请接受答案。因此我对其进行了一些修改:
Disallow://*?q=*Disallow://*?*q=*
这将阻止所有可能的q参数。
User-agent: bingbot
crawl-delay: 10