文章目录
- 背景
- 解决步骤
- 1. 自定义Converter
- 2. logback.xml配置Converter
背景
公司上线前进行静态代码扫描,项目中出现大量Log Forging
问题,需要解决大量该类问题才能上线。攻击者通过伪造请求参数(包括headers)访问服务,如果服务端直接将参数打印到日志中,攻击者就可以随意伪造日志输出结果,造成严重后果。
解决步骤
1. 自定义Converter
public class LogFilter extends ClassicConverter {
@Override
public String convert(ILoggingEvent event) {
if (event.getLoggerName().startsWith("com.x.x")) { //根据package启用规则
return vaildLog(event.getFormattedMessage());
} else {
return event.getFormattedMessage();
}
}
/**
* 特殊字符替换
*
* @param logs
* @return
*/
public static String convertLog(String logs) {
List<String> list = Arrays.asList("%0a", "%0A", "%0d", "%0D", "\r", "\n");
String converted = Normalizer.normalize(logs, Normalizer.Form.NFKC);
for (String s : list) {
converted = converted.replace(s, "");
}
return converted;
}
}
2. logback.xml配置Converter
在<configuration>
标签下添加如下配置:
<conversionRule conversionWord="msg" converterClass="xxx.LogFilter" />
更多推荐
Fortify:Log Forging问题解决
发布评论