Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 为什么是Net::HTTP';如果在生产中使用,设置调试输出是否危险?_Ruby_Security_Http_Logging - Fatal编程技术网

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现在被打印在屏幕上或文件上。我称之为“敏感”数据。