6

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?

4

6 回答 6

4

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

即:CGI.REMOTE_HOST,CGI.REMOTE_ADDR

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

于 2009-05-22T23:26:23.323 回答
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>
于 2009-05-23T17:16:37.187 回答
2

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

于 2009-05-28T01:19:17.287 回答
1

我喜欢做的一件事是每个方法只有一个参数 - 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>

于 2009-05-26T13:24:02.690 回答
0

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

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

于 2009-05-22T23:48:56.260 回答
0

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

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

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

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

于 2012-06-20T11:31:13.580 回答