我有一个网站写在包含常用的交互式网页和一些任务均通过CF调度运行的ColdFusion。通过dir布局是

/
/app
/scheduledTasks

我想的任务,以便能够使用所有相同的设置等在创建的Application.cfc内/应用程序,所以我想给整个/ scheduledTasks目录移动到/应用程序。问题是,那个的Application.cfc使用cflogin机制和我自己的日志形式。在CF调度程序只允许您提供HTTP基本验证用户名和密码。该计划的任务将永远不会得到过去那种。我怎样才能解决这个或是否有更好的方法来开始?

我想知道在我的Application.cfc的OnRequestStart一些CGI变量看,如,因为我用户代理,远程IP,和/或在网址PARAM的,如果大家都在一个魔法值,绕过安全“知道”这是CF的另一端调度。这不是很大的安全,但它可能是可接受的。

我也想知道在我的根在/应用程序中的Application.cfc从继承创建一个新的Application.cfc。我要离开他们在哪里的任务,并把新的Application.cfc那里,以及从根继承共同的东西。这虽然增加了复杂性,并试图从/ scheduledTasks访问/应用/氟氯化碳的内部CFCs的时候我有问题。

有没有人遇到过类似问题并解决它?

有帮助吗?

解决方案

离开的计划任务在自己的文件夹,就像你现在有它关闭网站的根目录。

创建在scheduletasks文件夹,它扩展了一个在像这样apps目录的的Application.cfc:

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

重载onrequeststart方法和把你的认证像这样:

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

这是非常基本的安全性,但会完成这项工作。定制自己的喜好。

其他提示

随口说说,我会创造了调度的应用程序自定义角色。然后,在主应用程序,自动对时请求来自本地服务器应用它。

ColdFusion的计划任务传递在某些数据的CGI信息,包括:

HTTP_USER_AGENT = CFSCHEDULE

现在HTTP_USER_AGENT是fakeable所以接下来的问题是确定如何安全需要访问的文件夹。你只需要CF运行这些任务?或者你想从外面以及运行它们?把你的电脑?等一旦确定,你可以为它和rip747的解决方案代码是一个很好的,所以我不打算到别的什么建议! ;)

我将检查只是请求来自本地IP(如果你正在运行在同一台服务器...时间表)......另一个(我相信更好)的解决方案是什么,我normallydo允许web服务或在外部并且没有登录时使用监控例程:

在你的Application.cfc,方法onApplicationStart,放像:

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

然后在您的onSessionStart(或任何你的用户,防止非授权访问和重定向登录:

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

等等......

在该方法的一些优点是: 1.如果主叫方软件没有实现饼干和维护会话状态,它的工作原理。 2.如果主叫方软件并保持会话,访问权限授予通过CFID&CFTOKEN呼叫URL保护的页面。 3.如果非常灵活,不超过最终增加新的目录和破坏应用程序的其他维修......(我用

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

在onRequestStart方法和

<cfset StructClear(application)>

作为我在onApplicationStart方法第一行。

希望它能帮助!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top