我有一个ColdFusion页面,我希望将一些管理级jQuery函数包含在经过身份验证的用户中,但我不确定实现此目的的最佳实践是什么。目前,我在document.ready中有一个cfif语句,用于检查用户是否已登录(会话范围),如果是,则运行cfinclude到包含其他代码的文件。
这是完成业务最安全的方式还是有更好的方法?
$(document).ready(function(){
<cfif #variable# IS "authenticated">
<cfinclude template="includes/theadminfunctions.js">
</cfif>
// a bunch of other code here...
});
答案 0 :(得分:2)
我可能会用不同的方式包装它
<cfif variable IS "authenticated">
<script src="includes/theadminfunctions.js.cfm"></script>
</cfif>
<script>
$(document).ready(function(){
//other code goes here
});
</script>
基本上这只是使用脚本include来处理页面,因为它可能是纯粹的js。只是在语义上看起来更正确,除非你的include目录不允许获取请求......
因此,我还要将您的theadminfunctions.js页面添加一个身份验证检查,方法是将其转换为.js.cfm页面。这样,没有人可以抓住您的功能并手动包含它们而无需身份验证。还要确保锁定js函数正在调用的任何API,以要求经过身份验证的用户。
答案 1 :(得分:1)
好的,首先要指出的是cfif
实际上并不在document.ready
函数中。就CF服务器而言,JS只是文本,与HTML或其他任何东西都没有区别。
CFML在服务器上运行并生成文本(HTML / JS),然后通过互联网传递给Web服务器,然后用户的浏览器将文本解释为HTML + JS。
CF的一些功能可以通过隐藏一些来回来模糊它们之间的区别,但重要的是要知道实际发生了什么:你的CFML生成文本/代码,但不直接与JavaScript交互。 / p>
但无论如何,回到主要问题......你做得好的方式,但不一定是最好的方式。 JavaScript应该位于单独的文件中,以便可以单独缓存/刷新页面。此外,根据您的JS可以包含的内容,您可能希望阻止对文件本身的访问。
由于您正在使用CF级别的登录检查,所以这样做的方法是为您的JS使用CFM文件,并在文件顶部添加一个检查。
我可能会这样做:
<script type="text/javascript" src="includes/common.js"></script>
<cfif (logincheck) >
<script type="text/javascript" src="includes/loggedin.js.cfm"></script>
</cfif>
然后在loggedin.cfm
内你会:
<!--- Check again for authentication, and exit if not. --->
<cfif NOT (logincheck) >
<cfabort/>
</cfif>
<!--- Tell the browser this is a JS file (default is HTML) --->
<cfcontent reset type="text/javascript"/>
// js admin functions...
$(document).ready(function(){...});
<!--- Ensure debugging is always off to prevent the JS errors it would otherwise cause. --->
<cfsetting showdebugoutput="false" />
<!--- (you can consider a <cfabort/> here, depending on if you want onRequestEnd to run or not) --->