我的任务是研究将.cfm文件存储在Web根目录之外的可能性作为进一步的安全措施。 (我不是在讨论CFC,而是会出现在URL字符串中的文件。)
我认为我可以在Application.cfc中使用OnRequest()的属性来做到这一点,但没有运气。
我试过这个:
<cffunction name="OnRequest" access="public" returntype="void" output="true">
<cfargument name="TargetPage" type="string" required="true"/>
<cfinclude template="C:/test#arguments.TargetPage#"/>
<cfreturn/>
</cffunction>
然后我将test.cfm
置于C:\test
内并尝试http://localhost/test.cfm
。这给了我一个“找不到文件”的错误。
然后我创建了一个名为“test”的C:\test
ColdFusion映射,并因此更改了我的CFINCLUDE:
<cfinclude template="/test#arguments.TargetPage#"/>
不幸的是我遇到了同样的错误。
那么,我可能会追求什么呢? (Windows Server 2008和IIS以防万一.ColdFusion 9。)
我知道我可以在我的index.cfm中加入CFINCLUDE并传递http://www.example.com/?file=test.cfm
之类的网址,但我不想这样做。
这里有一些东西:如果我在我的网络根目录中放置一个空的test.cfm
,那么这是有效的。显然,我真的不想为我的每个文件放置空的存根(对于这个项目,最终会有数百个)。
答案 0 :(得分:3)
不要让你的车轮沿着这条路走下去,让我指出一个可能解决原始问题的可能更好的方向,但是从更优选/最佳实践的角度来看:
ColdFusion Sourceless Deployment
而不是试图让网站在根目录之外读取文件,而不是将源代码放到世界上。
答案 1 :(得分:2)
我认为使用onMissingTemplate而不是onRequest会更好。 http://help.adobe.com/en_US/ColdFusion/9.0/CFMLRef/WSc3ff6d0ea77859461172e0811cbec22c24-7d2a.html