2009-05-22 4 views
6

Una delle grandi caratteristiche dei CFC è la possibilità di riutilizzare il codice sia per la pagina .cfm diretta che per le app Flex.Come proteggere le funzioni di accesso = "remoto" nei CFC dai ficcanaso?

Una di queste app che ho sviluppato utilizza Flex per le sue funzionalità di creazione di grafici e ha bisogno di accedere a una funzione 'getResults()' nel cfc.

Tutto questo contenuto è dietro un meccanismo di autenticazione, ma dal momento che il CFC aprirsi a una richiesta di wsdl:

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

e sarà effettivamente restituire i risultati al browser se la query URL è realizzato correttamente:

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

Quali tecniche sono state utilizzate per proteggere il cfc dall'accesso diretto A MENO CHE la richiesta provenga direttamente dal processore CFML O da Flex Remoting?

risposta

4

È possibile utilizzare alcune variabili dell'ambito CGI per verificare da dove proviene la richiesta.

cioè: CGI.REMOTE_HOST, CGI.REMOTE_ADDR

Quindi, si sarebbe probabilmente costruire una nuova funzione con un accesso = proprietà "pubblica", che controlla i valori di tali variabili con un elenco di valori validi per il vostro server. Se restituisce true, si esegue la richiesta e se restituisce false, si genera/restituisce una sorta di errore.

+0

Si potrebbe anche probabilmente garantire la richiesta con una sorta di credenziali per aggiungere un altro muro sottile di fastidio. –

+0

Penso che questa sia la strada da percorrere. Sto utilizzando CGI.SCRIPT_NAME per verificare se il browser accede direttamente al CFC. Se lo sono, ottengono lo stivale. –

3

vorrei suggerire di aggiungere un gestore OnRequestStart al file Application.cfc, ed eseguire un controllo lì ... cosa che controllo è dipende dal modello attuale, ma alcuni buoni suggerimenti sarebbe quello di controllare cgi .remote_user (se autenticato) o forse memorizzando qualcosa nell'ambito della sessione?

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

Suppongo che sto anche cercando di proteggere lo specifico cfc dall'essere manipolato da qualcuno che è già autenticato/autorizzato –

1

Una cosa che preferisco fare è di avere un solo argomento per ogni metodo - XML ​​o Struct - e richiedono un certo nome del nodo/oggetto ad essere presente in quel XML o Struct.

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

    <cfreturn myXML /> 
</cfif> 

2

Cosa succede ad usare l'attributo nuovi ruoli? Chiunque visiti il ​​tuo sito ottiene automaticamente i ruoli cflogin = "pubblico".

0

appena incontrato questa domanda, mentre alla ricerca di qualcosa di diverso e ho pensato di aggiungere il mio 2p:

Ho un app utilizzando un CFC remoto che io voglio solo essere disponibili per gli utenti registrati 'admin'. In questo caso, il controllo della variabile CGI passerebbe comunque agli utenti guest dell'app.

Quando un utente amministratore esegue il login, prendo un hash del proprio ID sessione e tempo di accesso e lo memorizzo nel database e nell'ambito della sessione. Quando raggiungo il CFC remoto, trasmetto l'hash come variabile e lo confronta con il database degli utenti admin.

Se un record ritorna, so che l'utente corrente è admin e continuo con la richiesta.

Problemi correlati