gpt4 book ai didi

security - 清理 Tomcat 访问日志条目

转载 作者:行者123 更新时间:2023-11-28 21:57:13 25 4
gpt4 key购买 nike

在我们的日志中,我们看到了信用卡号,因为人们使用 CC 信息在我们的应用程序中访问了一些 ULR(我不知道他们为什么这样做)。我们想要清理此信息(出于 PCI 方面的考虑),甚至不将其保存到磁盘。

因此,我希望能够在日志条目到达日志文件之前对其进行清理。我一直在研究 Tomcat Valves(访问日志阀)。这是要走的路吗?

最佳答案

我能够通过扩展 AccessLogValve 来解决这个问题并覆盖 public log(java.lang.String message) :

public class SanitizedAccessLogValve extends AccessLogValve {

private static Pattern pattern = Pattern.compile("\\b(?:4[0-9]{12}(?:[0-9]{3})?|5[1-5][0-9]{14}|6(?:011|5[0-9][0-9])[0-9]{12}|3[47][0-9]{13}|3(?:0[0-5]|[68][0-9])[0-9]{11}|(?:2131|1800|35\\d{3})\\d{11})\\b");

/*
This method will sanitize any cc numbers in the string and replace them with x's
*/
private String sanitize(String string) {
String sanitizedString = string;

if(string != null) {

StringBuffer buffer = new StringBuffer();
Matcher matcher = pattern.matcher(string);

while(matcher.find()) {
MatchResult matchResult = matcher.toMatchResult();

int start = matchResult.start();
int end = matchResult.end();

String matchedText = string.substring(start, end);

matcher.appendReplacement(buffer, "xxxxxxxxxxxxxxxx");
}

matcher.appendTail(buffer);

sanitizedString = buffer.toString();
}

return sanitizedString;
}

@Override
public void log(String message) {
super.log(sanitize(message));
}
}

您需要将其编译成一个 jar,然后将该 jar 文件放入 $CATALINA_HOME/lib

然后在您的 server.xml 中:

<Valve className="my.valves.SanitizedAccessLogValve"
directory="access_logs" prefix="localhost." suffix=".log"
pattern='%v %h %t "%r" %s %B %T "%{User-Agent}i"'/>

关于security - 清理 Tomcat 访问日志条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5812238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com