mirror of
https://gitee.com/hhyykk/ipms-sjy.git
synced 2025-02-15 18:14:59 +08:00
bugfix:修复 Xss 开启时,忽略的 URL 针对 RequestBody 还是会 XSS 过滤的问题
This commit is contained in:
parent
d636391a50
commit
c943233ee5
@ -44,9 +44,11 @@ public class YudaoXssAutoConfiguration implements WebMvcConfigurer {
|
|||||||
@ConditionalOnMissingBean(name = "xssJacksonCustomizer")
|
@ConditionalOnMissingBean(name = "xssJacksonCustomizer")
|
||||||
@ConditionalOnBean(ObjectMapper.class)
|
@ConditionalOnBean(ObjectMapper.class)
|
||||||
@ConditionalOnProperty(value = "yudao.xss.enable", havingValue = "true")
|
@ConditionalOnProperty(value = "yudao.xss.enable", havingValue = "true")
|
||||||
public Jackson2ObjectMapperBuilderCustomizer xssJacksonCustomizer(XssCleaner xssCleaner) {
|
public Jackson2ObjectMapperBuilderCustomizer xssJacksonCustomizer(XssProperties properties,
|
||||||
|
PathMatcher pathMatcher,
|
||||||
|
XssCleaner xssCleaner) {
|
||||||
// 在反序列化时进行 xss 过滤,可以替换使用 XssStringJsonSerializer,在序列化时进行处理
|
// 在反序列化时进行 xss 过滤,可以替换使用 XssStringJsonSerializer,在序列化时进行处理
|
||||||
return builder -> builder.deserializerByType(String.class, new XssStringJsonDeserializer(xssCleaner));
|
return builder -> builder.deserializerByType(String.class, new XssStringJsonDeserializer(properties, pathMatcher, xssCleaner));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
package cn.iocoder.yudao.framework.xss.core.json;
|
package cn.iocoder.yudao.framework.xss.core.json;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils;
|
||||||
|
import cn.iocoder.yudao.framework.xss.config.XssProperties;
|
||||||
import cn.iocoder.yudao.framework.xss.core.clean.XssCleaner;
|
import cn.iocoder.yudao.framework.xss.core.clean.XssCleaner;
|
||||||
import com.fasterxml.jackson.core.JsonParser;
|
import com.fasterxml.jackson.core.JsonParser;
|
||||||
import com.fasterxml.jackson.core.JsonToken;
|
import com.fasterxml.jackson.core.JsonToken;
|
||||||
import com.fasterxml.jackson.databind.DeserializationContext;
|
import com.fasterxml.jackson.databind.DeserializationContext;
|
||||||
import com.fasterxml.jackson.databind.deser.std.StringDeserializer;
|
import com.fasterxml.jackson.databind.deser.std.StringDeserializer;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.util.PathMatcher;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
@ -20,10 +24,29 @@ import java.io.IOException;
|
|||||||
@AllArgsConstructor
|
@AllArgsConstructor
|
||||||
public class XssStringJsonDeserializer extends StringDeserializer {
|
public class XssStringJsonDeserializer extends StringDeserializer {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 属性
|
||||||
|
*/
|
||||||
|
private final XssProperties properties;
|
||||||
|
/**
|
||||||
|
* 路径匹配器
|
||||||
|
*/
|
||||||
|
private final PathMatcher pathMatcher;
|
||||||
|
|
||||||
private final XssCleaner xssCleaner;
|
private final XssCleaner xssCleaner;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
|
public String deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
|
||||||
|
// 1. 白名单 URL 的处理
|
||||||
|
HttpServletRequest request = ServletUtils.getRequest();
|
||||||
|
if (request != null) {
|
||||||
|
String uri = ServletUtils.getRequest().getRequestURI();
|
||||||
|
if (properties.getExcludeUrls().stream().anyMatch(excludeUrl -> pathMatcher.match(excludeUrl, uri))) {
|
||||||
|
return p.getText();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2. 真正使用 xssCleaner 进行过滤
|
||||||
if (p.hasToken(JsonToken.VALUE_STRING)) {
|
if (p.hasToken(JsonToken.VALUE_STRING)) {
|
||||||
return xssCleaner.clean(p.getText());
|
return xssCleaner.clean(p.getText());
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user