18.1.3 我们的系统

我们可以控制的领域只有自己的系统。在图18-1中,右边方框内的组件代表我们的系统。

这些组件可能分布在一个网络中,也可能存在于一台物理机器内。

当我们用来分发Web内容的第三方产品能够处理信息的安全时,就不用担心这些信息的安全性,它们是相当安全的。这些特殊软件的编写人员已经尽可能地考虑过了它们的安全性。只要正在使用一个著名产品的最新版本,通过Google或其他搜索引擎,就能够发现任何众所周知的问题。我们应该保持随时掌握这些信息。

如果安装和配置也是任务的一部分,那么就需要考虑软件安装和配置的方式。许多安全问题的出现都是由于没有遵循警告的结果,或者由于常规的系统管理问题引起(这是其他图书的主题)。买一本关于管理操作系统方面的图书,可以随时参考,或者雇佣一位专家级别的系统管理员都是很好的办法。

在安装PHP时,需要考虑一个特殊的问题,这就是以Web服务器的SAPI模块的方式安装PHP比以CGI接口的方式安装PHP更安全、更有效。

作为一个Web应用程序开发人员,需要考虑的主要问题是我们自己的脚本能够做什么或者不能做什么。通过Internet,应用程序会将什么样的重要数据传递给用户呢?我们要求用户将什么样的重要数据传递给我们自己呢?如果我们正在传输的信息是与用户之间的秘密信息或者要求中间媒介很难修改它们,那么就应该考虑使用SSL。

我们已经讨论过在用户的计算机和服务器之间使用SSL。此外,还应该考虑将数据从系统的一个组件传递到另一个组件的情况。一个典型的例子是MySQL数据库位于与Web服务器不同的机器上。PHP将通过TCP/IP连接MySQL服务器,这种连接是不加密的。如果这些机器都是在私有局域网上,那么需要确保局域网是安全的。如果这些机器是通过Internet进行通信的,系统将可能运行得比较慢,同时需要将这种连接当作基于Internet之上的其他连接一样处理。

当用户认为我们正在与他们进行交互,他们的确是在和我们进行交互,确保这一点是非常重要的。注册一个数字证书可以保护我们的访问者免受网络欺骗(那些冒充是我们网站的人),还可以允许我们在避免用户看到一个警告信息的前提下使用SSL,以及为在线用户提供一种值得信任的氛围。

我们的脚本仔细检查用户输入的数据了吗?我们是否关心了存储信息的安全性?在本章接下来的几节中,我们将逐一回答这些问题。