2016-11-07 1 views
0

안녕하세요 스크립트 공격을 방지하기 위해 인코딩 및 디코딩 문자열을 ESAPI를 사용하고 있는데 나는 이런 식으로 사용하고 있습니다JAVA ESAPI 인코더

나는 "%"기호 문자열을 전달하면 문제가
public static String encode(String value) { 
    if (value == null) { 
     return null; 
    } 
    Encoder encoder = ESAPI.encoder(); 
    return encoder.encodeForHTML(encoder.canonicalize(value)); 
} 

, 을 사용하여 디코딩하십시오. StringEscapeUtilsunescapeHtml 이스케이프 처리에 다른 방법을 사용해야합니까? "%"를 to로 변경합니까?

답변

0

나는이 ESAPI의 defaultencoder의 canonilize 방법에 문제가 될 것으로 보인다 믿고, 단지 문제는 여기에서하고있는 것처럼 Encoder.canonicalize()을 사용하여에 언급 GitHub의 링크 https://github.com/ESAPI/esapi-java/issues/1

+0

실제 문제는 https://github.com/ESAPI/esapi-java-legacy/issues/377이지만 여기서는 적용되지 않습니다. – avgvstvs

0

하나의 이슈 트래커를 발견했다. 출력 이전이 아닌 입력 유효성 검사 전에 표준화됩니다.

여기의 인코딩 방법을 사용하면 정규화 방법을 사용하지 마십시오. 를 정규화에 대한

다른 현명한 제안 :

  1. 는 정규화 값을 유지하지 마십시오. 그것을 사용하여 유효성 검증 논리를 수행하십시오. 의미, RawInput-> Canonicalize-> Validate. 유효성이 확인되면 원래 값을 유지/처리하십시오.

  2. 이 방법의 주된 장점은 혼합 된 인코딩 공격을 혼합하거나 검색하는 것입니다.