Domanda

Ho un sito web scritto in ColdFusion che contiene sia le solite pagine web interattive e alcuni compiti attraversano lo scheduler CF. Il layout è dir

/
/app
/scheduledTasks

mi piacerebbe i compiti per essere in grado di utilizzare tutte le stesse impostazioni, ecc creato nel Application.cfc interno / app quindi mi piacerebbe spostare questa directory intera / scheduledTasks in / app. Il problema è che che Application.cfc utilizza il meccanismo cflogin e il mio log in forma. Lo scheduler CF permette solo di fornire un nome utente e una password per l'autenticazione di base HTTP. Le operazioni pianificate non saranno mai ottenere passato che. Come posso risolvere questo o c'è un approccio migliore per cominciare?

Mi sono chiesto di guardare ad un certo variabile CGI in OnRequestStart di mio Application.cfc come ad esempio il programma utente, l'IP remoto, e / o un valore magico del param URL e se tutto ci sono, sicurezza di esclusione dal momento che " conoscere" è scheduler di CF all'altro capo del filo. Questo non è grande sicurezza, ma può essere accettabile.

Ho anche chiesto di creare una nuova Application.cfc nella mia radice che l'Application.cfc in / app eredita da. Lascerei le attività dove sono e mettere un nuovo Application.cfc là pure che eredita roba comune dalla radice. Questo aumenta la complessità e anche se ho avuto problemi quando si cerca di accedere ai CFC all'interno di / app / CFC / scheduledTasks.

Qualcuno ha avuto un problema simile e risolto?

È stato utile?

Soluzione

lasciare i compiti di pianificazione nella propria cartella, come attualmente si dispone che la radice del sito.

creare un Application.cfc nella cartella scheduletasks che si estende quella nella directory di applicazioni in questo modo:

<cfcomponent extends="/.apps/application">

sovraccaricare il metodo onrequeststart e mettere nella vostra autenticazione in questo modo:

<cffunction name="onRequestStart" returntype="void" access="public" output="false">
    <cfargument name="targetPage" type="any" required="true">
    <cfif not structkeyexists(url, "access") or not url.access eq application.ApplicationName>
        <cflocation url="/" addtoken="false">
    </cfif>
</cffunction>

Questa è la sicurezza molto semplice, ma otterrà il lavoro fatto. personalizzare a proprio piacimento.

Altri suggerimenti

Lì per lì, vorrei creare un ruolo personalizzato per l'applicazione prevista. Poi, nella vostra applicazione principale, si applicano automaticamente quando la richiesta proviene dal server locale.

ColdFusion operazioni pianificate passano alcuni dati nelle informazioni CGI tra cui:

HTTP_USER_AGENT = CFSCHEDULE

Ora HTTP_USER_AGENT è fakeable così la prossima domanda è determinare come sicuro è necessario accedere alla cartella. Vuoi solo CF per eseguire questi compiti? O vuoi eseguire dal di fuori come bene? Solo il tuo computer? Ecc Una volta che è determinato è possibile il codice per esso e rip747 di soluzione è una buona, quindi non ho intenzione di suggerire qualsiasi altra cosa! ;)

controllerò solo che la richiesta proviene da un IP locale (se si esegue il programma sullo stesso server ...) ..... un altro (io credo meglio) la soluzione è quello che ho normallydo per consentire webservices o routine di monitoraggio utilizzati esternamente e senza login:

Su di te Application.cfc, metodo onApplicationStart, mettere qualcosa di simile:

<!--- List of Directories Excluded from Login --->
<cfset application.ExcludedLoginDirs = "/monitoring/registration/wservices/">   

Poi sul onSessionStart (o qualunque metodo utente per impedire l'accesso non autorizzato e reindirizzare il login:

<!--- Find current directory --->
<cfset currentDir = listgetAt("-," & cgi.Script_Name, listLen("-," & cgi.script_Name, "/")-1, "/")>

<!--- Exclude LOGIN if user authenticated or Directory Excluded --->
<!--- In this code, I FORCE login if user is NOT autenticated AND directory is NOT excluded --->
<cfif Val(session.User_ID) EQ 0 AND ListFind(application.ExcludedLoginDirs, "#currDir#", "/") EQ 0> 
      ............Login..........
</cfif>

etc .......

Alcuni vantaggi di questo metodo sono: 1.Se il software chiamante non implementa biscotto e mantiene lo stato della sessione, funziona. 2. se il software chiamante non mantenere la sessione, l'accesso viene concesso alle pagine protette che passano CFID & CFTOKEN nell'url chiamata. 3. se molto flessibile e altra manutenzione al di aggiungere una nuova directory alla fine e distruggere l'applicazione ... (io uso

<cfif isDefined("url.destroyApp")>
     <cfset reinit = this.onApplicationStart()>
</cfif> 

sul metodo onRequestStart e

<cfset StructClear(application)>

come la mia prima linea sul metodo onApplicationStart.

Speranza che aiuta!

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