Unit 11:安全的界面

安全性十分重要,因为将 WEB 服务器放在 Internet 上意味着任何人都可能访问这个服务器。敏感的信息必须受到保护以防止无权访问它们的人查看,同时对有权限或被允许的人开放。所以我们要编写安全的界面,对进入界面的用户进行必要的认证。ColdFusion 提供了多种安全机制,可以利用它们编写安全的界面。

使用应用级变量

在讲应用级变量前,先讲一下 Cold Fusion 的 WEB 应用程序的框架。Cold Fusion 的应用是由多个应用程序组成的,在 Cold Fusion 的应用框架中有一个文件叫做: Application.cfm,在此文件中可以定义:

  • 应用的名称

  • Application 和 session 变量

  • 定制错误页 Custom error pages

  • 数据源

等等。当任何一个 Cold Fusion 的应用程序被调用时,Cold Fusion 都先要查找Application.cfm 这个文件,一旦这个文件被找到,先执行这个文件。正因为 Cold Fusion 的这特性,所以可以利用这个文件来进行用户认证。就象进入 Cold Fusion 的 Administrator 一样,在输入的密码口令正确后才进入。

应用级变量是永久性变量,存储在服务器上的,可以指定失效日期和时间间隔。应用级变量只有使用 Application.MyVariable 引用后才被击活。它对个别指定的应用和所有访问 ColdFusion 服务器的应用有效。

使用 Cookies 变量

cookies 是客户机上存储的一个数据项,它由服务器软件产生并作为 HTTP 响应的一部分发送给浏览器,然后浏览器将其保存在一个本地文件中,服务器 cookies 可以存储在客户机上,用户也可以配置其浏览器不接受 cookies。当浏览器产生一个 HTTP 请求时,便会检查存储在客户机上的 cookies。Cookies 允许 WEB 应用程序在客户机上存储信息,并在后来得到该信息,这点十分有用。

CFCOOKIE 可以用来定义 cookies 变量,包括存在期限和安全问题。语法如下:

<CFCOOKIE NAME="cookie_name" //COOKIE 名称

VALUE="text"// COOKIE 值EXPIRES="period" //存在期限

SECURE="Yes/No" // 指出变量发送时是否加密,如果浏览器不支

持安全套接层(SSL), cookie 将不传送PATH="urls" // Cookie 有效的领域的 URL

DOMAIN=".domain" //指定 Cookie 有效的领域,例如.allaire.com>

如果你没有给 Cookies 变量设定存在期限,那么这个 Cookies 变量只有在浏览器打开时存在,浏览器关闭时它就不存在了。CFCOOKIE 定义的 Cookies 变量在浏览器关闭后不存储到 cookies.txt 中。

下面的例子建立一个变量叫 Cookie.User_ID 值是 2344,存在期限 100 天

<CFCOOKIE NAME="User_ID" VALUE="2344" EXPIRES="100">

要删除 Cookies 变量,将 EXPIRES 设为 now,这个 Cookies 变量将在用户关闭浏览器时删除。

在用户认证中,我们可以使用 Cookies 来存放用户名称和密码,规定密码使用的有效日期。并将这些 Cookies 定义在 Application.cfm 文件中,对用户进行认证。

使用 Session 变量

如果要为一次访问或一系列请求建立属于它自己的变量,使用 Session 变量,例如你可以使用 Session 变量存储用户网上购物车中的商品。

Session 变量开始于用户的第一个连接,结束于最后一个连接。每个用户的 Session 变量与用户本身是一一对应的,Session 不在网上传递,Session 变量和应用级变量一样, 存储在服务器内存中的,每个用户有一个 ClientID,服务器通过 ClientID 来识别用户并对应其 Session 变量,由于网络的无界性,服务器无法知道用户何时离开,所以 Session 变量可以设有超时。

例子:在线商店的 Application.cfm 文件中,定义购物车

<CFAPPLICATION NAME="CF40_STORE" SESSIONMANAGEMENT="Yes" SESSIONTIMEOUT="#CreateTimeSpan(0,1,30,0)#">

<!--- 建立手推车的 Session 变量 --->

<CFPARAM NAME="Session.StoreItems" DEFAULT="">

<CFPARAM NAME="Session.StoreQuantities" DEFAULT="">

注册信息可以放在 Cookie 变量中,也可以放在 Session 变量中,使用 Cookie 变量时,Cookie值会在网络中来回传送,可能会引起安全方面的问题,使用 Session 变量就没有这种问题; 但 Session 变量只在用户访问同一网站时有效,如果一段时间内不访问该网站 Session 变量自动清除。因为有此特性,所以使用 Session 变量存储在线商场的购物变量比使用 Cookie 变量更加安全有效;在处理 Login 变量时,Session 变量和Cookie 变量各有利弊。

练习题:

自己建立一个 Login 页。