如果将Net :: HTTP的set_debug_output用于生产环境,为什么会有危险?

问题描述

|
Net::HTTP
库中有一个非常有用的方法,可以调试HTTP请求。 以下是有关文档的内容:   
set_debug_output(output)
     警告此方法会导致严重的安全漏洞。切勿在生产代码中使用此方法。      设置输出流以进行调试。 http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html#M001371 这里提到什么安全漏洞?     

解决方法

查看代码,除了HTTP协议中的所有内容都传递到您提供的流之外,没有其他安全漏洞。如果您不小心,并且将输出放置在您不怀疑的地方,则可能会暴露应用程序的内部运行情况。 恕我直言,文档中的声明非常难,并且没有提供有关安全漏洞的良好解释。我认为该评论应遵循以下内容:   要小心,坐在你的手上   输入之前,因为设置了   debug_output将公开完整的   HTTP协议(包括可能的   敏感信息)   那是传入的。 长话短说:没有“隐藏”的安全漏洞。     ,
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所有流量都返回给提供的任何“ 3”,并且可能暴露会话ID,登录凭据,信用卡信息等。 在下面的示例中,即使使用SSL,SENSITIVE DATA也可能暴露于
$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)
更多Net :: HTTP示例     ,可能是由于将debug设置为on会使您的站点向攻击者泄漏更多信息。如果有人试图闯入,他们可以准确地看到造成的错误,从而使反向工程更容易地进行您的网站工作。     ,除了信息公开之外,还有其他一些可能的漏洞。 您可以利用以下事实:打开了一个文件流,可以将其写入作为注入代码的向量。通过发布请求删除有效负载。 您还可以快速填充磁盘,从而损害日志的可用性。 您可以通过将漏洞利用注入将要读取的文件中,利用日志解析器/文件查看器中的漏洞,该漏洞已知将用于查看日志。 可能还有更多我想不到的向量,但这足以使我不想这样做,除非它是非常临时的,并且您必须说服我没有生产中的其他方式。