ColdFusion tarefas programadas - como proteger ao usar ?
-
16-09-2019 - |
Pergunta
Eu tenho um website escrito em ColdFusion que contém ambos os habituais páginas web interativas e algumas tarefas executadas pelo programador CF. O dir layout é
/
/app
/scheduledTasks
Eu gostaria as tarefas a ser capaz de usar todas as mesmas configurações, etc. criados no interior Application.cfc de app / então eu gostaria de mover esse diretório inteiras / scheduledTasks em / app. O problema é que que Application.cfc usa o mecanismo cflogin e meu próprio registro no formulário. O programador CF só permite que você fornecer um nome de usuário e senha para autenticação HTTP Basic. As tarefas agendadas nunca vai passar por isso. Como posso resolver este ou há uma abordagem melhor para começar?
Já se perguntou sobre a olhar para algumas variáveis ??CGI em OnRequestStart do meu Application.cfc como o agente do usuário, o IP remoto, e / ou um valor mágico no param URL do e se todos estão lá, a segurança do desvio desde que eu " sabe" que é programador do CF na outra extremidade. Esta não é grande segurança, mas isso pode ser aceitável.
Eu também quis saber sobre a criação de um novo Application.cfc em minha raiz que o Application.cfc em herda / app de. Eu deixaria as tarefas onde elas estão e colocar um novo Application.cfc lá também que herda material comum a partir da raiz. Isso aumenta a complexidade embora e eu tive problemas ao tentar acessar os CFCs dentro de / app / CFC a partir de / scheduledTasks.
Alguém já teve um problema semelhante e resolvido isso?
Solução
deixar as tarefas de programa em sua própria pasta como você tem atualmente-lo fora da raiz do site.
criar um Application.cfc nas scheduletasks pasta que estende a um no diretório apps assim:
<cfcomponent extends="/.apps/application">
sobrecarregar o método OnRequestStart e colocar em sua autenticação assim:
<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>
Esta é a segurança muito básico, mas vai começar o trabalho feito. personalizar ao seu gosto.
Outras dicas
De imediato, eu iria criar uma função personalizada para a aplicação prevista. Então, em sua aplicação principal, aplicá-lo automaticamente quando o pedido vem do servidor local.
ColdFusion tarefas agendadas passar em certos dados nas informações do CGI, incluindo:
HTTP_USER_AGENT = CFSCHEDULE
Agora HTTP_USER_AGENT é fakeable então a pergunta seguinte é determinar o quão seguro você precisa de acesso para a pasta. Você só deseja CF para executar essas tarefas? Ou você quer para executá-los de fora também? Apenas o seu computador? Etc Uma vez que é determinado você pode codificar para ele e solução das rip747 é uma boa, então eu não vou sugerir qualquer outra coisa! ;)
Vou verificar apenas que o pedido vem de um IP local (se você estiver executando o cronograma no mesmo servidor ...) ..... outro (creio melhor) solução é o que eu normallydo para permitir webservices ou monitoramento rotinas sendo usado externamente e sem login:
Por que você Application.cfc, método onApplicationStart, colocar algo como:
<!--- List of Directories Excluded from Login --->
<cfset application.ExcludedLoginDirs = "/monitoring/registration/wservices/">
Em seguida, em seu OnSessionStart (ou qualquer método que você usuário para impedir o acesso autorizado não e redirecionamento para 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 .......
Algumas vantagens neste método são: 1.Se o software chamador não implementar cookie e mantém o estado da sessão, ele funciona. 2. se o software chamador FAZ manter a sessão, o acesso é concedido para páginas protegidas passar CFID & CFTOKEN na url chamada. 3. se muito flexível e nenhum outro do que adicionar um novo diretório, eventualmente, e destruir o APLICAÇÃO ... (eu uso
manutenção<cfif isDefined("url.destroyApp")>
<cfset reinit = this.onApplicationStart()>
</cfif>
no método OnRequestStart e
<cfset StructClear(application)>
como a minha primeira linha no método onApplicationStart.
Espero que ajude!