20. 安全考虑 (Security Considerations)
20. 安全考虑 (Security Considerations)
本节提供有关WebDAV应用程序需要注意的安全影响问题的详细信息。
HTTP/1.1(在[RFC2616]中讨论)和XML(在[RFC3023]中讨论)的所有安全考虑也适用于WebDAV。此外,远程创作固有的安全风险需要更强的身份验证技术,引入了几个新的隐私问题,并可能增加来自糟糕服务器设计的危险。这些问题详述如下。
20.1. 客户端身份验证 (Authentication of Clients)
由于强调创作,WebDAV服务器需要使用身份验证技术来保护不仅是对网络资源的访问,还有资源的完整性。此外,锁定功能的引入需要身份验证支持。
通过不安全的通道以明文发送的密码不足以保护资源的可访问性和完整性,因为密码可能被截获。由于HTTP/1.1的Basic身份验证本质上执行密码的明文传输,因此除非连接是安全的,否则不得使用Basic身份验证来向服务器验证WebDAV客户端。此外,除非连接是安全的,否则WebDAV服务器不得在WWW-Authenticate头中发送Basic身份验证质询。安全连接的示例是使用强密码套件和服务器身份验证的传输层安全(TLS)连接。
WebDAV应用程序必须支持Digest身份验证方案[RFC2617]。由于Digest身份验证验证通信双方都知道共享密钥(密码),而无需明文发送该密钥,因此Digest身份验证避免了Basic身份验证固有的安全问题,同时在广泛的场景中提供了有用的身份验证级别。
20.2. 拒绝服务 (Denial of Service)
拒绝服务攻击是WebDAV服务器特别关注的问题。WebDAV加HTTP使拒绝服务攻击能够针对系统资源的每个部分。
- 可以通过PUTting极大的文件来攻击底层存储。
- 请求对大型集合的递归操作可以攻击处理时间。
- 在多个连接上进行多个管道请求可以攻击网络连接。
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. XML实体的含义 (Implications of XML Entities)
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)
本规范鼓励对锁令牌(第6.5节)使用"通用唯一标识符(UUID)URN命名空间"([RFC4122]),以保证其在空间和时间上的唯一性。版本1 UUID(在第4节中定义)可能包含"节点"字段,"由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通常用于广泛的用户可以在服务器上发布文档的环境中。服务器可能与发布文档的作者没有密切的信任关系。允许客户端发布任意内容的服务器可以有效地实施预防措施,检查发布到服务器的内容对其他客户端没有危害。服务器可以通过诸如限制允许发布的内容类型并对发布的内容运行病毒和恶意软件检测软件等技术来做到这一点。服务器还可以通过对允许向服务器发布内容的用户进行适当的访问限制和身份验证来降低风险。