我从我的错误报告服务收到了很多关于IP欺骗攻击的电子邮件,而且频率越来越高。如果我正确理解,当请求设置一个HTTP报头,指定请求来自的IP地址不是原始IP地址时,就会发生这种情况。
错误消息如下所示:
IP spoofing attack?!HTTP_CLIENT_IP="10.212.0.172"HTTP_X_FORWARDED_FOR="10.212.0.172, 68.180.224.232"
如果我正确地阅读了这个错误消息,那么这个错误消息中的两个IP地址是本地IP地址(10.x.x.x)和一个Yahoo!IP地址(68.180.224.232)。
我不确定我是否正确的阅读,但似乎这可能是由雅虎爬虫造成的。错误报告在许多不同的URL上,这使它看起来像一个爬虫。而且,这似乎是一个合法的请求,因为它是通过外部IP路由的内部IP。
我的问题是:
雅虎更新(Update):我查看了请求参数,用户代理确实是雅虎爬虫:
Mozilla/5.0 (兼容;Yahoo!浆糊;http://help.yahoo.com/help/us/ysearch/slurp)
发布于 2020-11-18 21:47:34
如何确定这些请求是合法的还是恶意的?
IP欺骗本身并不危险,但它主要用于DDoS (分布式拒绝服务)攻击,将IP地址屏蔽到不同的IP地址,使其呈现分布式。您可以使用这个创业板这里来计算出任何一个IP地址都是机器人/爬虫/蜘蛛。
如果是恶意的,允许这些GET请求有什么害处?
通过允许来自欺骗IP的GET请求,您很容易被DDoS‘’ed和您的服务器上的负载将增加,如果您有自动缩放打开,您将不得不花费更多。
无论怎样,我如何防止这些错误发生(除了关闭电子邮件通知)?我需要找到阻止IP地址的方法吗?如果这是合法的请求呢?我需要设置某种白名单吗?
请参考这个答案这里,它详细说明了解决这个问题的最佳方法。我有另一种方法,我将在下面解释。
我还没有测试下面的代码,但简而言之,它检查两个标头是否都存在,如果是,则检查它们是否相等。如果这两种情况都为真,则可以引发异常或重定向到状态代码为400的错误页,由您决定。
def ip_spoofing_check
if request.env['HTTP_CLIENT_IP'] && request.env['HTTP_X_FORWARDED_FOR']
if request.env['HTTP_CLIENT_IP'] != request.env['HTTP_X_FORWARDED_FOR']
response.status = 400
response = {:status => false, :message => "IP Spoofing Attempt"}
respond_to do |format| format.json { render json: response} end
end
end
end
不要忘记在应用程序控制器的before_action中调用此函数。
祝好运!
发布于 2014-01-22 12:00:30
也许不是一个完整的答案,但我一直在使用这个gem作为异常通知,它支持过滤出爬虫引发的异常
https://stackoverflow.com/questions/21291959
复制相似问题