Class XssJsonDeserializer
java.lang.Object
tools.jackson.databind.ValueDeserializer<String>
tech.riemann.nif.web.xss.escaper.XssJsonDeserializer
- All Implemented Interfaces:
tools.jackson.databind.deser.NullValueProvider
XSS JSON反序列化器 (Jackson 3)
用于在JSON反序列化过程中对字符串进行XSS检测
作用范围:仅在一次 HTTP 请求上下文中生效(XssHolder.inRequest())。
XssHolder 仅在 XssInterceptor 的请求生命周期内 set/remove,因此非请求上下文
(Actuator/JMX 内部对象反序列化、定时任务、后台线程)直接跳过检测,原样返回,
避免对框架/内部元数据产生海量误报 WARN 日志。
入站策略(H4 修复):只检测记录、不改写数据——
入站全量转义会污染存储(<script> 存成 <script>),且与出站转义叠加造成双重转义。
现在检测到疑似 XSS 内容只记录 warn 日志并原样返回,存储保持干净;
出站侧(XssJsonSerializer)按上下文转义作为渲染缓解层。
继承自Jackson 3的ValueDeserializer,重写deserialize方法实现XSS检测逻辑
主要功能: 1. 对JSON字符串值进行XSS检测 2. 根据XssHolder的配置决定是否忽略XSS处理 3. 处理不同类型的JSON令牌,确保正确反序列化 4. 对无法反序列化的情况抛出异常
- Author:
- Kerbores(kerbores@riemann.tech)
-
Nested Class Summary
Nested classes/interfaces inherited from class tools.jackson.databind.ValueDeserializer
tools.jackson.databind.ValueDeserializer.None -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptiondeserialize(tools.jackson.core.JsonParser p, tools.jackson.databind.DeserializationContext ctxt) 反序列化JSON字符串值,处理XSS检测Methods inherited from class tools.jackson.databind.ValueDeserializer
createContextual, deserialize, deserializeWithType, deserializeWithType, findBackReference, getAbsentValue, getDelegatee, getEmptyAccessPattern, getEmptyValue, getKnownPropertyNames, getNullAccessPattern, getNullValue, getObjectIdReader, handledType, isCachable, logicalType, replaceDelegatee, resolve, supportsUpdate, unwrappingDeserializer
-
Constructor Details
-
XssJsonDeserializer
public XssJsonDeserializer() -
XssJsonDeserializer
public XssJsonDeserializer(boolean blockOnDetection)
-
-
Method Details
-
deserialize
public String deserialize(tools.jackson.core.JsonParser p, tools.jackson.databind.DeserializationContext ctxt) throws tools.jackson.core.JacksonException 反序列化JSON字符串值,处理XSS检测从JSON解析器中读取值,并根据需要进行XSS检测
- Specified by:
deserializein classtools.jackson.databind.ValueDeserializer<String>- Parameters:
p- JSON解析器ctxt- 反序列化上下文- Returns:
- 反序列化后的字符串(检测到 XSS 时按配置记录日志/拦截,否则原样返回)
- Throws:
tools.jackson.core.JacksonException- 当读取JSON时发生解析错误,或拦截模式下检测到 XSS
-