2012-03-16 6 views
2

Fortify는 새로운 파일 (경로) 비교가 이루어진 행에서 경로 조작 오류를 제공합니다. Struts 2를 사용하고 있습니다.고정 경로 조작 오류

요새화가이 오류를 나타내지 않도록이 문제를 해결하는 방법을 알려줄 수 있습니까?

private boolean filePresent(String fileName) { 
    if (fileName != null) { 
     String path = getDirPath(); 
     if (path != null) { 
      path = path.endsWith("/") ? path : path + "/"; 
      path = path + fileName; 
      if (new File(path).exists()) { 
       setFileName(fileName); 
       return true; 
      } 
     } 
    } 
    return false; 
} 

나는 파일이 따라서 나는 그것이 이름 & 파일을 추가, web.xml 파일에서 전체 디렉토리 경로를 받고, 인수로 파일 이름을 전달하고있어 우리의 웹 서버 &에 존재 여부 확인해야 & 경로를 작성하여 파일 오브젝트가 존재하는지 여부를 확인하십시오.

답변

4

원격 웹 사용자가 C :/Windows/System32가 있는지 또는/etc/hosts가 있는지 여부를 확인하지 않으려면 서버에서 법의학 조사를 수행 할 수 있기 때문입니다.

아마도 입력 문자열에 적절한 수의 ".."시퀀스를 포함하여 함수가이를 수행 할 수 있다고 생각하지 않았을 것입니다.

  1. 화이트리스트 방식 :

    문제를 중지하는 방법은 두 가지가 있습니다. 입력 매개 변수의 모든 문자를 문질러 "a"부터 "z"까지 및 "." 입력이이 범위를 벗어나는 경우 예외를 throw합니다.

1a. 또는 유효한 파일 목록이 20 개 미만인 경우 입력 목록에 정확히 일치하는 항목이없는 경우 목록을 작성하고 예외를 throw하십시오.

  1. 블랙리스트 방식. 시퀀스를 ".."또는 슬래시 또는 백 슬래시가 포함되어 있으면 입력을 검사하고 예외를 throw합니다. 이것은 일반적으로 심오한 방어가 아니지만, 지금 당장이 기능을 읽을 때까지는 괜찮습니다.
0

심지어 필터에

처럼 할 필터를 사용할 수 있습니다

chain.doFilter(new RequestWrapper((HttpServletRequest) request), response); 

RequestWarper에

if(value.contains("..\\")) 
value = value.replace("..\\", ""); 
     if(value.contains("../")) 
      value = value.replace("../", ""); 
     if(value.contains("./")) 
      value = value.replace("./", ""); 
같은 것을 사용