当远程访问时,ColdFusion CFC是否非常安全?

Evi*_*mes 5 coldfusion jquery cfc

我正在使用ColdFusion 9和jQuery.

我是通过CFAJAXPROXY使用ColdFusion CFC的新手.我很好奇我的数据库是否存在风险以及我如何轻松修补安全漏洞.

我把它放在页面顶部:

<cfajaxproxy cfc="brands" jsclassname="jsApp">
Run Code Online (Sandbox Code Playgroud)

这是一些登录后使用的CFC:

<!--- ADD BRAND  --->
<cffunction name="addBrand" access="remote">
    <cfargument name="SiteID" required="true">
    <cfargument name="Brand" required="true">
    <cfscript>
        LOCAL.SiteID = ARGUMENTS.SiteID;
        LOCAL.Brand = trim(left(ARGUMENTS.Brand, 50));
    </cfscript>
    <cfquery name="GetBrands">
        INSERT INTO Brands(SiteID, Brand)
        VALUES      (<cfqueryparam cfsqltype="cf_sql_integer" value="#LOCAL.SiteID#">,
                    <cfqueryparam cfsqltype="cf_sql_varchar" value="#LOCAL.Brand#">)
    </cfquery>
    <cfreturn true>
</cffunction>
Run Code Online (Sandbox Code Playgroud)

这是将数据发布到CFC的jQuery

$("#AddBrand").click(function() {
    NewBrand = $("#NewBrand").attr("value");
    var jro = new jsApp();
    jro.addBrand(NewBrand);
});
Run Code Online (Sandbox Code Playgroud)

那么,这里有一个很大的安全漏洞吗?access ="remote"是否只能用于检索数据?

Jas*_*ean 5

不,access ='remote'不需要仅用于检索数据,但需要仔细使用并了解安全隐患.

你现在的方式,任何人都可以打电话给你的数据库插入一些东西(假设没有其他我们没有看到的访问控制).所以你可能应该实现某种类型的访问控制来保护这个和其他功能.

现在我假设你没有在你的问题中"轻易"提出这个词,我将把"实际上"这个词改为.在安全方面,很少有"简单".

因此,有几种方法可以保护这些方法.很大程度上取决于你想要做什么以及你已经做了什么.

  1. 如果您正在使用,<cflogin>您可以添加roles="<Your Admin role name>"到该功能.我从未尝试过这个,但我怀疑它会起作用.(就个人而言,我不喜欢这种方法有几个原因,但它是一个选项)

  2. 您可以在函数顶部放置某种授权代码.

<cfif NOT mySecurityCFC.isAuthorized(COOKIE.CFID,COOKIE.CFTOKEN)><cfreturn /></cfif>

我也不喜欢这种方法.

  1. 您可以onCFCRequest()在ColdFusion 9中使用App.cfc 的新方法来拦截请求并通过授权例程运行它们.这比选项2更清晰.我会说这是最简单的选择,并且可以有效地工作,但我个人更喜欢选项4.

  2. ColdSpring项目有一些很好的工具可以自动创建和使用远程代理对象,这些对象也可以通过面向方面编程(AOP)结合安全性.远程代理和AOP的组合非常强大,可以让您创建远程方法,而不会暴露真实的底层对象,并且可以拦截和授权对这些方法的每个请求,而无需将代码存储到每个方法中.事实上,这些方法本身甚至都不知道它们是安全的.

我会选择选项4.这可能听起来像是一个令人生畏的极其高级的过程,并且在某些方面它是,但实际上它比你想象的要容易得多.ColdSpring快速入门指南中概述了这些步骤.http://www.coldspringframework.org/index.cfm/go/documentation