Apache flex 如何保护访问权=";“远程”;窥探者在CFC中的功能?

Apache flex 如何保护访问权=";“远程”;窥探者在CFC中的功能?,apache-flex,flex3,coldfusion,remoting,cfc,Apache Flex,Flex3,Coldfusion,Remoting,Cfc,CFCs的一个重要特性是能够将代码重新用于直接的.cfm页面和Flex应用程序 我开发的一个这样的应用程序使用Flex绘制图表,需要访问cfc中的“getResults()”函数 所有这些内容都在身份验证机制之后,但由于cfc将向wsdl请求开放自己: 如果URL查询编制正确,则会将结果返回到浏览器: 除非请求直接来自CFML处理器或Flex远程处理,否则人们使用了哪些技术来保护cfc不被直接访问?您可以使用一些CGI范围变量来检查请求来自何处 ie:CGI.REMOTE\u HOST,CG

CFCs的一个重要特性是能够将代码重新用于直接的.cfm页面和Flex应用程序

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

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

如果URL查询编制正确,则会将结果返回到浏览器:


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

您可以使用一些CGI范围变量来检查请求来自何处

ie:CGI.REMOTE\u HOST,CGI.REMOTE\u ADDR


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

虽然有点老了,但我还是查阅了Bill Purcell关于保护CF应用程序的注释。确保CFC的安全已经提到


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

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

我更喜欢做的一件事是,每个方法(XML或Struct)只有一个参数,并且要求在XML或Struct中存在特定的节点/对象名称


找不到必需的参数。

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

在寻找其他内容时遇到这个问题,并认为我应该添加我的2p:

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

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


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

您也可以使用某种凭据来保护请求,以增加另一层麻烦。我认为这是一种方法。我使用CGI.SCRIPT\u NAME来测试浏览器是否直接访问CFC。如果他们是,他们就会被解雇。我想我也在试图保护特定的cfc不被已经认证/授权的人操纵
<cfif NOT StructKeyExists(arguments.myArgs, "requiredParam")>
    <cfxml name="myXML">
         <error>
             <message>Required parameter not found.</message>
         </error>
    </cfxml>

    <cfreturn myXML />
</cfif>