Coldfusion MX技巧精华收集(1)第3/5页

 更新时间:2007年03月15日 00:00:00   作者:  

内容: 

为应用程序加上安全防护
ColdFusion 企业版本身内建了一套安全防护架构。然而如果你无法取得企业版的 ColdFusion 服务器,或者不想使用内建的安全机制,那么你也可以建构一套自己的应用程序安全防护功能。在这里我们提供一些实作想法,好让你有个开端。 

首先你得先建立好一个样版(template),内含一个使用者登入窗体,该窗体里面必须包含 UserName 以及 Password 这两个字段。请把这个档案储存成为 loginform.cfm,日后当使用者未经过认证时,该使用者便会被导向到这个登入页面。 

在 ColdFusion 环境里面,一个应用程序的相关定义与参数设定是记录在 application.cfm 这个档案里面的,而这个档案正是用来放置应用程序范围安全机制相关程序的最佳地点。在这里我们将会使用一个使用者状态(session)变量来记录使用者的认证状态(虽然你也可以改用客户端变量(client variable)来实作这项功能)。 

<CFPARAM NAME="SESSION.VALIDATED" DEFAULT="No"> 
一旦我们定义好 SESSION.VALIDATED 这个变量,接下来便可以检查使用者是否已经通过认证: 

<CFIF SESSION.VALIDATED IS "No"> 
一旦我们发现使用者尚未通过认证,我们便可以透过一连串程序代码来检查使用者是否来自登入窗体页面,然后比对使用者输入的帐号与密码是否有效,最后便可让使用者通过认证程序。在这个程序的任何一个阶段里面,如果使用者未经授权,我们便把该使用者导向到登入窗体页面,并且停止执行接下来的任何程序代码。请参考下面这段范例程序,里面的批注会说明每个步骤的功能与用处。 

<!--- 如果使用者是来自登入窗体页面... --->
<CFIF ISDEFINED("FORM.Password") AND ISDEFINED("FORM.UserName")>
<!--- 根据接收到的使用者名称,到数据库中查询该使用者的资料 --->
<CFQUERY NAME="CheckPassword" DATASOURCE="mydsn">
SELECT UserName, Password
FROM Users
WHERE (UserName = '#FORM.UserName#')
</CFQUERY> 

<!--- 如果密码正确,则授与该使用者存取这个应用程序的权力 --->
<CFIF FORM.PASSWORD IS #CheckPassword.Password#> 

<!--- 让使用者通过认证 --->
<CFSET SESSION.VALIDATED = "Yes"> 

<!--- 如果密码不正确,则再次显示登入窗体 --->
<CFELSE> 

<CFINCLUDE TEMPLATE="/mypath/loginform.cfm">
<CFABORT> 

</CFIF> 

<!--- 如果窗体变量是处于未定义状态,表示使用者并非来自于登入窗体页面,因此我们显示登入窗体。 --->
<CFELSE> 

<CFINCLUDE TEMPLATE="/mypath/loginform.cfm">
<CFABORT> 

</CFIF> 

<!--- 如果 SESSION.VALIDATED 变量的值已经是 YES 了,表示使用者之前已经通过认证。略过安全性检查,继续执行应用程序的其它部分。 --->
</CFIF> 

如果你把上面这段程序代码放在 application.cfm 里面,那么它便可以为你的整个应用程序提供基本的安全机制。

相关文章

最新评论