20. 安全性考量
本节旨在详细说明 WebDAV 应用程序中需要注意的安全问题.
HTTP/1.1 (在 [RFC2616] 中有讨论) 和 XML (在 [RFC3023] 中有讨论) 中的所有安全性考量也同样适用于 WebDAV. 另外, 远程创作中内在的安全风险要求更强的身份验证技术, 这引入了一些对新的隐私问题, 并可能增加由于服务器设计不良从而产生的风险. 这些问题将在下面详细说明.
20.1. 客户端的身份验证
由于强调多人创作, WebDAV 服务器需要使用身份验证技术进行保护. 范围不仅包括对网络资源的访问, 还包括资源的完整性. 此外,引入锁定功能也需要身份验证的支持.
在不安全信道上明文传输的密码是不足以保护资源的可访问性和完整性的, 因为密码可能会被拦截.
由于 HTTP/1.1 的 Basic 认证本质上是以明文传输密码, 因此除非连接是安全的,
否则绝不能[MUST_NOT]对 WebDAV 客户端使用 Basic 身份认证. 此外, 除非链接是安全的,
WebDAV 服务器不得[MUST_NOT]在 WWW-Authenticate
标头中发送 Basic 认证,
一个安全连接的示例应该是使用包含强密码配套和服务器身份验证的传输层安全性(TLS)连接.
WebDAV 应用程序必须[MUST]支持 Digest 认证方案 [RFC2617]. 由于该认证验证了通信双方都了解的一个共享的密钥或密码, 而无需以明文方式发送该密钥, 因此 Digest 认证避免了 Basic 认证固有的安全问题, 同时在各种适用场景中提供身份验证级别.
20.2. 拒绝服务
WebDAV 服务器应特别关注拒绝服务攻击. WebDAV 与 HTTP 结合的行为使得该攻击可以对系统资源的每个部分进行拒绝服务攻击.
- 攻击底层存储可以通过 PUT 非常大的文件来进行.
- 对大型集合执行递归操作可能会占用处理时间.
- 在多个连接上同时进行多个请求可能会占用网络连接.
WebDAV 服务器需要意识到在所有层级中都可能发生拒绝服务攻击. 对于这种攻击, 正确响应可以[MAY]是简单地断开连接. 或者如果服务器能够作出响应, 服务器可以[MAY]使用 400 级别的状态请求, 比如 400 (Bad Request), 并指示为什么拒绝请求 (500 级别的状态响应将表明问题出在服务端, 而意外导致的 DoS 攻击则客户端是有能力纠正的).
20.3. 通过混淆实现安全性
WebDAV 通过 PROPFIND方法提供了一种列出集合成员资源的机制. 这会显著降低那些仅依赖于发现网络资源名称的安全或隐私技术的有效性. WebDAV 服务器的用户被鼓励使用访问控制技术来防止对资源的未经授权访问, 而不是依赖于其相对模糊的资源名称.
20.4. 与锁相关的隐私问题
在提交锁请求时, 该用户代理还可以提交一个包含锁发起者联系信息的 owner
XML 字段(对于那些由真正人类而不是机器人发起锁的情况).
这些联系信息存储在资源的 DAV:lockdiscovery
属性中,
可以被其他协作者使用并开始对资源的访问权限进行讨论. 但是在许多情况下, 这些联系信息可能非常私密,
不应广泛传播. 服务器应当[SHOULD]对 DAV:lockdiscovery
属性的读取权限进行合理限制.
此外, 用户代理应当[SHOULD]控制是否发送联系信息, 如果发送, 则应控制发送哪些信息.
20.5. 与属性相关的隐私问题
属性值通常用于保存诸如文档作者之类的信息, 由于对资源属性数据的广泛访问, 可能会引起隐私问题. 为了降低通过属性导致私人信息被意外发布的风险, 强烈建议服务器开发相应的访问控制机制, 分离对资源正文与资源属性的读取访问权限. 这将允许用户控制其属性数据的传播, 而不会过度限制对资源内容的访问.
20.6. 与 XML 实体相关的影响
XML 支持一种称为 "外部实体" 的机制, 它在 [REC-XML#4.2.2] 中定义, 该机制指示 XML 处理器检索并包含附加 XML. 一个外部 XML 实体可用于附加或修改与 XML 文档关联的文档类型声明 (DTD). 外部 XML 实体还可用于在 XML 文档内容中包含 XML. 对于非验证性的 XML, 例如在本规范中使用的 XML, 不需要包含外部 XML 实体. 然而, XML 规定一个 XML 处理器可以自行选择是否包含外部 XML 实体.
外部 XML 实体没有固有的可信度, 且会受到与任何 HTTP GET 请求相关攻击的影响.
此外, 外部 XML 实体可能会修改 DTD, 从而影响 XML 文档的最终形式, 在最坏的情况下,
明显修改其语义的行为或使 XML 处理器面临 [RFC3023] 中讨论的安全风险.
因此, 实施者必须意识到外部 XML 实体应视为不可信的. 如果服务器选择不处理外部 XML 实体,
则应该[SHOULD]对包含外部实体的请求使用 no-external-entities
条件码进行响应.
这里还有一个伴随广泛部署使用外部 XML 实体的应用程序而带来的可扩展性风险. 在这种情况下, 可能会有大量请求获取一个外部 XML 实体, 这可能会使处理包含外部 XML 实体资源请求的服务器过载.
此外. 还存在与评估[REC-XML#4.2.2] 中定义的 "内部实体" 相关的风险. 一个精心构建的嵌套内部实体的小型请求可能需要大量内存与(或)时间来处理. 实现服务器时应意识到这种风险, 并通过配置 XML 解析器, 以便尽早检测和拒绝这些请求.
译者注:
20.7. 与锁令牌相关的风险
本规范鼓励对锁令牌(第 6.5 章) 使用 "通用唯一标识符 (UUID) URN命名空间"
([RFC4122]), 以确保其在空间和时间上的唯一性.
第 1 版 UUID (在[RFC4122#4]定义)可以包含一个 node
字段,
该字段由 IEEE 802 MAC 地址组成, 该地址通常是主机地址. 对于具有多个 IEEE 地址的系统,
可以使用任何可用的地址. 由于 WebDAV 服务器在其生命周期内会发出许多锁定,
这意味着其也可能会公开其 IEEE 802 地址.
有几个与公开 IEEE 802 地址相关的风险. 使用 IEEE 802 地址:
- 可能会跟踪硬件从子网到子网的移动.
- 可以识别运行 WebDAV 服务器的硬件制造商.
- 可以确定运行 WebDAV 的每种类型计算机的数量
这种风险仅适用于基于主机地址的 UUID 版本. [RFC4122#4] 描述了几种不涉及主机地址的 UUID 生成机制, 因此不会受到此风险影响.
20.8. 托管恶意内容
HTTP 能够托管在客户端计算机上执行的程序. 这些程序可以采用多种形式, 包括:
- Web 脚本
- 可执行文件
- 插件模块
- 文档中的宏
WebDAV 并不会改这些程序中任何的安全问题, WebDAV 通常用于提供各种用户可以在服务器上发布文档的环境. 服务器可能与发布文档作者没有紧密的信任关系. 允许客户端发布任意内容的服务器上可以进行一些有用地预防措施, 以检查发布到服务器的内容对其他客户端没有危害. 服务器可以通过以下 (但不限于) 技术来实现这一点:
- 限制允许发布的内容类型
- 对已发布的内容运行病毒和恶意软件检测软件
服务器还可以通过适当的访问限制和验证允许发布内容到服务器的用户身份来减轻风险.