HTTP - 安全性
HTTP 用于互联网上的通信,因此应用程序开发者、信息提供者和用户应该了解 HTTP/1.1 中的安全限制。本讨论不包括对这里提到的问题的明确解决方案,但提供了一些减少安全风险的建议。
个人信息泄露
HTTP 客户端通常掌握大量个人信息,例如用户的姓名、位置、邮件地址、密码、加密密钥等。因此,应非常小心防止这些信息通过 HTTP 协议无意泄露给其他来源。
所有机密信息都应以加密形式存储在服务器上。
透露服务器的具体软件版本可能会使服务器更容易受到针对已知存在安全漏洞的软件的攻击。
作为网络防火墙门户的代理服务器应特别注意传输标识防火墙后主机的头部信息。
'From' 字段中发送的信息可能与用户的隐私利益或其网站的セキュリティ策略冲突,因此在用户无法禁用、启用和修改该字段内容的情况下,不应传输该字段。
如果引用页面是通过安全协议传输的,客户端不应在(非安全)HTTP 请求中包含 Referer 头部字段。
使用 HTTP 协议的服务作者不应使用基于 GET 的表单提交敏感数据,因为这会导致数据被编码到 Request-URI 中。
基于文件和路径名的攻击
文档应被限制为仅返回 HTTP 请求所预期的那些文档,即服务器管理员意图提供的文档。
例如,UNIX、Microsoft Windows 和其他操作系统使用 '..' 作为路径组件来表示当前目录的上级目录。在此类系统中,HTTP 服务器必须禁止 Request-URI 中的任何此类构造,如果它否则会允许访问 HTTP 服务器意图可访问资源之外的资源。
DNS 欺骗
使用 HTTP 的客户端严重依赖域名服务,因此通常容易受到基于 IP 地址和 DNS 名称故意错误关联的安全攻击。因此,客户端在假设 IP 号码/DNS 名称关联的持续有效性时需要谨慎。
如果 HTTP 客户端缓存主机名查找结果以实现性能提升,则必须遵守 DNS 报告的 TTL 信息。如果 HTTP 客户端不遵守此规则,当之前访问的服务器的 IP 地址更改时,它们可能会被欺骗。
Location 头部和欺骗
如果单个服务器支持多个互不信任的组织,则它必须检查由这些组织控制生成的响应中的 Location 和 Content-Location 头部值,以确保它们不会试图使它们无权访问的资源失效。
认证凭据
现有的 HTTP 客户端和用户代理通常会无限期保留认证信息。HTTP/1.1 未提供服务器指示客户端丢弃这些缓存凭据的方法,这是一个重大安全风险。
针对此问题的某些部分存在多种变通方法,因此建议使用屏幕保护程序的密码保护、空闲超时以及其他缓解此问题固有安全问题的方法。
代理和缓存
HTTP 代理是中间人,并且代表了中间人攻击的机会。代理可以访问与安全相关的信息、单个用户和组织的个人信息,以及属于用户和内容提供商的专有信息。
代理运营商应该保护运行代理的系统,就像保护任何包含或传输敏感信息的系统一样。
缓存代理提供了额外的潜在漏洞,因为缓存内容对恶意利用来说是一个诱人的目标。因此,缓存内容应该作为敏感信息受到保护。