Azure负载测试出现Malicious payload报错,请求协助解决
解决Azure Load Testing中JSONPostProcessor的"Malicious payload, having non natural depths"异常
问题根源
net.minidev的json-smart库新版本新增了JSON嵌套深度的安全限制,当响应JSON的嵌套层数超过默认阈值时会触发该异常。Azure Load Testing环境使用的库版本大概率比你本地测试环境的要新,因此本地正常但云端出现报错。
可行解决方案
- 调整嵌套深度阈值:由于Azure Load Testing基于JMeter,可通过添加JVM参数扩大json-smart的深度限制。在测试计划的JVM参数中配置:
数值可根据实际JSON嵌套层数调整,比如设为2000或其他合理值。-Dnet.minidev.parser.maxDepth=1000 - 替换JSON处理组件:改用JMeter的JSR223 PostProcessor结合Jackson/Gson等库处理响应,避开json-smart的限制。示例Groovy代码:
import com.fasterxml.jackson.databind.ObjectMapper def response = prev.getResponseDataAsString() def mapper = new ObjectMapper() def jsonNode = mapper.readTree(response) // 示例:提取嵌套字段值到变量 vars.put("targetValue", jsonNode.path("deeply").path("nested").path("field").asText()) - 降级json-smart版本:若测试项目依赖可管控,可降级到无嵌套深度限制的旧版本(如2.3.x),但此操作存在安全风险,需谨慎权衡。
验证步骤
修改配置或代码后,先在本地测试确认能正常处理大嵌套JSON,再上传至Azure Load Testing环境运行,验证异常是否消除。
内容的提问来源于stack exchange,提问作者Bohdan Antoniak
相关产品推荐
相关产品推荐

