Domanda

Una delle grandi funzionalità dei CFC è la possibilità di riutilizzare il codice sia per una pagina .cfm semplice che per le app Flex.

Una di queste app che ho sviluppato utilizza Flex per le sue capacità di creazione di grafici e necessita dell'accesso a una funzione "getResults()" nel cfc.

Tutto questo contenuto è dietro un meccanismo di autenticazione, ma poiché il cfc si aprirà a una richiesta wsdl:

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

e restituirà effettivamente i risultati al browser se la query dell'URL è stata creata 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 non provenga direttamente dal processore CFML O da Flex Remoting?

È stato utile?

Soluzione

Si potrebbe utilizzare alcune delle variabili di ambito CGI per controllare dove la richiesta è venuta da.

es: 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 server. Se restituisce vero, si dovrebbe eseguire la richiesta e se restituisce falso, si dovrebbe gettare / restituire una sorta di errore.

Altri suggerimenti

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 immagazzinare qualcosa nello scope di sessione?

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

Cosa succede ad usare l'attributo nuovi ruoli? Tutti che visita il tuo sito viene automaticamente ruoli cflogin = "pubblico".

Una cosa che preferisco fare è avere un solo argomento per ciascun metodo - XML ​​o Struct - e richiedere che un determinato nome di nodo/oggetto sia presente in quell'XML o Struct.

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

    <cfreturn myXML />
</cfif>

Anche se un po 'vecchio, ho scavato note di Bill Purcell sulla sicurezza delle applicazioni CF in generale. Protezione CFC sono menzionati.

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

Proprio imbattuto in 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 variabile CGI sarebbe ancora passare per gli utenti ospiti della app.

Quando un utente amministratore accede, prendo un hash del loro ID di sessione e di accesso di tempo e negozio che nel database e il campo di applicazione della sessione. Quando mi ha colpito il CFC a distanza, mi passa l'hash come una variabile e controllo contro il database di utenti di amministrazione.

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top