如何保护来自窥探者的CFC中的访问=“远程”功能?

时间:2009-05-22 22:58:43

标签: flex flex3 coldfusion remoting cfc

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

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

6 个答案:

答案 0 :(得分:4)

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

即:CGI.REMOTE_HOST,CGI.REMOTE_ADDR

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

答案 1 :(得分: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>

答案 2 :(得分:2)

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

答案 3 :(得分: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>

答案 4 :(得分:0)

虽然有点旧,但我挖出了Bill Purcell关于保护CF应用程序的笔记。保护CFC已经提到了。

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

答案 5 :(得分:0)

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

我有一个使用远程CFC的应用程序,我只想登录'admin'用户。 在这种情况下,CGI变量检查仍会传递给应用程序的访客用户。

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

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