728x90
반응형
상황
- 프로젝트 내에서 소스코드 점검을 진행했는데, 점검 결과, VA_FORMAT_STRING_USES_NEWLINE 취약점이 검출되었다.
- 점검은 OWASP TOP 10 ( 10대 웹 보안 취약점 ), CWE (보안 약점 ) 둘다 커버하는 Spotbugs + FindSecurityBugs를 사용하였다.
- VA_FORMAT_STRING_USES_NEWLINE에 대해 찾아보니, 개행문자를 사용하려면 "\n" 이 아니라 "%n"을 사용하라고 한다.
FS: Format string should use %n rather than n (VA_FORMAT_STRING_USES_NEWLINE)
This format string includes a newline character (\n). In format strings, it is generally preferable to use %n, which will produce the platform-specific line separator.
FS: 형식 문자열은 n이 아닌 %n을 사용해야 합니다(VA_FORMAT_STRING_USES_NEWLINE).
이 형식 문자열에는 개행 문자(\n)가 포함됩니다. 형식 문자열에서는 일반적으로 플랫폼별 줄 구분 기호를 생성하는 %n을 사용하는 것이 좋습니다.
처리방법
- spotbugs readthedocs에는 개행할때는 %n을 사용하라고 하는데, 안되고 (내가못해서 그럴수도 있다..) System.lineSeparator() 함수를 사용해서 해결했다.
- %n
- spotbugs.readthedocs에서 가이드 해주는데로 \n 대신 %n을 사용하라고 하는데.. 안된다
public class test {
public static void main(String[] args) {
String text = "SocialNm:카카오\nSocialCode:102";
String text2 = "SocialNm:카카오%nSocialCode:102";
// \n 사용
System.out.println(text);
System.out.println("--------------------------------------");
// %n 사용
System.out.println(text2);
}
}
====================결과====================
SocialNm:카카오
SocialCode:102
--------------------------------------
SocialNm:카카오%nSocialCode:102
- 내가 이해를 잘못했을수도 있다
- lineSeparator
- \n 대신 System.lineSeparator() 를 사용하는 방법이다.
- java 1.7부터 제공되는 함수로, os에 맞게 알아서 개행처리를 해준다. 잘된다.
public class test {
public static void main(String[] args) {
String text = "SocialNm:카카오\nSocialCode:102";
String text2 = "SocialNm:카카오" + System.lineSeparator() + "SocialCode:102";
// \n 사용
System.out.println(text);
System.out.println("--------------------------------------");
// lineSeparator 사용
System.out.println(text2);
}
}
====================결과====================
SocialNm:카카오
SocialCode:102
--------------------------------------
SocialNm:카카오
SocialCode:102
- 개행문자 사용할 경우, 취약점 점검에 안걸리게 System.lineSeparator()를 사용하자.
728x90
반응형