不,access ='remote'不需要仅用于检索数据,但需要仔细使用并了解安全隐患。
你现在的方式,任何人都可以打电话给你的数据库插入一些东西(假设没有其他我们没有看到的访问控制)。所以你可能应该实现某种类型的访问控制来保护这个和其他功能。
现在我假设你没有在你的问题中“轻易”提出这个词,我将把“实际上”这个词改为。在安全方面,很少有“简单”。
因此,有几种方法可以保护这些方法。很大程度上取决于你想要做什么以及你已经做了什么。
如果你正在使用 <cflogin> 你可以添加 roles="<Your Admin role name>" 到功能。我从未尝试过这个,但我怀疑它会起作用。 (就个人而言,我不喜欢这种方法有几个原因,但它是一个选项)
<cflogin>
roles="<Your Admin role name>"
您可以在函数顶部放置某种授权代码。
<cfif NOT mySecurityCFC.isAuthorized(COOKIE.CFID,COOKIE.CFTOKEN)><cfreturn /></cfif>
我也不喜欢这种方法。
你可以使用新的 onCFCRequest() ColdFusion 9中的App.cfc方法,用于拦截请求并通过授权例程运行它们。这比选项2更清晰。我会说这是最简单的选择,并且可以有效地工作,但我个人更喜欢选项4。
onCFCRequest()
ColdSpring项目有一些很好的工具可以自动创建和使用远程代理对象,这些对象也可以通过面向方面编程(AOP)结合安全性。远程代理和AOP的组合非常强大,可以让您创建远程方法,而不会暴露真实的底层对象,并且可以拦截和授权对这些方法的每个请求,而无需将代码存储到每个方法中。事实上,这些方法本身甚至都不知道它们是安全的。
我会选择选项4.这可能听起来像一个令人生畏和极高级别的过程,并且在某些方面它是,但它实际上比你想象的要容易得多。 ColdSpring快速入门指南中概述了这些步骤。 http://www.coldspringframework.org/index.cfm/go/documentation
以下是一种可以帮助保护远程访问的CFC不被“未授权”应用程序调用的方法。
的 使用 verifyClient() 或者cffunction属性 verifyClient="true" 强>
verifyClient()
verifyClient="true"
该 verifyClient() 方法和 verifyClient 属性确保调用请求包含Coldfusion为您的应用程序生成的加密安全令牌。当您使用CFC调用CFC时,会隐式提交该安全令牌以及您的数据 <cfajaxproxy> 。如果该令牌未包含在请求中,Coldfusion将抛出异常。
verifyClient
<cfajaxproxy>
<cffunction name="myMethod" access="remote"> <!--- Prevent requests that have not originated from this application ---> <cfset verifyClient() > ... </cffunction> <!-- Or ---> <cffunction name="myMethod" access="remote" verifyClient="true"> ... <cffunction>
** Railo 3.2.x不支持 verifyClient() 方法。如果需要,你必须自己模仿行为。
嗯...请记住,如果你有一个可以远程访问的方法...... 任何人 可以打电话给它。不只是你的AJAX代码。 CF服务器 不知道 请求是来自您的AJAX代理,还是来自其他任何人只是拨打远程电话。
如果这个方法有DB插入,我想你在这里有点开放。但这甚至适用于读取类型调用...您需要记住 - 默认情况下 - 任何人都可以进行远程调用并执行该读取。
你真正需要做的是进行某种身份验证和授权到位,因此只有受制裁的请求才能进行远程调用。让用户以某种方式建立会话(如登录),并仅接受来自授权会话的远程请求。
如果您正在检查某人是否已在您的Application.cfc文件中登录,那么这很好。 AJAX请求就像任何其他请求一样,将首先通过Application.cfc。
您可以通过在onRequestStart()中放置一个中止并看到没有插入任何内容来测试它。它可能会无声地失败,而不是最优雅的解决方案,但它会起作用。