2011-12-22 2 views
2

로그 파일에 암호가 표시되기 전에 암호를 마스크해야합니다.정규 표현식은 무엇입니까?

암호의 형식은 "password": "pswd123"입니다. 그것은 영숫자입니다. 마스킹 후 "password"가됩니다 : "*"

내 맞춤 패턴 클래스에서 다음 reg 표현을 사용했지만 선택되지 않았습니다. 그것이 어땠 을까? 들으

@Override 
public String format(LoggingEvent event) { 

    String msg = super.format(event); 

    // regexp not being picked up 
    msg = msg.replace("\"password\":\"[^\"]*", "password:\"***\""); 

    return msg; 
} 
+1

개인적으로 나는 그것에 대해 완전히 잘못 생각하고 있다고 생각합니다. 로깅 관리자 자체에서 마스크하지 마십시오. 로깅 관리자에 들어가기 전에 마스크하십시오. 어쨌든 누군가의 실제 암호로 뭐하니? 그것은 단지 위험합니다! – corsiKa

+0

주제에서 벗어나지 만 숫자와 문자로만 이루어진 암호는 매우 약합니다. 그런 식으로 가고 싶은 특별한 이유가 있습니까? –

+0

나는 암호를 전혀 인쇄하지 않는다고 말할 것입니다. 왜 그것을 가면 어떨까요? – adarshr

답변

0

는 사용 .replaceFirst().replace()

0
  1. 완전히 대체하기는 전체 일치 할 경우 정규 표현식의 끝에서, 당신은 "지난 \ 누락
  2. 찾고있는 것입니다 문자열을 대체
0

당신은 그냥 표시 할 경우 3은 1 암호의 각 문자에 대한, 즉 좀 더 열심히의 * 표시하려는 경우 * 즉, 간단합니다.

Msg = Regex.Replace(Msg, "\"Password\":\"[^\"]+?\"", "\"Password\":\"***\"") 
0

log4j 또는 slf4j와 같은 로깅 라이브러리를 사용하고 있습니까? 이 라이브러리에는 정규 표현식을 사용하여 "문자열을 대체"하는 기능이 있습니다. 로깅 구성 파일을 변경하여 전역 적으로 사용하고 적용 할 수 있습니다. http://myregexp.com/과 같은 정규 표현식 빌더 유틸리티를 사용하고 정규 표현식을 직접 작성하는 정규 표현식을 사용해야합니다.

+0

예, 전 log4j와 slf4j를 사용하고 있습니다. 나는이 스레드에서 영감을 얻었다. http://stackoverflow.com/questions/2461726/how-to-mask-credit-card-numbers-in-log-files-with-log4j –

+0

로그백에는이 기능이있다. http : //logback.qos.ch/manual/layouts.html#replace log4j에이 기능이 내장되어 있는지 찾으려고합니다. –