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

public class XssJsonDeserializer extends tools.jackson.databind.ValueDeserializer<String>
XSS JSON反序列化器 (Jackson 3)

用于在JSON反序列化过程中对字符串进行XSS检测

作用范围:仅在一次 HTTP 请求上下文中生效(XssHolder.inRequest())。 XssHolder 仅在 XssInterceptor 的请求生命周期内 set/remove,因此非请求上下文 (Actuator/JMX 内部对象反序列化、定时任务、后台线程)直接跳过检测,原样返回, 避免对框架/内部元数据产生海量误报 WARN 日志。

入站策略(H4 修复):只检测记录、不改写数据—— 入站全量转义会污染存储(<script> 存成 &lt;script&gt;),且与出站转义叠加造成双重转义。 现在检测到疑似 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
    Constructor
    Description
     
    XssJsonDeserializer(boolean blockOnDetection)
     
  • Method Summary

    Modifier and Type
    Method
    Description
    deserialize(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

    Methods inherited from class Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • 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:
      deserialize in class tools.jackson.databind.ValueDeserializer<String>
      Parameters:
      p - JSON解析器
      ctxt - 反序列化上下文
      Returns:
      反序列化后的字符串(检测到 XSS 时按配置记录日志/拦截,否则原样返回)
      Throws:
      tools.jackson.core.JacksonException - 当读取JSON时发生解析错误,或拦截模式下检测到 XSS