8

我不断从我的服务器收到以下两个错误,我认为它们只是寻找潜在目标的机器人,但有谁知道我为什么会收到这些错误?我正在使用 SslRequirement 插件来确保登录/注册页面的所有点击都重定向到 SSL,因此所有这些对 root 的奇怪 https 请求都应该重定向到常规 http。


A ActionController::UnknownHttpMethod 发生在 application#index: quit 中,接受的 HTTP 方法是 get、head、put、post、delete 和 options

/usr/local/lib/ruby/gems/1.9.1/gems/actionpack-2.3.4/lib/action_controller/request.rb:35:in `request_method'

  • 路径信息:/
  • 远程地址:99.19.208.249
  • 远程端口:6376
  • 请求方法:连接
  • 请求_URI:/
  • 服务器端口:443
  • 服务器协议:HTTP/1.0
  • SERVER_SOFTWARE:阿帕奇

A ActionController::UnknownHttpMethod 发生在 application#index: CONNECT,接受的 HTTP 方法是 get、head、put、post、delete 和 options

/usr/local/lib/ruby/gems/1.9.1/gems/actionpack-2.3.4/lib/action_controller/request.rb:35:in `request_method'

  • HTTPS:开启
  • HTTP_X_FORWARDED_PROTO:https
  • 路径信息:/
  • 远程地址:91.209.196.76
  • 远程端口:50751
  • REQUEST_METHOD : 退出
  • 请求_URI:/
  • 服务器端口:443
  • 服务器协议:HTTP/0.9
4

5 回答 5

14

HTTP 代理服务器使用CONNECT命令指示客户端只想将套接字直接连接到另一台服务器;这通常用于通过 HTTP 代理隧道传输 TLS,但也可用于隧道传输几乎任何协议。

QUIT 不是 HTTP 命令,而是SMTP 命令。您可能从试图寻找开放中继以发送垃圾邮件的机器人获得这些命令;它试图确定您是否有一个开放的 SMTP 中继,或者一个开放的 HTTP 代理,它允许 CONNECT 命令也可用于隧道 SMTP 流量。

因此,您很可能只是被试图寻找开放中继的垃圾邮件僵尸网络攻击。我的建议是尽早放弃此类请求,不要担心它们。

于 2010-01-19T15:23:16.607 回答
0

连接:http ://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.9

QUIT 通常意味着“关闭连接”。

于 2009-12-13T06:43:46.567 回答
0
# Avoid annoying ActionController::UnknownHttpMethod exceptions like:
#
#   ActionController::UnknownHttpMethod) "CONNECT, accepted HTTP methods are get, head, put, post, delete, and options"
#
# Install this file in app/metal and these requests will receive a 405
# "Method Not Allowed" status and will be logged under `info'.
class IgnoreUnknownHttpMethod
  def self.call(env)
    [
     if ActionController::Request::HTTP_METHODS.include?(env["REQUEST_METHOD"].downcase)
       404 # Not Found
     else
       Rails.logger.info("Ignoring unknown HTTP method; #{env.inspect}")

       405 # Method Not Allowed
     end, {"Content-Type" => "text/plain"}, []]
  end
end

信用https://gist.github.com/remvee/600569

于 2014-10-17T18:46:13.303 回答
0

我刚刚注意到一些尝试连接到我的服务器的尝试如下,我们看到它以 QUIT 结束...

198.20.87.98 - - [22/Dec/2015:21:43:42 -0800] "GET / HTTP/1.1" 444 5666 "-" "-"
198.20.87.98 - - [22/Dec/2015:21:43:42 -0800] "GET /robots.txt HTTP/1.1" 444 5666 "-" "-"
198.20.87.98 - - [22/Dec/2015:21:43:42 -0800] "GET /sitemap.xml HTTP/1.1" 444 5666 "-" "-"
198.20.87.98 - - [22/Dec/2015:21:43:58 -0800] "quit" 405 5461 "-" "-"
  • 附带说明一下,我的服务器返回 444,这不是合法的 HTTP 代码。这意味着没有响应,我这样做是因为他们的“代理字符串”是空的。

查看IP地址,我发现了一个搜索引擎,可以搜索互联网上的东西。不是试图闯入本身的黑客。(似乎没有恶意。)我想他们正在检查的一些应用程序必须理解 QUIT。所以作为一个机器人,你想尝试一些看起来很奇怪的命令是有道理的,比如 CONNNECT 和 QUIT。应用程序可以支持的命令没有真正的限制,即使这些命令不是官方的 HTTP 命令。

如果你的应用程序不理解这些方法,那么什么都不会发生,所以你不应该为这些烦恼太多。

如果您的应用程序接收到这些方法,那么您可能希望在开始时编写一些内容来获取该方法并与 GET 和 POST(以及您支持的任何其他方法,如 DELETE 和 PUT)进行比较,如果它不匹配这些方法,那么回复 405 错误代码:“方法不允许”。

https://www.rfc-editor.org/rfc/rfc7231#section-6.5.5

如果您无法更改您的应用程序并且您不确定它是否可以对 CONNECT / QUIT 命中做出反应,那么您可以考虑使用诸如 mod_security for Apache2 之类的设置。

于 2015-12-28T05:50:54.573 回答
0

根据https://gist.github.com/remvee/600569上的 jturkel 。在 Rails 3.2 的非 http 操作中,我在 config/application.rb 的末尾添加了以下内容并解决了退出问题。

# silence ActionController::UnknownHttpMethod exceptions
ActionDispatch::ExceptionWrapper.rescue_responses.merge!( 'ActionController::UnknownHttpMethod' => :method_not_allowed )
于 2017-11-08T04:20:05.320 回答