Web服务安全备忘单¶
简介¶
本文旨在为保护Web服务和防止Web服务相关攻击提供指导。
请注意,由于不同框架的实现差异,本备忘单保持在较高层面。
传输机密性¶
传输机密性旨在保护Web服务与服务器之间的通信免受窃听和中间人攻击。
规则:所有包含敏感功能、认证会话或传输敏感数据的Web服务内部及相互之间的通信,都必须使用配置良好的TLS进行加密。即使消息本身已加密,也建议这样做,因为TLS除了流量机密性外,还提供了许多其他好处,包括完整性保护、重放防御和服务器认证。有关如何正确执行此操作的更多信息,请参阅传输层安全备忘单。
服务器认证¶
规则:必须使用TLS对服务提供者向服务消费者进行认证。服务消费者应验证服务器证书是否由受信任的提供者颁发、是否未过期、是否未被吊销、是否与服务的域名匹配,以及服务器是否已证明其拥有与公钥证书关联的私钥(通过正确签名或成功解密用关联公钥加密的内容)。
用户认证¶
用户认证验证尝试连接到服务的用户或系统的身份。这种认证通常是Web服务容器的功能。
规则:如果使用基本认证,则必须通过TLS进行,但由于基本认证会在HTTP头部以明文(Base64编码)泄露秘密,因此不建议使用。
规则:使用双向TLS的客户端证书认证是一种常见的认证形式,在适当情况下推荐使用。参阅:认证备忘单。
传输编码¶
SOAP编码样式旨在将数据在软件对象与XML格式之间来回移动。
规则:客户端和服务器之间强制执行相同的编码样式。
消息完整性¶
这适用于静态数据。传输中数据的完整性可以通过TLS轻松提供。
当使用公钥加密时,加密确实保证了机密性,但它不能保证完整性,因为接收方的公钥是公开的。出于同样的原因,加密不能确保发件人的身份。
规则:对于XML数据,使用XML数字签名通过发送方的私钥提供消息完整性。此签名可由接收方使用发送方的数字证书(公钥)进行验证。
消息机密性¶
旨在保密的数据元素必须使用强加密算法和足够的密钥长度进行加密,以阻止暴力破解。
规则:包含敏感数据的消息必须使用强加密算法进行加密。这可以是传输加密或消息加密。
规则:包含敏感数据且在接收后必须保持加密状态的消息,必须使用强数据加密,而不仅仅是传输加密。
授权¶
Web服务需要像Web应用程序授权用户一样授权Web服务客户端。Web服务需要确保Web服务客户端被授权对请求的数据执行特定操作(粗粒度)或数据元素(细粒度)。
规则:Web服务应授权其客户端是否拥有访问相关方法的权限。在认证挑战之后,Web服务应检查请求实体的权限,以确定其是否具有访问请求资源的权限。这应在每个请求上执行,并为敏感资源(如密码更改、主要联系方式如电子邮件、实际地址、支付或交付说明)添加挑战-响应授权机制。
规则:确保对Web服务应用程序内的管理和运维功能的访问仅限于Web服务管理员。理想情况下,任何管理功能都应在与这些功能所管理的Web服务完全分离的应用程序中,从而将普通用户与这些敏感功能完全隔离。
模式验证¶
模式验证强制执行模式定义的约束和语法。
规则:Web服务必须根据其关联的XML模式定义(XSD)验证SOAP有效载荷。
规则:为SOAP Web服务定义的XSD应至少定义允许进出Web服务的每个参数的最大长度和字符集。
规则:为SOAP Web服务定义的XSD应为所有固定格式参数(例如,邮政编码、电话号码、列表值等)定义严格(理想情况下为允许列表)的验证模式。
内容验证¶
规则:像任何Web应用程序一样,Web服务在消费输入之前需要对其进行验证。XML输入的内容验证应包括:
输出编码¶
Web服务需要确保发送给客户端的输出被编码为数据,而不是脚本。当Web服务客户端直接或间接使用AJAX对象将输出渲染为HTML页面时,这一点变得非常重要。
规则:所有输出编码规则均应遵循跨站脚本预防备忘单。
病毒防护¶
SOAP提供了将文件和文档附加到SOAP消息的功能。这为黑客提供了将病毒和恶意软件附加到这些SOAP消息的机会。
规则:确保安装了病毒扫描技术,并且最好是内联扫描,以便在文件和附件保存到磁盘之前进行检查。
规则:确保病毒扫描技术定期更新最新的病毒定义/规则。
消息大小¶
Web服务像Web应用程序一样,可能成为DOS攻击的目标,通过自动向Web服务发送数千条大型SOAP消息。这可能导致应用程序无法响应合法消息,或者使其完全崩溃。
规则:SOAP消息大小应限制在适当的范围内。更大的大小限制(或完全没有限制)会增加成功DoS攻击的可能性。
可用性¶
资源限制¶
在正常运行期间,Web服务需要计算能力,例如CPU周期和内存。由于故障或受到攻击,Web服务可能需要过多资源,导致主机系统不稳定。
规则:根据预期的服务速率,限制Web服务可以使用的CPU周期量,以保持系统稳定。
规则:限制Web服务可以使用的内存量,以避免系统内存不足。在某些情况下,宿主系统可能会开始终止进程以释放内存。
规则:限制同时打开的文件、网络连接和启动的进程数量。
消息吞吐量¶
吞吐量表示在特定时间内服务的Web服务请求数量。
规则:配置应优化以实现最大消息吞吐量,避免出现类似DoS的情况。
XML拒绝服务保护¶
XML拒绝服务可能是针对Web服务最严重的攻击。因此,Web服务必须提供以下验证:
规则:验证防止递归有效载荷。
规则:验证防止过大有效载荷。
规则:保护防止XML实体扩展。
规则:验证防止过长的元素名称。如果您正在使用基于SOAP的Web服务,则元素名称就是那些SOAP操作。
此保护应由您的XML解析器/模式验证器提供。要验证,请构建测试用例以确保您的解析器能够抵抗这些类型的攻击。
端点安全配置文件¶
规则:Web服务必须至少符合Web服务互操作性(WS-I)基本配置文件。