最近我注意到一些敏感数据被写入我正在处理的应用程序中的日志文件中。我查看了它,我们的应用程序有一个键列表,它会在写出来之前从我们的日志中删除,但是列表让我感觉它可以扩展。
是否有一个公共密钥的列表,应该在找到时从日志文件中删除?
例如,以下键及其变体可能永远不会记录在日志文件的任何位置
return View("~/Views/UserDemographics/Manage.cshtml");
请注意,我已经看过OWASP Logging cheat sheet,但它似乎没有任何细节,只是概括。
答案 0 :(得分:0)
到目前为止,我能够提出的最好的是以下内容,我通过搜索"编辑密码令牌"找到了我最好的结果。在谷歌。
x=y, x:y, 'x':y, "x":y <x>y</x>
信用卡号码(带分隔符)
\ d {4} [^ \ w] \ d {4} [^ \ w] \ d {4} [^ \ w] \ d {4}社会安全号码(带分隔符)\ d {3} [^ \ w] \ d {2} [^ \ w] \ d {4}
电子邮件地址\ b([A-Za-z0-9] | [A-Za-z0-9] [A-Za-z0-9 -._] \ [A-Za-z0-9])@(([A-Za-z0-9] | [A-Za-z] \ [A-Za-z0-9 - ] [A -Za-z0-9])。)+([A-Za-z0-9] \ | [A-ZA-Z0-9] [A-ZA-Z0-9 - ] * [A-ZA-Z0-9])\ B'/ P>
主机名\ b(([A-Za-z] | [A-Za-z] [A-Za-z0-9-] \ [A-Za-z0-9])。)+([A-Za-z0-9] \ | [A-Za-z0-9] [A-Za-z0-9 - ] [A-ZA-Z0-9])\ b'/ p>
https://github.com/watson/redact-secrets
注意:我的同事为我提供了一个Java样本密钥值的Java示例,使用正则表达式来消除包含`session,secret,token,password,passwd,connection&#39的键值。 ;在xml和json中,以及引用的变体。
import java.security.GeneralSecurityException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Redact {
private static final String prefix = "[\"']?(session|(auth_)?token|password|passwd|secret|connection)[\"']?";
private static final String capture = "([\"']?)([\\w\\d!#$%()*+,-./:<=>?@[\\\\]^_`{|}~]+)([\"']?)";
private static Pattern pattern = Pattern.compile(prefix + "\\s*(=|:)\\s*" + capture, Pattern.CASE_INSENSITIVE);
public static String encryptSensitiveInfo(String message) {
try {
if (message == null)
return message;
StringBuffer newStr = new StringBuffer(message);
int lenDiff = 0;
Matcher m = pattern.matcher(message);
// Loop over message until all sensitive data is redacted
while (m.find()) {
String keyAndValue = m.group(0);
String value = m.group(5);
String REDACTED = "REDACTED";
String replacementText = keyAndValue.replace(value, REDACTED);
// Replace the key/value in the message with the new redacted
// value, adjusting for where it is in the redacted version of
// the input
newStr = newStr.replace(m.start() - lenDiff, m.end() - lenDiff, replacementText);
lenDiff += keyAndValue.length() - replacementText.length();
}
return newStr.toString();
} catch (Exception e) {
return message;
}
}
}