如果在生产中使用Net~HTTP设置debug_output为什么会有危险?

时间:2011-03-18 09:28:01

标签: ruby security http logging

Net::HTTP库中有一个非常有用的方法,可以调试HTTP请求。

以下是文档中提到的内容:

  

set_debug_output(output)

     

警告此方法会导致严重的安全漏洞。切勿在生产代码中使用此方法。

     

设置输出流以进行调试。

http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html#M001371

这里提到了什么安全漏洞?

4 个答案:

答案 0 :(得分:16)

查看代码,除了HTTP协议中的所有传递给您提供的流之外,没有其他安全漏洞。如果你不小心并且输出放在你不怀疑的地方,这可能会暴露你应用程序的内部工作。

恕我直言,文件中的陈述非常难,并没有提供有关安全漏洞的详细解释。我认为评论的内容应该是:

  

小心,坐在你的手上   在键入之前,因为设置了一个   debug_output将公开完整   HTTP协议(包括可能的   敏感信息)到流   传入。

长话短说:没有“隐藏”的安全漏洞。

答案 1 :(得分:5)

set_debug_output(output)可能会泄露敏感的用户数据。

在第https://github.com/ruby/ruby/blob/trunk/lib/net/protocol.rb#L159行和https://github.com/ruby/ruby/blob/trunk/lib/net/protocol.rb#L196行,所有流量都会返回到提供的output内,这可能会暴露会话ID,登录凭据,信用卡信息等......

在以下示例中,即使使用SSL,敏感数据也可能会显示$stdout$stderr

require "net/https"
require "uri"

uri = URI.parse("https://ssltest7.bbtest.net/")

http = Net::HTTP.new(uri.host, uri.port)
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_NONE

#SECURITY HOLE
http.set_debug_output($stdout)

request = Net::HTTP::Post.new(uri.request_uri)
request.set_form_data({"SENSITIVE" => "DATA"})

response = http.request(request)

More Net::HTTP examples

答案 2 :(得分:2)

这可能是由于设置调试将允许您的站点向攻击者泄漏更多信息。如果有人试图闯入,他们可以准确地看到他们造成的错误,从而更容易对您网站的工作方式进行逆向工程。

答案 3 :(得分:1)

除了信息曝光之外,还有其他一些可能的漏洞。

您可以使用这样一个事实,即打开的文件流可以写为注入代码的向量。通过发布请求删除有效负载。

您还可以快速填充磁盘,从而影响日志的可用性。

您可以利用日志解析器/文件查看器中的漏洞,您知道该漏洞将用于通过将漏洞利用注入要读取的文件来查看日志。

可能还有一些我无法想到的载体,但这足以让我不想这样做,除非它是非常临时的,你必须说服我没有别的生产方式。 / p>