敏感信息应该对窥探者隐藏,无论是在输入和输出时,还是在存储在系统中时。敏感信息当然包括信用卡号码、账户余额和家庭住址,在许多应用中也包括姓名、电子邮件地址和其他私人信息。
基于 Web 的应用程序应该加密所有与用户的包含敏感信息的通信;通常的方法是使用 “https:” 协议(基于 SSL 或 TLS 的 HTTP)。根据 HTTP 1.1 规范(IETF RFC 2616 第 15.1.3 节),使用 HTTP 协议的服务作者不应该使用基于 GET 的表单提交敏感数据,因为这会导致数据被编码在 Request-URI 中。许多现有的服务器、代理和用户代理会在某些地方记录请求 URI,而这些地方可能对第三方可见。相反,应该使用基于 POST 的提交,这才是为此目的而设计的。
这类敏感数据的数据库也应该在任何存储设备(例如磁盘上的文件)上进行加密。当然,这种加密并不能防止攻击者破解安全应用程序,因为显然应用程序也必须有一种访问加密数据的方式。然而,它确实提供了一些防御,以防止攻击者设法获取数据的备份磁盘,但没有获得用于解密数据的密钥。如果攻击者没有设法入侵应用程序,但设法部分入侵相关系统,仅仅足以查看存储的数据,它也提供了一些防御——同样,他们现在必须破解加密算法才能获取数据。在许多情况下,数据可能会在无意中传输(例如,核心文件),这也防止了这种情况。然而,值得注意的是,这并不像你想象的那么强大的防御,因为通常服务器本身可能会被破坏或攻破。