修复J2EE漏洞:1. ESAPI_WAF
字数 1893 2025-08-29 08:31:47

ESAPI WAF 配置详解

1. 概述

ESAPI WAF (Web Application Firewall) 是一个基于XML策略文件的应用程序防火墙解决方案,专为J2EE应用程序设计。它通过定义安全规则来保护应用程序免受各种攻击,如SQL注入、XSS、CSRF等。

2. 策略文件基础结构

策略文件的根元素是<policy>,包含以下主要部分:

<?xml version="1.0" encoding="UTF-8"?>
<policy>
  <aliases></aliases>
  <settings></settings>
  <!-- 其他规则标签 -->
</policy>

2.1 必需标签

  • <aliases>: 定义在整个策略文件中公用的字符串
  • <settings>: WAF的全局配置

3. Aliases 标签

<aliases>标签用于定义策略文件中可重用的字符串或正则表达式。

<aliases>
  <alias name="ADMIN_PATH" type="regex">^/admin/.*</alias>
</aliases>
  • name (必需): 别名标识,后续在策略中引用
  • type (可选): 指定字符串类型,默认为普通字符串,可设为"regex"表示正则表达式

4. Settings 标签

<settings>标签包含WAF的全局配置。

4.1 运行模式 (<mode>)

<mode>block</mode>

可选值:

  • log: 仅记录日志,不执行其他操作
  • redirect: 发生安全事件时重定向到错误页面
  • block: 停止处理请求并返回空响应

4.2 会话Cookie名称 (<session-cookie-name>)

<session-cookie-name>JSESSIONID</session-cookie-name>
  • 默认为"JSESSIONID"
  • 实验性功能,不推荐使用

4.3 错误处理 (<error-handling>)

<error-handling>
  <default-redirect-page>/error.jsp</default-redirect-page>
  <block-status>500</block-status>
</error-handling>
  • <default-redirect-page>: 重定向目标URL
  • <block-status>: 在block模式下返回的HTTP状态码

5. Authentication-Rules 标签

用于执行J2EE认证请求。

<authentication-rules path="/.*" key="UserAuthKey">
  <path-exception>/</path-exception>
  <path-exception type="regex">/images/.*</path-exception>
</authentication-rules>
  • path (必需): 需要认证的URL正则表达式
  • key (必需): 检查的session属性名
  • <path-exception>: 白名单URL
    • type (可选): 可设为"regex"表示正则表达式

6. Authorization-Rules 标签

用于执行J2EE授权请求。

6.1 Restrict-Source-IP

<authorization-rules>
  <restrict-source-ip type="regex" ip-header="X-ORIGINAL-IP" 
                      ip-regex="(192\.168\.1\..*|127.0.0.1)">
    /admin/.*
  </restrict-source-ip>
</authorization-rules>
  • type: 路径匹配类型,"regex"表示正则表达式
  • ip-header: 包含真实IP的请求头
  • ip-regex: 允许的IP正则表达式

6.2 Must-Match

<authorization-rules>
  <must-match path="^/admin/.*" variable="request.headers.X-ROLES" 
              operator="contains" value="admin" />
</authorization-rules>
  • path (必需): 应用规则的URL正则
  • variable (必需): 检查的变量位置,可以是:
    • request.headers.<name>
    • request.parameters.<name>
    • request.cookies.<name>
    • session.<name>
    • application.<name>
  • operator (必需): 比较操作符
    • equals: 完全匹配
    • contains: 包含
    • startsWith: 开头匹配
    • inList: 在集合中
  • value (必需): 匹配的值

7. Url-Rules 标签

对HTTP请求行数据执行检查。

7.1 Restrict-Extension

<url-rules>
  <restrict-extension deny=".java" />
</url-rules>
  • deny/allow: 至少出现一个,不能同时出现
  • 值可以是正则表达式

7.2 Restrict-Method

<url-rules>
  <restrict-method deny="GET" path=".*\.do$" />
  <restrict-method allow="^(GET|POST|HEAD)$" />
</url-rules>
  • deny/allow: 至少出现一个
  • path (可选): 应用规则的URL正则

7.3 Enforce-Https

<url-rules>
  <enforce-https path="/.*">
    <path-exception>/index.html</path-exception>
  </enforce-https>
</url-rules>
  • path (必需): 强制SSL的URL正则
  • <path-exception>: 例外URL

8. Header-Rules 标签

对HTTP请求头数据执行检查。

8.1 Restrict-User-Agent

<header-rules>
  <restrict-user-agent deny=".*GoogleBot.*" />
</header-rules>
  • deny/allow: 至少出现一个

8.2 Restrict-Content-Type

<header-rules>
  <restrict-content-type deny=".*multipart.*" />
</header-rules>
  • deny/allow: 至少出现一个

9. Virtual-Patchs 标签

针对已知攻击实施虚拟补丁。

<virtual-patchs>
  <virtual-patch id="scr-15520" path="/foobar.jsp" 
                 variable="request.parameters.q" 
                 pattern="^[0-9a-zA-Z\s,\.]$" 
                 message="detected exploit of SCR #15520" />
</virtual-patchs>
  • id (可选): 规则唯一标识
  • path (必需): 应用规则的URL正则
  • variable (必需): 检查的变量位置
  • pattern (必需): 匹配的正则表达式
  • message (必需): 规则失败时的日志消息

10. 最佳实践

  1. 从空策略文件开始,逐步添加规则
  2. 为重要规则添加唯一ID便于日志追踪
  3. 使用正则表达式提高规则灵活性
  4. 生产环境先使用log模式测试规则
  5. 为管理员区域添加IP限制
  6. 禁用不必要的HTTP方法
  7. 对敏感操作强制使用SSL
  8. 为已知漏洞创建虚拟补丁

通过合理配置ESAPI WAF,可以显著提高J2EE应用程序的安全性,防止多种常见攻击。

ESAPI WAF 配置详解 1. 概述 ESAPI WAF (Web Application Firewall) 是一个基于XML策略文件的应用程序防火墙解决方案,专为J2EE应用程序设计。它通过定义安全规则来保护应用程序免受各种攻击,如SQL注入、XSS、CSRF等。 2. 策略文件基础结构 策略文件的根元素是 <policy> ,包含以下主要部分: 2.1 必需标签 <aliases> : 定义在整个策略文件中公用的字符串 <settings> : WAF的全局配置 3. Aliases 标签 <aliases> 标签用于定义策略文件中可重用的字符串或正则表达式。 name (必需): 别名标识,后续在策略中引用 type (可选): 指定字符串类型,默认为普通字符串,可设为"regex"表示正则表达式 4. Settings 标签 <settings> 标签包含WAF的全局配置。 4.1 运行模式 ( <mode> ) 可选值: log : 仅记录日志,不执行其他操作 redirect : 发生安全事件时重定向到错误页面 block : 停止处理请求并返回空响应 4.2 会话Cookie名称 ( <session-cookie-name> ) 默认为"JSESSIONID" 实验性功能,不推荐使用 4.3 错误处理 ( <error-handling> ) <default-redirect-page> : 重定向目标URL <block-status> : 在block模式下返回的HTTP状态码 5. Authentication-Rules 标签 用于执行J2EE认证请求。 path (必需): 需要认证的URL正则表达式 key (必需): 检查的session属性名 <path-exception> : 白名单URL type (可选): 可设为"regex"表示正则表达式 6. Authorization-Rules 标签 用于执行J2EE授权请求。 6.1 Restrict-Source-IP type : 路径匹配类型,"regex"表示正则表达式 ip-header : 包含真实IP的请求头 ip-regex : 允许的IP正则表达式 6.2 Must-Match path (必需): 应用规则的URL正则 variable (必需): 检查的变量位置,可以是: request.headers.<name> request.parameters.<name> request.cookies.<name> session.<name> application.<name> operator (必需): 比较操作符 equals : 完全匹配 contains : 包含 startsWith : 开头匹配 inList : 在集合中 value (必需): 匹配的值 7. Url-Rules 标签 对HTTP请求行数据执行检查。 7.1 Restrict-Extension deny/allow : 至少出现一个,不能同时出现 值可以是正则表达式 7.2 Restrict-Method deny/allow : 至少出现一个 path (可选): 应用规则的URL正则 7.3 Enforce-Https path (必需): 强制SSL的URL正则 <path-exception> : 例外URL 8. Header-Rules 标签 对HTTP请求头数据执行检查。 8.1 Restrict-User-Agent deny/allow : 至少出现一个 8.2 Restrict-Content-Type deny/allow : 至少出现一个 9. Virtual-Patchs 标签 针对已知攻击实施虚拟补丁。 id (可选): 规则唯一标识 path (必需): 应用规则的URL正则 variable (必需): 检查的变量位置 pattern (必需): 匹配的正则表达式 message (必需): 规则失败时的日志消息 10. 最佳实践 从空策略文件开始,逐步添加规则 为重要规则添加唯一ID便于日志追踪 使用正则表达式提高规则灵活性 生产环境先使用 log 模式测试规则 为管理员区域添加IP限制 禁用不必要的HTTP方法 对敏感操作强制使用SSL 为已知漏洞创建虚拟补丁 通过合理配置ESAPI WAF,可以显著提高J2EE应用程序的安全性,防止多种常见攻击。