管理和安全
如果一个系统不能被管理,它就不是一个好系统。以前的“网络礼节”将礼貌作为一种荣誉,而且人们都把自己和团体紧密结合起来,这样的日子已经远去了。现在系统被黑客入侵、骚扰、或其他形式的攻击,不幸的是,大多数系统都停留在初级等级上。在一个应用程序或者网络系统中,对于挖掘安全漏洞等缺陷是没有什么好说的。不断探索才是他们值得认真考虑的,然而有很多人却只是为了寻找“乐趣”才这么做。这需要一个外部接口程序,它独立于主系统运行,能够完全控制应用程序的数据和用户。就聊天系统而言我们要能够踢出用户、使用户的信息适当、使聊天室安全等。
注意并不是所有列出的特性都能在CD-ROM的代码中实现基础的管理系统是完整的操作函数。但是我们希望你能够用自己觉得合适的特性练习和扩展基础代码。如果你还没有对大程序进行过扩展工作,那么现在我们就鼓励你获得这样的一个实战经验。
这里聊天程序的一个问题就是:我们如何定格管理程序?有如下方法:
• 网络等级:我们可以过滤连接的用户。
• PHP等级:我们可以阻止用户登录到聊天室中。
• 数据库等级:我们可以丢弃用户数据库中的信息。
• IRC等级:我们可以使用I R C的本地网络管理特性。
网络等级
网络等级上的安全模式只允许两种可能性:允许或不允许一个连接。这可以通过使用防火墙或者是其他的I P检测来识别。这种方法的功能很有限,而且复杂,不安全,所以不是我们所期望的。
PHP/Web服务器等级
We b服务等级上的安全模式允许用户连接到服务器,但是可以通过密码来限制登录(或者其他不同的方法)。它基本上解决了是否允许一个连接的问题,但也不是非常令人满意。
但是这种方法可以仿效用户禁令。I R C通用的禁令也就是K - l i n e s和G - l i n e s(局部和全局用户禁令),不能用在基于We b的聊天系统上。唯一可被禁止的地址是We b服务器的地址,它能够彻底地禁止整个网络接口。为了能够过滤特殊用户,应该在P H P等级上评估连接。
数据库等级
数据库等级是一种完全不同的解决方案。用户可以登录和聊天,但是他们的通话和信息在数据库中过滤。或者是一个外部的工具或者是聊天的源代码检查是否允许用户“说话”和做一些事情,基于这些推断,决定是否允许他或者她的信息插入到数据库中。但是这个策略要求主聊天代码非常严密而且具有综合性,它也缺乏韧性(有一些笨拙),不易实现。
IRC等级
I R C提供了建立在服务器代码中的局部管理特性和网络协议(我们希望你能够阅读R F C,熟悉这些可能性)。一般的用户都可以进行管理。有三个I R C等级是可以利用的:
• 通道处理程序。这些处理程序有管理通道的控制权。它们可以踢出用户、不让他们聊天、禁止他们登录等等(这个等级对所有用户都是开放的)。
• IRC处理程序。这些处理程序有管理网络的控制权(但控制不了通道)。它们可以让用户断线、禁止他们登录、建立网络连接等等(这个等级只对特殊用户开放)。
• 服务。服务能够管理通道但不能管理网络,也不能由一般用户执行。它们还需要特殊的登录程序(这个等级只对特殊用户开放)。
可以看到, I R C等级的管理可以通过用户独立于主聊天系统运行来实现。拥有I R C处理程序和通道处理程序的独立用户状态是我们所需管理系统应具特性的完美结合。基本上,最初只有I R C处理程序状态是必需的。因此,只要管理用户获得I R C处理程序状态,就可以通过从通道中切断所有的用户来获得任何地方的通道处理程序状态。这不算是一个非常好的方法,但比修改I R C服务代码以使I R C处理程序具有与通道处理程序相同的权限更有效,也更通用。
执行
聊天管理的执行被设计得与主聊天脚本程序非常相似。一个初始程序启动时带有p h p I R C的帮助,它记录到I R C中,而且试着把自己作为一个I R C处理程序注册。然后它等待从We b接口传来的进一步的命令。这些命令与由数据库支持的R P C中的命令相似(远程过程调用)。初始程序将不断的查询一个数据库中包含输入命令的列表。这些命令被We b接口放在数据库中,由一个函数名、一个通话I D和一个参数数组组成。一旦这个初始程序在数据库中找到一个新的命令时,它就执行这个命令,然后把这个命令的执行结果写入到通话I D的输出列表中。因而, We b接口只需要用一个自产生的通话I D写入一个命令,然后等待具有和通话I D相同I D的结果数据在输出列表中弹出即可(如图所示)。这种方法允许对初始程序进行弹性远程控制。