Ruby 为什么是Net::HTTP';如果在生产中使用,设置调试输出是否危险?
Ruby 为什么是Net::HTTP';如果在生产中使用,设置调试输出是否危险?,ruby,security,http,logging,Ruby,Security,Http,Logging,Net::HTTP库中有一个非常有用的方法,可以调试HTTP请求 以下是文档对此的说明: 设置调试输出(输出) 警告此方法会导致严重的安全漏洞。切勿在生产代码中使用此方法 设置用于调试的输出流 这里提到的安全漏洞是什么?这可能是因为设置“调试”将允许您的站点向攻击者泄漏更多信息。如果有人试图破门而入,他们可以准确地看到他们造成的错误,从而更容易对网站的工作方式进行反向工程 看看代码,除了HTTP协议中的所有内容都被传递到您提供的流之外,没有其他安全漏洞。如果您不小心,并且将输出放在您不怀疑的地
Net::HTTP
库中有一个非常有用的方法,可以调试HTTP请求
以下是文档对此的说明:
设置调试输出(输出)
警告此方法会导致严重的安全漏洞。切勿在生产代码中使用此方法
设置用于调试的输出流
这里提到的安全漏洞是什么?这可能是因为设置“调试”将允许您的站点向攻击者泄漏更多信息。如果有人试图破门而入,他们可以准确地看到他们造成的错误,从而更容易对网站的工作方式进行反向工程 看看代码,除了HTTP协议中的所有内容都被传递到您提供的流之外,没有其他安全漏洞。如果您不小心,并且将输出放在您不怀疑的地方,这可能会暴露应用程序的内部工作 IMHO,文档中的声明非常难,并且没有提供关于安全漏洞的很好的解释。我认为评论应该大致如下: 小心,坐在你的手上 在键入之前,由于设置了 调试_输出将公开完整的 HTTP协议(包括可能的 敏感信息)发送到流 那是传进来的 长话短说:没有“隐藏”的安全漏洞。
设置调试输出(输出)
可能会暴露敏感的用户数据。
所有流量都返回到提供的任何输出,这可能会暴露会话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)
除了信息泄露之外,还有一些其他可能的漏洞
您可以利用这样一个事实,即有一个打开的文件流可以作为注入代码的向量写入。通过post请求丢弃有效负载
您还可以快速填充磁盘,从而影响日志的可用性
您可以利用日志解析器/文件查看器中的漏洞,通过向日志将要读取的文件中注入漏洞来查看日志
可能还有一些向量我想不出来,但这足够了,我不想这样做,除非这是非常临时的,而且你必须说服我在生产中没有其他方法。我不确定,可能是因为日志可能包括密码、电子邮件等敏感信息。让你访问(比如)你的银行账户的cookies现在被打印在屏幕上或文件上。我称之为“敏感”数据。