如果在生产中使用Net :: HTTP的set_debug_output是危险的?

Bog*_*iev 14 ruby security logging http

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

以下是文档中所说的内容:

set_debug_output(output)

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

设置输出流以进行调试.

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

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

xin*_*nit 16

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

恕我直言,文档中的声明非常难,并没有提供有关安全漏洞的良好解释.我认为评论应该是这样的:

在键入之前要小心并坐在你的手上,因为设置debug_output会将完整的HTTP协议(包括可能的敏感信息)暴露给传入的流.

长话短说:没有"隐藏"的安全漏洞.


Chr*_*ing 5

set_debug_output(output) 可以暴露敏感的用户数据.

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

在以下示例中,敏感数据可能会暴露要么$stdout或者$stderr即使当使用SSL

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)
Run Code Online (Sandbox Code Playgroud)

更多Net :: HTTP示例