Net::HTTP
库中有一个非常有用的方法,可以调试HTTP请求。
以下是文档中提到的内容:
set_debug_output(output)
警告此方法会导致严重的安全漏洞。切勿在生产代码中使用此方法。
设置输出流以进行调试。
http://ruby-doc.org/stdlib/libdoc/net/http/rdoc/classes/Net/HTTP.html#M001371
这里提到了什么安全漏洞?
答案 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)
答案 2 :(得分:2)
这可能是由于设置调试将允许您的站点向攻击者泄漏更多信息。如果有人试图闯入,他们可以准确地看到他们造成的错误,从而更容易对您网站的工作方式进行逆向工程。
答案 3 :(得分:1)
除了信息曝光之外,还有其他一些可能的漏洞。
您可以使用这样一个事实,即打开的文件流可以写为注入代码的向量。通过发布请求删除有效负载。
您还可以快速填充磁盘,从而影响日志的可用性。
您可以利用日志解析器/文件查看器中的漏洞,您知道该漏洞将用于通过将漏洞利用注入要读取的文件来查看日志。
可能还有一些我无法想到的载体,但这足以让我不想这样做,除非它是非常临时的,你必须说服我没有别的生产方式。 / p>