Question

J'ai un site web écrit en ColdFusion qui contient à la fois les pages Web interactives habituelles et certaines tâches sont exécutées par le planificateur des FC. La mise en page est dir

/
/app
/scheduledTasks

Je voudrais les tâches de pouvoir utiliser tous les mêmes paramètres, etc. créés dans le application.cfc intérieur / app donc je propose que tout le répertoire / scheduledTasks dans / app. Le problème est que ce application.cfc utilise le mécanisme de cflogin et mon propre journal sous forme. Le planificateur CF vous permet de fournir seulement un nom d'utilisateur et mot de passe pour l'authentification HTTP de base. Les tâches planifiées ne seront jamais passé. Comment puis-je résoudre ce problème ou est-il une meilleure approche pour commencer?

Je me suis demandé sur la recherche à une variable CGI dans OnRequestStart de mon application.cfc comme l'agent utilisateur, l'adresse IP à distance et / ou une valeur magique de l'URL param et si tous sont là, la sécurité de by-pass depuis que je " savoir »c'est le planificateur de CF à l'autre extrémité. Ce n'est pas une grande sécurité, mais il peut être acceptable.

J'ai aussi demandé de créer une nouvelle application.cfc dans ma racine que le application.cfc dans / app hérite de. Je laisse les tâches où ils sont et mettre une nouvelle application.cfc là aussi qui hérite des choses communes de la racine. Cela augmente la complexité et si j'ai eu des problèmes lors de l'accès aux CFC à l'intérieur de / app / cfc de / scheduledTasks.

Quelqu'un at-il eu un problème similaire et a résolu le problème?

Était-ce utile?

La solution

laisser les tâches de planification dans leur propre dossier comme vous avez actuellement il de la racine du site.

créer un application.cfc dans le dossier scheduletasks qui prolonge celui dans le répertoire des applications comme ceci:

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

surcharger la méthode onrequeststart et mettre dans votre authentification comme ceci:

<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>

est la sécurité très basique mais faire le travail. personnaliser à votre goût.

Autres conseils

Spontanément, je créerais un rôle personnalisé pour l'application prévue. Puis, dans l'application principale, appliquer automatiquement lorsque la demande provient du serveur local.

ColdFusion tâches planifiées passent certaines données dans les informations de CGI, y compris:

HTTP_USER_AGENT = CFSCHEDULE

HTTP_USER_AGENT est fakeable donc la question suivante est de déterminer la façon dont vous avez besoin un accès sécurisé au dossier. Voulez-vous que CF pour exécuter ces tâches? Ou voulez-vous les exécuter à l'extérieur aussi bien? Juste votre ordinateur? Etc. Une fois qui est déterminé, vous pouvez coder pour la solution et rip747 est un bon donc je ne vais pas suggérer quoi que ce soit d'autre! ;)

Je vais simplement vérifier que la demande provient d'une adresse IP locale (si vous exécutez le programme dans le même serveur ...) ..... un autre (je crois mieux) solution est ce que je normallydo pour permettre webservices ou routines de surveillance étant utilisés à l'extérieur et sans connexion:

vous application.cfc, méthode onApplicationStart, mettre quelque chose comme:

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

Ensuite, sur votre onSessionStart (ou quelle que soit la méthode que vous utilisateur pour empêcher l'accès non autorisé et rediriger pour vous connecter:

<!--- 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 .......

Certains avantages de cette méthode sont les suivants: 1. Si le logiciel de l'appelant ne met pas en oeuvre cookie et maintient l'état de session, cela fonctionne. 2. si le logiciel de l'appelant ne maintient session, l'accès est accordé aux pages protégées passant cfid & CFTOKEN dans l'URL d'appel. 3. si elle est très flexible et sans entretien autre que d'ajouter un nouveau répertoire et éventuellement DETRUIRE L'APPLICATION ... (j'utiliser

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

sur la méthode de onRequestStart et

<cfset StructClear(application)>

comme ma première ligne sur la méthode onApplicationStart.

it helps!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top