CFC-Sicherheit

by kai on 08/05/2003



In ColdFusion Components lassen sich Funktionen mit dem Attribut “access” mit verschiedenen Sichtbarkeiten versehen. So bedeutet “access=remote” beispielsweise, dass die Funktionen als Webservice und via Flash Remoting verfügbar ist, “access=private” macht eine Funktion nur für andere Funktionen innerhalb der gleichen Instanz der CFC sichtbar. Ausserdem gibt es noch die Werte public und package.

Ein Ärgernis bei der Verwendung von “access=remote” war bislang immer die Tatsache, dass die entsprechende Methode automatisch als Webservice und für Flash MX verfügbar wurde. Man kann sich sehr leicht Fälle vorstellen, in denen man eine Methode aber beispielsweise nur für Flash-Zugriffe verfügbar machen möchte und nicht Templates die Möglichkeit geben möchte durch Anhängen des Suffixes “?WSDL” die Methode als XML-Webservices aufzurufen.Ein sehr guter Workaround wurde von Waldo Smeets, Sales Engineer bei Macromedia Benelux in seinem Blog beschrieben – bitte achtet auf den Disclaimer…;)

Here’s the hack we came up with to secure CFC’s with access=”remote” to be only called from Flash:

<cfcomponent>
<cffunction name=”isFlashCall” returnType=”boolean” access=”remote” output=”true”>
<cfset var fs = getPageContext().SymTab_findBuiltinScope(“Flash”)>
<cfreturn isDefined(“fs”)>
</cffunction>
</cfcomponent>

Disclaimer: It’s not 100% secure, but it’s a nice step. What it does is make sure the CFC was invoked through the Flash Remoting gateway. That way cfc’s can have access=”remote” and not be invoked on the url or via web services. However, the FR gateway is still wide open so someone can create a flash app locally to run against someone else’s FR gateway to access the CFC.

Comments on this entry are closed.

Previous post:

Next post: