HTTP缓存和安全
HTTP 缓存
HTTP 通常用于分布式信息系统,其中通过使用响应缓存可以提高性能。HTTP/1.1 协议包含许多用于使缓存工作的元素。
HTTP/1.1 中缓存的目标是在许多情况下消除发送请求的需要,并且无需在许多其他情况下发送完整响应。
HTTP/1.1 中的基本缓存机制是用于服务器指定过期时间和验证器的缓存的隐式指令。为此,我们使用Cache-Control标头。
Cache-Control标头 允许客户端或服务器在请求或响应中传输各种指令。这些指令通常覆盖默认缓存算法。缓存指令在逗号分隔列表中指定。例如:
Cache-control: no-cache
客户端可以在其 HTTP 请求中使用以下缓存请求指令:
| S.N. | Cache Request Directive and Description |
|---|---|
| 1 | no-cache 缓存在没有成功重新验证源服务器之前不得使用响应来满足后续请求. |
| 2 | no-store 缓存不应存储有关客户端请求或服务器响应的任何内容. |
| 3 | max-age = seconds 指示客户端愿意接受其时间不大于指定时间(以秒为单位)的响应. |
| 4 | max-stale [= seconds]指示客户端愿意接受超过其过期时间的响应。如果给出秒数,则不能超过该时间过期. |
| 5 | min-fresh = seconds 指示客户端愿意接受其生存期不小于其当前时间加上指定时间(以秒为单位)的响应. |
| 6 | no-transform 不变换实体内容. |
| 7 | only-if-cached 不检索新数据。缓存只能在文档中时发送文档,并且不应与源服务器联系以查看是否存在较新的副本. |
服务器在其 HTTP 响应中可以使用以下缓存响应指令:
| S.N. | Cache Response Directive and Description |
|---|---|
| 1 | public 指示响应可能由任何缓存缓存. |
| 2 | private 指示响应消息的左右为单个用户,不得由共享缓存缓存. |
| 3 | no-cache 缓存在没有成功重新验证源服务器之前不得使用响应来满足后续请求. |
| 4 | no-store 缓存不应存储有关客户端请求或服务器响应的任何内容. |
| 5 | no-transform 不变换实体内容.. |
| 6 | must-revalidate 缓存在使用之前必须验证过时文档的状态,并且不应使用过期的文档. |
| 7 | proxy-revalidate 与 must-revalidate 具有相同的含义,只不过它不适用于非共享用户代理缓存. |
| 8 | max-age = seconds 表示客户端愿意接受其年时间不超过指定时间(以秒为单位)的响应. |
| 9 | s-maxage = seconds 该指令指定的最大时间将覆盖 max-age 指令或 Expires 标头指定的最大时间。专用缓存始终会忽略 s-maxage 指令. |
HTTP 安全
HTTP 用于 Internet 上的通信,因此应用程序开发人员,信息提供者和用户应注意 HTTP / 1.1 中的安全限制。该讨论不包括针对此处提到的问题的最终解决方案,但确实提出了一些降低安全风险的建议。
个人信息泄漏
HTTP 客户端通常侵入大量个人信息,例如用户名,位置,邮件地址,密码,加密密钥等。因此,您应非常小心,以防止此信息通过 HTTP 协议意外泄露给其他来源。
-
所有机密信息应以加密形式存储在服务器上。
-
服务器的特定软件版本泄露可能使服务器计算机更容易受到针对已知包含安全漏洞的软件的攻击
-
通过网络防火墙充当门户的代理应特别注意标头信息的传输,以识别防火墙后面的主机.
-
在“发件人”字段中发送的信息可能与用户的隐私权或其站点的安全策略冲突,因此,在用户不能禁用,启用和修改该字段的内容的情况下,不应传输该信息.
-
如果引用页面是使用安全协议传输的,则客户端不应在(非安全)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 和 Content Location 标头的值,以确保它们不会尝试使资源失效。他们没有权限。
认证凭证
现有的 HTTP 客户端和用户代理通常会无限期地保留身份验证信息。 HTTP / 1.1 没有为服务器提供一种方法来指示客户端丢弃这些缓存的凭据,这是很大的安全风险。
此问题的各个方面有很多解决方法,因此建议在屏幕保护程序,空闲超时和其他缓解此问题固有安全问题的方法中使用密码保护。
代理和缓存
HTTP 代理是中间人,代表中间人有攻击的机会。代理可以访问与安全相关的信息,有关单个用户和组织的个人信息以及属于用户和内容提供者的专有信息。
代理操作员应保护运行代理的系统,因为它们将保护包含或传输敏感信息的任何系统。
缓存代理提供了其他潜在的漏洞,因为缓存的内容代表了诱人的恶意利用目标。因此,应将缓存内容作为敏感信息进行保护。

浙公网安备 33010602011771号