CFC的一个重要功能是能够为直接.cfm页面和Flex应用程序重用代码。
我开发的一个这样的应用程序使用Flex作为其图表功能,需要访问cfc中的'getResults()'函数。
所有这些内容都是认证机制的背后,但由于cfc将自己打开一个wsdl请求:
如果正确制作了URL查询,则会将结果返回给浏览器:
https://myserver.com/c/functions.cfc?method=getResults&Term=2009&Course=Anatomy
除非请求直接来自CFML处理器或来自Flex Remoting,否则人们使用哪些技术来保护cfc免受直接访问?
答案 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已经提到了。
答案 5 :(得分:0)
在寻找其他东西的同时遇到了这个问题并且认为我会添加我的2p:
我有一个使用远程CFC的应用程序,我只想登录'admin'用户。 在这种情况下,CGI变量检查仍会传递给应用程序的访客用户。
当管理员用户登录时,我会获取其会话ID和登录时间的哈希值,并将其存储在数据库和会话范围中。当我点击远程CFC时,我将哈希作为变量传递,并将其与管理员用户数据库进行核对。
如果记录回来,我知道当前用户是管理员,我继续请求。