修复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. 最佳实践
- 从空策略文件开始,逐步添加规则
- 为重要规则添加唯一ID便于日志追踪
- 使用正则表达式提高规则灵活性
- 生产环境先使用
log模式测试规则 - 为管理员区域添加IP限制
- 禁用不必要的HTTP方法
- 对敏感操作强制使用SSL
- 为已知漏洞创建虚拟补丁
通过合理配置ESAPI WAF,可以显著提高J2EE应用程序的安全性,防止多种常见攻击。