20. Security Considerations (安全考虑)
20. Security Considerations (安全考虑)
本节详细介绍 WebDAV 应用程序需要注意的安全问题。
HTTP/1.1 的所有安全考虑 (在 [RFC2616] 中讨论) 和 XML 的所有安全考虑 (在 [RFC3023] 中讨论) 也适用于 WebDAV。此外, 远程创作固有的安全风险需要更强大的身份验证技术, 引入了几个新的隐私问题, 并可能增加服务器设计不良带来的危险。下面详细介绍这些问题。
20.1. Authentication of Clients (客户端身份验证)
由于强调创作, WebDAV 服务器需要使用身份验证技术来保护不仅是对网络资源的访问, 还有资源的完整性。此外, 锁定功能的引入需要支持身份验证。
通过不安全通道以明文形式发送的密码是保护资源可访问性和完整性的不充分手段, 因为密码可能被拦截。由于 HTTP/1.1 的基本身份验证本质上执行密码的明文传输, 因此除非连接是安全的, 否则不得使用基本身份验证来向服务器验证 WebDAV 客户端。此外, 除非连接是安全的, 否则 WebDAV 服务器不得在 WWW-Authenticate 头中发送基本身份验证质询。安全连接的一个示例是采用强密码套件和服务器身份验证的传输层安全 (TLS) 连接。
WebDAV 应用程序必须支持摘要身份验证方案 [RFC2617]。由于摘要身份验证验证通信双方都知道共享密钥 (密码), 而无需以明文形式发送该密钥, 因此摘要身份验证避免了基本身份验证固有的安全问题, 同时提供了在广泛场景中有用的身份验证级别。
20.2. Denial of Service (拒绝服务)
拒绝服务攻击是 WebDAV 服务器特别关注的问题。WebDAV 加上 HTTP 使得可以对系统资源的每个部分进行拒绝服务攻击。
- 可以通过 PUT 极大的文件来攻击底层存储。
- 请求对大型集合进行递归操作可以攻击处理时间。
- 在多个连接上发出多个流水线请求可以攻击网络连接。
WebDAV 服务器需要在所有级别上意识到拒绝服务攻击的可能性。对此类攻击的适当响应可能是简单地断开连接。或者, 如果服务器能够做出响应, 服务器可以使用 400 级状态请求 (如 400 (Bad Request)) 并指出请求被拒绝的原因 (500 级状态响应将表明问题出在服务器上, 而无意的 DoS 攻击是客户端能够补救的)。
20.3. Security through Obscurity (通过隐蔽性实现安全)
WebDAV 通过 PROPFIND 方法提供了一种列出集合成员资源的机制。这大大降低了仅依赖于发现网络资源名称困难性的安全或隐私技术的有效性。鼓励 WebDAV 服务器的用户使用访问控制技术来防止对资源的不需要的访问, 而不是依赖于其资源名称的相对隐蔽性。
20.4. Privacy Issues Connected to Locks (与锁相关的隐私问题)
提交锁定请求时, 用户代理还可以提交一个 'owner' XML 字段, 提供获取锁的人的联系信息 (对于人而不是机器人获取锁的情况)。此联系信息存储在资源的 DAV:lockdiscovery 属性中, 其他协作者可以使用它来开始就访问资源进行协商。但是, 在许多情况下, 此联系信息可能非常私密, 不应广泛传播。服务器应该适当地限制对 DAV:lockdiscovery 属性的读取访问。此外, 用户代理应该提供对是否发送联系信息的控制, 如果发送联系信息, 则控制确切发送哪些信息。
20.5. Privacy Issues Connected to Properties (与属性相关的隐私问题)
由于属性值通常用于保存诸如文档作者之类的信息, 因此可能会因对资源属性数据的广泛访问而引发隐私问题。为了降低通过属性无意泄露私人信息的风险, 鼓励服务器开发将对资源主体的读取访问和对资源属性的读取访问分开的访问控制机制。这允许用户控制其属性数据的传播, 而不会过度限制对资源内容的访问。
20.6. Implications of XML Entities (XML 实体的影响)
XML 支持一种称为 "外部实体" 的功能, 在 [REC-XML] 的第 4.2.2 节中定义, 它指示 XML 处理器检索并包含附加的 XML。外部 XML 实体可用于附加或修改与 XML 文档关联的文档类型声明 (DTD)。外部 XML 实体还可用于在 XML 文档的内容中包含 XML。对于非验证 XML (例如本规范中使用的 XML), XML 不需要包含外部 XML 实体。但是, XML 确实声明 XML 处理器可以自行决定包含外部 XML 实体。
外部 XML 实体没有固有的可信度, 并且容易受到任何 HTTP GET 请求常见的所有攻击。此外, 外部 XML 实体可能会修改 DTD, 从而影响 XML 文档的最终形式, 在最坏的情况下, 显著修改其语义或将 XML 处理器暴露于 [RFC3023] 中讨论的安全风险。因此, 实现者必须意识到外部 XML 实体应被视为不可信。如果服务器选择不处理外部 XML 实体, 它应该使用 'no-external-entities' 条件代码响应包含外部实体的请求。
还存在伴随使用外部 XML 实体的广泛部署的应用程序的可扩展性风险。在这种情况下, 可能会有大量对一个外部 XML 实体的请求, 可能会使处理包含外部 XML 实体的资源请求的任何服务器过载。
此外, 还存在基于 [REC-XML] 第 4.2.2 节中定义的 "内部实体" 评估的风险。使用嵌套内部实体精心制作的小请求可能需要大量内存和/或处理时间来处理。服务器实现者应该意识到此风险, 并配置其 XML 解析器, 以便可以尽早检测和拒绝此类请求。
20.7. Risks Connected with Lock Tokens (与锁令牌相关的风险)
本规范鼓励对锁令牌使用 "通用唯一标识符 (UUID) URN 命名空间" ([RFC4122]) (第 6.5 节), 以保证它们在空间和时间上的唯一性。版本 1 UUID (在第 4 节中定义) 可能包含一个 "node" 字段, 该字段 "由 IEEE 802 MAC 地址组成, 通常是主机地址。对于具有多个 IEEE 地址的系统, 可以使用任何可用的地址"。由于 WebDAV 服务器在其生命周期内会发出许多锁, 因此可能还会公开其 IEEE 802 地址。
暴露 IEEE 802 地址存在几个相关风险。使用 IEEE 802 地址:
- 可以跟踪硬件从一个子网到另一个子网的移动。
- 可能可以识别运行 WebDAV 服务器的硬件制造商。
- 可能可以确定运行 WebDAV 的每种类型计算机的数量。
此风险仅适用于基于主机地址的 UUID 版本。[RFC4122] 的第 4 节描述了几种生成 UUID 的其他机制, 这些机制不涉及主机地址, 因此不会遭受此风险。
20.8. Hosting Malicious Content (托管恶意内容)
HTTP 能够托管在客户端机器上执行的程序。这些程序可以采用多种形式, 包括 Web 脚本、可执行文件、插件模块和文档中的宏。WebDAV 不会改变围绕这些程序的任何安全问题, 但 WebDAV 通常在广泛用户可以在服务器上发布文档的上下文中使用。服务器可能与发布文档的作者没有密切的信任关系。允许客户端发布任意内容的服务器可以有效地实施预防措施, 以检查发布到服务器的内容对其他客户端是否有害。服务器可以通过限制允许发布的内容类型以及对发布的内容运行病毒和恶意软件检测软件等技术来做到这一点。服务器还可以通过对允许向服务器发布内容的用户进行适当的访问限制和身份验证来降低风险。