You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在WSO2 APIM中通过正则或其他方式防范XML/HTML注入?

在WSO2 APIM中防范HTML、脚本、XML及SQL注入的可行方案

当前在WSO2 APIM中使用正则表达式过滤注入风险时,因请求体被封装为XML信封,原始的</、/>及转义后的&lt;/、/&gt;等字符无法被正常匹配拦截。结合APIM的特性,可通过以下几种方案实现全面防护:


1. 适配XML转义的正则规则优化

由于请求体被XML封装后,特殊字符会被转义,需调整正则规则覆盖转义后的字符形式,同时优化规则避免误拦截合法请求:

  • 针对XML转义字符,补充匹配&lt;/(对应</)、/&gt;(对应/>)、&#60;/(十进制转义的</)等多种转义形式
  • 优化SQL注入规则,避免直接匹配SELECT、DELETE等关键词(业务场景可能合法使用),改为匹配带注入特征的模式,比如'.*SELECT、DROP.*--这类组合
  • 优化后的示例正则(部分):
<property name="regex" expression="get-property('regex')" value=".*'.*SELECT.*|.*'.*DELETE.*|.*ALTER\s+TABLE.*|.*DROP\s+DATABASE.*|.*&lt;/.*|.*&gt;/.*|.*&amp;lt;/.*|.*&amp;#60;/.*|.*&lt;script.*&gt;.*|.*Exception in thread.*|.*#include.*"/>

注:该校验逻辑基于WSO2 APIM网关的RegularExpressionProtector类实现,核心是对请求内容进行全量正则匹配,匹配到风险模式则触发拦截


2. 自定义脚本中介处理XML转义还原

通过Script Mediator在网关层先还原XML转义的请求内容,再执行风险检测,这样可以直接匹配原始危险字符:

  • 示例JavaScript脚本(在请求序列中添加):
var payload = mc.getPayloadXML();
var rawContent = payload.toString();
// 还原XML转义字符
var decodedContent = rawContent.replace(/&lt;/g, '<').replace(/&gt;/g, '>').replace(/&amp;/g, '&');
// 检测危险模式
var riskyPatterns = /<script.*>|'.*SELECT.*|DROP.*|\/>.*|<\/.*|#exec.*/gi;
if(riskyPatterns.test(decodedContent)){
    mc.setProperty("HTTP_SC", "403");
    mc.setPayloadXML(<error>Request contains malicious content</error>);
}
  • 该方案可灵活处理不同内容类型的请求,适配JSON、表单等非XML格式的输入校验

3. 启用WSO2 APIM的WAF扩展防护

WSO2 APIM支持集成Web应用防火墙(如ModSecurity),借助成熟的规则集实现标准化防护:

  • 启用APIM中的WAF中介,导入OWASP Core Rule Set(CRS)规则,该规则集覆盖了XSS、SQL注入、XML注入、路径遍历等常见攻击场景
  • 可根据业务需求自定义WAF规则,比如针对特定API调整规则阈值,避免误拦截
  • WAF会自动处理请求的编码、转义问题,无需手动适配XML信封的转义逻辑

4. 后端API的纵深防护

网关防护仅为第一道防线,后端需配合实现安全校验:

  • SQL操作强制使用预编译语句(PreparedStatement),禁止直接拼接用户输入生成SQL
  • XML处理使用安全解析器,禁用外部实体引用(XXE防护),比如在Java中设置DocumentBuilderFactory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true)
  • 对用户输入进行类型校验、长度限制,输出内容做HTML/XML编码,避免XSS触发

5. 自定义序列实现精细化校验

创建全局或API级别的自定义序列,针对不同请求类型做针对性校验:

  • 对XML请求,使用XPath提取具体节点内容,而非全量匹配XML信封
    示例序列配置:
<sequence xmlns="http://ws.apache.org/ns/synapse" name="SecurityValidationSequence">
    <property name="requestBody" expression="$body/*"/>
    <filter regex=".*<script.*>|'.*SELECT.*" source="get-property('requestBody')">
        <then>
            <respond>
                <payloadFactory media-type="json">
                    <format>{"error": "Malicious content detected"}</format>
                </payloadFactory>
            </respond>
        </then>
    </filter>
</sequence>
  • 将该序列绑定到API的请求流中,实现针对业务数据的精准校验

内容的提问来源于stack exchange,提问作者m.feyzollahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 16:20:00