【发布时间】:2018-07-26 15:20:45
【问题描述】:
我们已经知道可以使用外部代理工具修改 URL 和 FORM 范围变量。
例如,如果有人提出这样的请求 - http:\\website\index.cfm?a=1&b=2
这样可以将值添加到.cfm 页面的 URL 范围内。
同样有任何方法可以在 ColdFusion 中添加/更改请求范围的值,而无需在代码中明确设置。
我问这个是因为我们在 CFM 页面中有这样的代码。
<cfset request.uploadFileDir = application.fileDir & "\upload" />
<cffile action="upload" accept="application/pdf" destination="#REQUEST.uploadFileDir#" filefield="brochure" nameconflict="makeunique"/>
安全团队表示上述代码存在漏洞,因为 JAVA 中的 REQUEST 范围可以被外部代理工具篡改/更改。而且由于 ColdFusion 是基于 JAVA 构建的,ColdFusion 的REQUEST也可以被外部代理工具篡改。这是一个正确的假设吗? JAVA 和 ColdFusion REQUEST 作用域一样吗?
最后是主要问题 - 是否有任何方式对示例中上述页面的外部请求,修改 REQUEST 范围或更准确地说是 REQUEST.uploadFileDir 变量?
【问题讨论】:
-
他们说 java
request的哪一部分可以被篡改?使用 jsp/servlets,我得到的印象是request范围有两个部分:get/setParameter() 和 get/SetAttribute()。 “参数”更像是 URL 范围,就像你说的,可以修改。而“属性”是本地服务器变量,无法修改 AFAIK。 stackoverflow.com/a/5243798/8895292 -
我的观点是请求范围变量只能在编程代码中定义和赋值。这意味着它们不能直接更改。但是,如果您从表单或 url 范围分配值,则可以间接更改它们。在你的情况下,看看
REQUEST.uploadFileDir是如何接收它的价值的。 -
使用范围注入的攻击者可能会从 url 或表单中传入变量。 Pete Freitag 有一篇关于如何在此处完成以及如何减轻威胁的简短文章:petefreitag.com/item/834.cfm
-
"而"属性"是本地服务器变量" ...所以CF的请求范围更类似于"属性",并且只能在服务器上修改。因此,只要
application.fileDir不使用客户端提供的值(如硬编码字符串等),它就是安全的。 -
@Ageax 我猜他们说的是“参数”。在 ColdFusion 中,您可以使用“URL”(获取查询字符串)和“FORM”(获取 POST 数据)范围来检索它们。根据您提供的链接,ColdFusion 中的“REQUEST”范围似乎更像 JAVA 中的“ATTRIBUTE”,并且无法修改。感谢您提供初步参考。
标签: java security coldfusion websecurity