xssFilter和sqlFilter增加附加参数,方便追踪调用来源

This commit is contained in:
thinkgem
2021-05-27 19:52:15 +08:00
parent ff04855966
commit 11e1934d04
4 changed files with 22 additions and 5 deletions

View File

@@ -12,6 +12,8 @@ import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.codec.DecoderException;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.binary.Hex;
@@ -201,12 +203,20 @@ public class EncodeUtils {
Pattern.compile("(eval\\((.*?)\\)|xpression\\((.*?)\\))", Pattern.CASE_INSENSITIVE),
Pattern.compile("^(javascript:|vbscript:)", Pattern.CASE_INSENSITIVE)
);
/**
* XSS 非法字符过滤,内容以<!--HTML-->开头的用以下规则(保留标签)
* @author ThinkGem
*/
public static String xssFilter(String text) {
return xssFilter(text, null);
}
/**
* XSS 非法字符过滤,内容以<!--HTML-->开头的用以下规则(保留标签)
* @author ThinkGem
*/
public static String xssFilter(String text, HttpServletRequest request) {
String oriValue = StringUtils.trim(text);
if (text != null){
String value = oriValue;
@@ -265,12 +275,19 @@ public class EncodeUtils {
"(?:')|(?:--)|(/\\*(?:.|[\\n\\r])*?\\*/)|((extractvalue|updatexml)([\\s]*?)\\()|"
+ "(\\b(select|update|and|or|delete|insert|trancate|char|into|substr|ascii|declare|exec|count|master|into|drop|execute|case when|sleep|union|load_file)\\b)",
Pattern.CASE_INSENSITIVE);
/**
* SQL过滤防止注入传入参数输入有select相关代码替换空。
* @author ThinkGem
*/
public static String sqlFilter(String text){
return sqlFilter(text, null);
}
/**
* SQL过滤防止注入传入参数输入有select相关代码替换空。
* @author ThinkGem
*/
public static String sqlFilter(String text, String source){
if (text != null){
String value = text;
Matcher matcher = sqlPattern.matcher(value);

View File

@@ -27,7 +27,7 @@ public class IpUtils {
ip = request.getRemoteAddr();
}
if (StringUtils.isNotBlank(ip)){
ip = EncodeUtils.xssFilter(ip);
ip = EncodeUtils.xssFilter(ip, request);
ip = StringUtils.split(ip, ",")[0];
}
if (StringUtils.isBlank(ip)){

View File

@@ -115,7 +115,7 @@ public class FormAuthenticationFilter extends org.apache.shiro.web.filter.authc.
}
// 登录时判断是否需要记住用户名
if (WebUtils.isTrue(request, REMEMBER_USERCODE_PARAM)) {
rememberUserCodeCookie.setValue(EncodeUtils.encodeUrl(EncodeUtils.xssFilter(username)));
rememberUserCodeCookie.setValue(EncodeUtils.encodeUrl(EncodeUtils.xssFilter(username, (HttpServletRequest)request)));
rememberUserCodeCookie.saveTo((HttpServletRequest)request, (HttpServletResponse)response);
} else {
rememberUserCodeCookie.removeFrom((HttpServletRequest)request, (HttpServletResponse)response);

View File

@@ -94,7 +94,7 @@ public class LogUtils {
}
log.setServerAddr(request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort());
log.setRemoteAddr(IpUtils.getRemoteAddr(request));
log.setUserAgent(EncodeUtils.xssFilter(request.getHeader("User-Agent")));
log.setUserAgent(EncodeUtils.xssFilter(request.getHeader("User-Agent"), request));
UserAgent userAgent = UserAgent.parseUserAgentString(log.getUserAgent());
log.setDeviceName(userAgent.getOperatingSystem().getName());
log.setBrowserName(userAgent.getBrowser().getName());