6 Stimmen

Wie kann man access="remote" Funktionen in CFCs vor Schnüfflern schützen?

Eine der großartigen Eigenschaften von CFCs ist die Möglichkeit, den Code sowohl für eine reine .cfm-Seite als auch für Flex-Anwendungen wiederzuverwenden.

Eine solche Anwendung, die ich entwickelt habe, verwendet Flex für die Diagrammerstellung und benötigt Zugriff auf die Funktion "getResults()" in der cfc.

All diese Inhalte befinden sich hinter einem Authentifizierungsmechanismus, aber da sich die cfc für eine wsdl-Anfrage öffnet, kann man sie nicht einfach ignorieren:

https://myserver.com/c/functions.cfc?wsdl

und gibt die Ergebnisse tatsächlich an den Browser zurück, wenn die URL-Abfrage richtig gestaltet ist:

https://myserver.com/c/functions.cfc?method=getResults&Term=2009&Course=Anatomy

Welche Techniken wurden verwendet, um die cfc vor direktem Zugriff zu schützen, WENN die Anforderung direkt vom CFML-Prozessor oder von Flex Remoting kommt?

4voto

Jason Punkte 1163

Sie könnten einige der CGI-Bereichsvariablen verwenden, um zu überprüfen, woher die Anfrage kommt.

d.h.: CGI.REMOTE_HOST, CGI.REMOTE_ADDR

Sie würden also wahrscheinlich eine neue Funktion mit einer access="public"-Eigenschaft konstruieren, die die Werte dieser Variablen mit einer Liste gültiger Werte für Ihren Server abgleicht. Wenn sie den Wert "true" zurückgibt, würden Sie die Anfrage ausführen, und wenn sie den Wert "false" zurückgibt, würden Sie eine Art Fehler auslösen/zurückgeben.

3voto

Goyuix Punkte 22754

Ich würde vorschlagen, einen OnRequestStart-Handler zu Ihrer application.cfc-Datei hinzuzufügen und dort eine Prüfung durchzuführen... was diese Prüfung ist, hängt von Ihrem aktuellen Modell ab, aber einige gute Vorschläge wären, cgi.remote_user zu prüfen (wenn authentifiziert) oder vielleicht etwas im Sitzungsbereich zu speichern?

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

2voto

Phillip Senn Punkte 44773

Wie wäre es mit der Verwendung des neuen Attributs "Rollen"? Jeder, der Ihre Website besucht, erhält automatisch cflogin roles="public".

1voto

Eric Belair Punkte 10406

Eine Sache, die ich bevorzuge, ist nur ein Argument für jede Methode - entweder XML oder Struct - und erfordern einen bestimmten Knoten/Objektnamen in diesem XML oder Struct vorhanden sein.

<cfif NOT StructKeyExists(arguments.myArgs, "requiredParam")>
    <cfxml name="myXML">
         <error>
             <message>Required parameter not found.</message>
         </error>
    </cfxml>

    <cfreturn myXML />
</cfif>

0voto

Jas Panesar Punkte 6587

Obwohl schon etwas älter, habe ich Bill Purcells Notizen zur Sicherung von CF-Anwendungen im Allgemeinen ausgegraben. Securing CFC's erwähnt haben.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X