我们已经知道可以使用外部代理工具修改URL和FORM范围变量。
例如,如果有人提出这样的请求 - http:\\website\index.cfm?a=1&b=2
这样可以将值添加到.cfm
页面的网址范围。
同样,有任何方法可以在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
变量?
答案 0 :(得分:4)
(从评论中提升这一点,以便更容易找到参考文献。)
他们说的Java请求的哪一部分可以被篡改?使用jsp / servlets,there seem to be 2 parts of the Request
scope:
参数 - request.get/setParameter()
Java的请求“参数”更像是ColdFusion的URL
和FORM
范围,就像你说的那样,客户端或外部工具可以修改它们。这可能是他们谈论客户端篡改时所考虑的问题。
属性 - request.get/setAttribute()
“属性”是本地服务器变量,无法在服务器外修改。 CF的“请求”范围更类似于此。它只能在服务器上修改,AFAIK。(显然,它仍然可以是manipulated indirectly as Dan said)。
如果您很好奇,请在DEV服务器using a .jsp and .cfm script上运行一些测试,以了解java的“请求”范围与ColdFusion的不同之处。
<强> TL; DR; 强>
我认为他们错了。 ColdFusion的“请求”范围与Java的不同。
答案 1 :(得分:3)
在OP的祝福下从评论中转移。
我认为请求范围变量只能在编程代码中定义和赋值。这意味着他们不能直接改变。但是,如果要从表单或URL范围指定值,则可以间接更改它们。在您的情况下,请查看REQUEST.uploadFileDir
如何获得它的价值。
更多信息。
请求范围可用于页面请求中使用的任何编程文件,例如实际页面,包含文件和自定义标记,以下是可以更改的示例。
request.foo = url.foo;
这是一个不能的例子。
if (this is a development ColdFusion enviornment)
request.dsn = "development database";
else
request.dsn = "production database";
一切都有时间和地点。我的大部分工作都没有使用请求范围。一个应用程序。