首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当远程访问时,ColdFusion CFC是否非常安全?

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

Stack Overflow用户
提问于 2011-08-19 05:27:27
回答 4查看 3.3K关注 0票数 5

我使用的是ColdFusion 9和jQuery。

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

我把这个放在页面的顶部:

代码语言:javascript
复制
<cfajaxproxy cfc="brands" jsclassname="jsApp">

下面是一些登录后使用的CFC:

代码语言:javascript
复制
<!--- 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>

这是将数据发布到CFC的jQuery。

代码语言:javascript
复制
$("#AddBrand").click(function() {
    NewBrand = $("#NewBrand").attr("value");
    var jro = new jsApp();
    jro.addBrand(NewBrand);
});

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-08-19 05:57:05

不需要,access='remote‘不需要仅用于检索数据,但它确实需要谨慎使用,并了解其安全含义。

以你现在设置的方式,任何人都可以调用将一些东西插入到你的数据库中(假设没有其他的访问控制,我们没有看到)。因此,您可能应该实现某种类型的访问控制来保护此功能和其他功能。

现在我假设你没有在你的质询中加上“容易”两个字,而我会加上“实际”两个字。当涉及到安全性时,很少有“简单”的。

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

  1. 如果您使用的是<cflogin>,则可以将roles="<Your Admin role name>"添加到函数中。我从来没有尝试过,但我怀疑它会起作用。(就我个人而言,由于几个原因,我不喜欢这种方法,但它是一个选项)
  2. 您可以将某种授权码放在函数的顶部。

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

我也不喜欢这种方法。

  1. 您可以使用ColdFusion 9中App.cfc的新onCFCRequest()方法来截取请求,并在授权例程中运行它们。这比选项2干净。我想说这是最简单的选项,而且会有效地工作,但我个人更喜欢选项4。
  2. ColdSpring项目有一些很棒的工具,可以自动创建和使用远程代理对象,这些对象还可以通过面向方面的编程(AOP)结合安全性。远程代理和AOP的组合非常强大,可以让您在不公开真正的底层对象的情况下创建远程方法,并拦截和授权对这些方法的每个请求,而不必将代码插入到每个方法中。事实上,这些方法本身甚至没有意识到它们是安全的。

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

票数 5
EN

Stack Overflow用户

发布于 2011-08-19 05:48:31

好吧..。请记住,如果您有一个可远程访问的方法...任何人都可以调用它。不仅仅是你的AJAX代码。CF服务器不知道请求是否来自您的AJAX代理,也不知道它们是否来自其他任何人,只是进行远程调用。

鉴于此方法执行DB插入,我认为您在这里有点不自在。但是,即使使用读取类型调用,这也是适用的。您需要记住,默认情况下,任何人都可以进行远程调用并执行读取。

您真正需要做的是将某种类型的身份验证和授权放在适当的位置,以便只有经过批准的请求才能进行远程调用。让用户以某种方式建立一个会话(比如登录),并且只接受来自授权会话的远程请求。

票数 3
EN

Stack Overflow用户

发布于 2011-08-19 06:07:37

如果您正在检查是否有人在您的Application.cfc文件中登录,那么这是很好的。AJAX请求就像任何其他请求一样,它将首先通过Application.cfc。

您可以通过在onRequestStart()中放置一个abort并查看没有插入任何内容来测试这一点。它可能会无声无息地失败,不是最优雅的解决方案,但它会工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7114366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档