在ColdFusion页面上将特定jQuery函数包含到经过身份验证/登录的用户的最佳方法是什么?

时间:2010-08-17 17:43:04

标签: jquery security coldfusion

我有一个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...
});

2 个答案:

答案 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) --->