2016-07-11 3 views
1

하나의 J2EE 응용 프로그램이 있고 해당 응용 프로그램에 대해 강화 요원 검사에 로케일 종속 문제가 표시됩니다.고정 강화 검사가 고정되었습니다. 로케일 변경 사항이 다시 나타납니다.

나는 문자열, 이전을 비교하면서를 toUpperCase (Locale.ENGLISH)과와 toLowerCase (Locale.ENGLISH) 기능에 Locale.ENGLISH를 사용하는 문제, 이제

firstName.trim().toLowerCase(); 

firstName.trim().toLowerCase(Locale.ENGLISH); 
를 해결했습니다

그리고 애플리케이션에서 요새 검사를 다시 실행합니다. 그러나 두 번째로 요새 검사는 같은 위치에서 로케일 오류를 표시합니다.

누구든지 알고 있습니까? 이러한 문제를 어떻게 해결할 수 있습니까?

감사합니다, 제이

+0

정확한 오류가 무엇입니까?를 참조하십시오 – Taegost

답변

1

문제 범주 "휴대 결함 : 로케일 종속 비교"(RULEGUID = D8E9ED3B-22EC-4CBA-98C8-7C67F73CCF4C)은 "코드 품질"나라에 속하고 위험이 낮은 문제입니다 . 나는 보통 교정되지 않은 상태로 두었다.

RATIONALE "java.lang.String.toUpperCase() /와 toLowerCase()는"로케일을 설정하지 않고 사용 , 그것은 기본 로케일을 사용합니다. 이로 인해 보안 검사가 무시 될 수 있습니다. 예를 들어 사용자 입력에서 '스크립트'를 제외하고자합니다. 기본 언어가 터키어 인 경우 tag.toUpperCase()는 "T \ u0130TLE"을 반환합니다. 여기서 "\ u0130"은 "위에 표시된 대문자"문자입니다. 따라서 "스크립트"검사가 무시됩니다.

if (tag.toUpperCase().equals("SCRIPT")){ 
    return null;} 

개선

(1) 사용자가 설정할 수있는 언어로 시작 VM하고 문제를 표시 "가 아닌 경우 문제"

java -Duser.language=en -Duser.country=US -Duser.variant=US MainClass 

(2) 또는 설정 언어 코드로

import java.util.Locale; 
//be aware that Locale.setDefault is global, below set locale to en_US_WIN 
    Locale.setDefault(new Locale("en", "US", "WIN")); 

클라이언트가 서로 다른 언어를 사용하는 경우 (3), 사용 HttpServletRequest.getLocale

// 샘플 코드 here