攻击者篡改请求时,如何让SOAP API不暴露axis2ns1:server故障码?
问题解决方案:SOAP故障码标准化与WebSphere错误页面配置修复
一、SOAP API故障码标准化修复
问题说明
当攻击者篡改请求的userName字段为特殊字符(如!@#$%^<>"")时,SOAP API返回的故障码为axis2ns1:Server,存在安全风险,需替换为标准的soap:server或soap:client。
请求示例
- 原始请求:
<userName>?</userName>
- 篡改后请求:
<userName>!@#$%^<>""</userName>
响应示例
- 正常原始响应:
<errorMessages><errorCode>INVALID_NUMBER</errorCode><errorMessage>INVALID_NUMBER</errorMessage><errorContext>UserProfile[0]</errorContext><highlightedField>UserProfile.userNumField1</highlightedField><errorEnvCode>DEF</errorEnvCode><errorPosition>0</errorPosition></errorMessages>
- 当前异常响应(需修改):
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body> <soapenv:Fault xmlns:axis2ns1="http://schemas.xmlsoap.org/soap/envelope/"> <faultcode>axis2ns1:Server</faultcode> <faultstring>Internal Error</faultstring> <detail/> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope>
修复方案
- 明确错误类型映射
- 客户端参数非法(如格式错误):返回
soap:client故障码 - 服务端内部处理异常:返回
soap:server故障码
- 客户端参数非法(如格式错误):返回
- 自定义Axis2错误处理逻辑
- 编写自定义
FaultHandler类,捕获异常后构造标准SOAP Fault,指定命名空间为http://schemas.xmlsoap.org/soap/envelope/,故障码前缀使用soap: - 在Axis2的
services.xml中配置该自定义Handler,替换默认错误处理流程
- 编写自定义
- 代码层面直接修正
- 若通过代码手动生成Fault响应,确保
faultcode字段使用标准前缀,避免框架自动生成的axis2ns1:前缀
- 若通过代码手动生成Fault响应,确保
二、WebSphere环境下web.xml 500错误页面配置无效修复
问题说明
web.xml中已配置500错误对应的错误页面,在JBoss环境正常生效,但WebSphere环境下无法触发。
修复方案
- 启用WebSphere应用级错误页面支持
- 登录WebSphere管理控制台,进入目标应用
- 打开错误页面选项,勾选「启用web.xml中定义的错误页面」,保存后重启应用
- 优化web.xml配置格式
确保配置符合WebSphere规范,示例:
<error-page> <error-code>500</error-code> <location>/error/500.jsp</location> </error-page>
注意location路径需正确指向应用内的错误页面文件
3. 调整全局错误页面优先级
- 进入服务器 > WebSphere应用服务器 > [目标服务器] > 错误页面
- 将「发送错误页面」设置为「否」,或调整优先级让应用级配置优先生效
- 排查自定义异常拦截逻辑
- 检查应用内的Servlet过滤器、全局异常处理器,确保这些逻辑不会直接返回响应而绕过web.xml的错误页面配置
内容的提问来源于stack exchange,提问作者Selvi
相关产品推荐
相关产品推荐

