|
|
@@ -143,6 +143,35 @@ class SensitivePayloadRedactorTest {
|
|
|
assertTrue(out.contains("\"app_secret\":\"***"), out);
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ void 截断在含转义引号的敏感值内部时_前缀也不落日志() {
|
|
|
+ String out = SensitivePayloadRedactor.redact(
|
|
|
+ "{\"channel_extra\":\"{\\\"openid\\\":\\\"o1secret");
|
|
|
+
|
|
|
+ assertFalse(out.contains("o1secret"), "未闭合的转义值前缀泄露了: " + out);
|
|
|
+ assertTrue(out.length() <= 2000, "实际长度 " + out.length());
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void 敏感键后紧跟对象时_整棵子树盖到末尾() {
|
|
|
+ String out = SensitivePayloadRedactor.redact("{\"channelExtra\":{\"foo\":\"bar\"}");
|
|
|
+
|
|
|
+ assertFalse(out.contains("bar"), "敏感键的对象子树泄露了: " + out);
|
|
|
+ // 非敏感内层键不得漏出,敏感键名本身保留以证明是按键定位
|
|
|
+ assertFalse(out.contains("foo"), "敏感键的对象子树泄露了: " + out);
|
|
|
+ assertTrue(out.contains("channelExtra"), out);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Test
|
|
|
+ void 合法JSON只对敏感键动手_非敏感值原样保留() throws Exception {
|
|
|
+ String out = SensitivePayloadRedactor.redact("{\"amount\":100,\"foo\":\"bar\"}");
|
|
|
+
|
|
|
+ assertTrue(out.contains("bar"), "合法 JSON 不应被兜底规则吞掉: " + out);
|
|
|
+ JsonNode node = MAPPER.readTree(out);
|
|
|
+ assertEquals(100, node.get("amount").asInt());
|
|
|
+ assertEquals("bar", node.get("foo").asText());
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
void 非JSON回退_转义的JSON字符串值整段变星号() {
|
|
|
String out = SensitivePayloadRedactor.redact(
|