防止 HTTP 动词篡改

608 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第22天,点击查看活动详情

HTTP 动词篡改

HTTP 谓词篡改是一种攻击,它利用 HTTP 谓词(也称为 HTTP 方法)身份验证和访问控制机制中的漏洞。许多身份验证机制仅限制对最常见的 HTTP 方法的访问,从而允许其他 HTTP 方法对受限资源进行未经授权的访问。

详细说明

许多 Web 服务器身份验证机制使用基于谓词的身份验证和访问控制。此类安全机制包括具有特定 HTTP 方法的请求的访问控制规则。例如,管理员可以将 Web 服务器配置为允许使用 HTTP GET 请求不受限制地访问网页,但将 POST 限制为仅管理员。但是,许多基于谓词的安全机制的实现以不安全的方式强制实施安全规则,允许使用备用 HTTP 方法(如 HEAD)甚至任意字符串访问受限制的资源。

例如,Java Platform Enterprise Edition (Java EE) 支持通过 Web.xml配置文件进行基于谓词的身份验证和访问控制。在Java EE中,可以通过将以下内容添加到web.xml来限制“admin”用户对admin / 目录的访问:

<security-constraint> <web-resource-collection> <url-pattern>/admin/*</url-pattern> <http-method>GET</http-method> <http-method>POST</http-method> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> </security-constraint>

这些安全规则确保将阻止来自非管理员用户的对 admin/  目录的 GET 或 POST 请求。但是,对GET或POST以外的管理员/ 目录的HTTP请求不会被阻止。虽然来自非管理员用户的 GET 请求将被阻止,但来自同一用户的 HEAD 请求不会被阻止。除非管理员显式将 Web 服务器配置为拒绝除 GET 和 POST 之外的所有方法,否则只需使用服务器支持的不同方法即可绕过访问控制机制。受此问题影响的 Web 服务器的其他示例包括 IIS 6.0、Apache 2.2.8 和 TomCat 6.0。

在某些Web服务器中-例如Apache 2.2 / PHP-甚至可以通过使用HTTP方法的任意字符串来绕过访问控制机制。此类 Web 服务器为未绑定到特定 HTTP 方法的请求实现默认处理程序。与 HTTP Servlet 不同,在 HTTP Servlet 中,只有在定义了 doGet() 时才处理 GET 请求,而某些 Web 服务器会尝试处理任何和所有方法,包括未知方法。因此,通过将合法方法替换为任意方法(MPRV 而不是 GET),攻击者可以利用内部处理逻辑中的漏洞并绕过访问控制机制。

防止 HTTP 动词篡改

谓词篡改攻击利用访问控制机制中的配置缺陷或请求处理程序代码中的漏洞。如上面的示例所示,阻止使用非标准 HTTP 方法的请求是不够的,因为在许多情况下,攻击者可以使用合法的 HTTP 方法(如 HEAD)。

Imperva SecureSphere 结合了两种缓解技术来检测和阻止动词篡改攻击。在第一个中,SecureSphere 了解每个 URL 允许使用哪些方法。任何使用不属于应用程序正常使用的 HTTP 方法的尝试都将被检测和阻止。第二种技术检测非标准HTTP方法并阻止使用此类方法的请求。在应用程序通常使用非标准方法的情况下,可以使用允许的方法轻松更新此机制。