Ruby on rails Nginx-当我打开下划线\u in_标题时,需要采取哪些预防措施?

Ruby on rails Nginx-当我打开下划线\u in_标题时,需要采取哪些预防措施?,ruby-on-rails,nginx,Ruby On Rails,Nginx,我正在编写一个rails应用程序,并通过HTTP头传入一个自定义访问令牌。为了适应这一点,我需要在nginx.conf的_头中打开下划线_,以便代码运行。(见附件) 因为默认情况下此选项处于禁用状态,所以我假设打开它会带来一些安全风险。然而,我无法找到这些风险或担忧的解释。这些风险是什么?我如何在我的代码中说明它们 谢谢 根据 这样做是为了防止在将头映射到CGI变量时出现歧义,因为在这个过程中,破折号和下划线都映射到下划线 所以这看起来像是一个避免变量名之间冲突的问题。FWIW,适用条款特别允许

我正在编写一个rails应用程序,并通过HTTP头传入一个自定义访问令牌。为了适应这一点,我需要在nginx.conf的_头中打开下划线_,以便代码运行。(见附件)

因为默认情况下此选项处于禁用状态,所以我假设打开它会带来一些安全风险。然而,我无法找到这些风险或担忧的解释。这些风险是什么?我如何在我的代码中说明它们

谢谢

根据

这样做是为了防止在将头映射到CGI变量时出现歧义,因为在这个过程中,破折号和下划线都映射到下划线

所以这看起来像是一个避免变量名之间冲突的问题。FWIW,适用条款特别允许强调并声明:

HTTP头字段名转换为大写,所有出现的“-”替换为“\u1”,并在前面加上“HTTP\u1”以给出元变量名

因此,安全问题与“-”到“\u1”的转换过程以及接收应用程序如何访问用户代理变量有关。例如,“用户代理”将被服务器映射到“用户代理”,然后在PHP中(例如),CGI环境变量被访问为:

$_SERVER['HTTP_USER_AGENT']
在rails中:

request.env['HTTP_USER_AGENT']
那么,如果客户端发送“User\u Agent”而不是“User Agent”,会发生什么情况呢?下划线将保留在原位,然后“HTTP\u User\u Agent”将由客户端脚本显式设置(通常由浏览器设置)。以下2007年的帖子讨论了利用这一过程的可能性:

这篇文章表明,如果服务器应用程序“不安全地打印”标题值(到客户端浏览器),并且在示例中可能会执行javascript警报弹出窗口,则会出现问题。不过,这只是一个例子

问题是,这个问题还存在吗?嗯,是的。请参阅以下讨论Shellshock漏洞的文章,其中使用了相同的想法来利用BASH shell:

因此,如果您打算用较旧版本的BASH解析任何头文件,则需要注意Shellshock所呈现的漏洞。在一天结束时,您应该始终注意清理已发送到您的应用程序的超出您控制范围的任何数据值