如何保护 CFC 中的 access="remote" 功能免受窥探?

Posted

技术标签:

【中文标题】如何保护 CFC 中的 access="remote" 功能免受窥探?【英文标题】:How to protect access="remote" functions in CFCs from snoopers? 【发布时间】:2010-10-28 08:56:23 【问题描述】:

CFC 的一大特点是能够将代码重用于直接 .cfm 页面和 Flex 应用程序。

我开发的一个这样的应用程序使用 Flex 的图表功能,需要访问 cfc 中的“getResults()”函数。

所有这些内容都隐藏在身份验证机制之后,但是由于 cfc 会向 wsdl 请求开放自己:

https://myserver.com/c/functions.cfc?wsdl

如果 URL 查询设计正确,实际上会将结果返回给浏览器:

https://myserver.com/c/functions.cfc?method=getResults&Term=2009&Course=Anatomy

人们使用了哪些技术来保护 cfc 不被直接访问,除非请求直接来自 CFML 处理器或来自 Flex Remoting?

【问题讨论】:

【参考方案1】:

您可以利用一些 CGI 范围变量来检查请求的来源。

即:CGI.REMOTE_HOST、CGI.REMOTE_ADDR

因此,您可能会构造一个带有 access="public" 属性的新函数,该函数会根据您的服务器的有效值列表检查这些变量的值。如果它返回 true,您将执行请求,如果它返回 false,您将抛出/返回某种错误。

【讨论】:

您也可以使用某种凭据来保护请求,以增加另一层烦恼。 我认为这是要走的路。我正在使用 CGI.SCRIPT_NAME 来测试浏览器是否直接访问 CFC。如果是,他们就会得到引导。【参考方案2】:

虽然有点老了,但我还是翻出了 Bill Purcell 关于保护 CF 应用程序安全的笔记。已提到保护 CFC。

http://www.bpurcell.org/blog/index.cfm?mode=entry&entry=978

【讨论】:

【参考方案3】:

我建议在您的 application.cfc 文件中添加一个 OnRequestStart 处理程序,并在那里执行检查...检查的内容取决于您当前的模型,但一些好的建议是检查 cgi.remote_user(如果经过身份验证)或者可能在会话范围内存储一些东西?

<cfif structKeyExists(session,"empID") and len(session.empid)>
  <!--- user is authenticated, process normally --->
<cfelse>
  <!--- abort request or sending meaningful error message --->
</cfif>

【讨论】:

我想我也在试图保护特定的 cfc 不被已经过身份验证/授权的人操纵【参考方案4】:

我更喜欢做的一件事是每个方法只有一个参数 - XML 或 Struct - 并且要求在该 XML 或 Struct 中存在某个节点/对象名称。

<cfif NOT StructKeyExists(arguments.myArgs, "requiredParam")>
    <cfxml name="myXML">
         <error>
             <message>Required parameter not found.</message>
         </error>
    </cfxml>

    <cfreturn myXML />
</cfif>

【讨论】:

【参考方案5】:

如何使用新的角色属性? 访问您网站的每个人都会自动获得 cflogin roles="public"。

【讨论】:

【参考方案6】:

刚刚在寻找其他东西时遇到了这个问题,并认为我会添加我的 2p:

我有一个使用远程 CFC 的应用程序,我只希望登录的“管理员”用户可以使用该应用程序。 在这种情况下,应用程序的来宾用户仍会通过 CGI 变量检查。

当管理员用户登录时,我会获取他们的会话 ID 和登录时间的哈希值,并将其存储在数据库和会话范围中。当我点击远程 CFC 时,我将哈希作为变量传递,并根据管理员用户的数据库检查它。

如果返回记录,我知道当前用户是管理员,我会继续请求。

【讨论】:

以上是关于如何保护 CFC 中的 access="remote" 功能免受窥探?的主要内容,如果未能解决你的问题,请参考以下文章

Ajax调用ColdFusion组件而不返回数据

SQL Server 2005:“保护”存储过程免受 MS Access 使用的 FMTONLY 模式的影响

密码保护 MS Access 报告文件

子类公有继承不能访问父类受保护属性? cannot access protected member

如何创建一个access数据库

如何在coldfusion cfc中接收JSON POST请求