1. 安全性
安全性是对于我们的程序非常重要,所以,我们必须检查聊天程序是否存在潜在的漏洞。我们的设计为服务器端防火墙后面的机器提供了两个接入点:
- 必须在服务器端防火墙中打开一个端口,以便推送客户端可以连接到Glacier2服务。客户端使用防火墙管理员定义的地址连接到防火墙;防火墙将这些连接转发给Glacier2服务。
- Web客户端与Web服务器进行通信,我们假定它运行在服务器端防火墙之后。运行在Web服务器上的组件代表客户端向聊天服务端发送Ice请求。
1.1. 推送客户端
Glacier2是一个通用的请求转发服务,默认情况下,将请求路由到任何后端主机上的任何Ice对象。Glacier2还提供了许多安全措施,应用程序可以用来限制客户端可用的对象和IP地址。聊天服务端使用这些功能,以便聊天客户端只允许向其指定的会话对象发送请求。此外,部署在同一主机上运行Glacier2和聊天服务器;因此,Glacier2的配置可以防止聊天客户端与任何其他后端主机通信。下图说明了这些限制:

我们的要求之一是客户和Glacier2之间的传输必须是安全的。这涉及使用诸如SSL或WSS的安全传输。
1.2. Web客户端
PHP聊天客户端不需要特别的安全预防措施,因为与Glacier2不同,它不是一个通用的请求转发器。相反,PHP客户端只是一个恰好在Web服务器内部运行的Ice程序。客户端不需要从网络用户那里获得地址信息,这会带来很大的风险。由于PHP客户端运行在服务器端防火墙之后,客户端可以配置聊天服务器的地址并直接与之通信。

我们的要求之一是客户端和服务器之间的传输必须是安全的。对于基于Web的客户端,这涉及在浏览器和Web服务器之间使用安全的HTTP(HTTPS)。如果在不受信任的主机上运行,PHP脚本在与聊天服务器通信时也可以使用安全传输。