본문 바로가기

보안/시큐어코딩

[시큐어코딩-11] 입력데이터 검증및 표현(11) 디렉토리 경로조작


발생원인


외부의 입력이 시스템에서 경로 등으로 활용되는 환경에서 입력값 검증이 없는 경우 발생



영향


임의의 파일 생성, 주요 파일 노출, 파일 삭제



코드예


 안전하기 않은 코드의 예 - JAVA

……

public void f(Properties request) {

……

String name = request.getProperty("filename");

if( name != null ) {

    File file = new File("/usr/local/tmp/" + name);

    file.delete();

}

  ……

}


 name에 대한 검증없이 사용


 안전한 코드의 예 - JAVA

……

public void f(Properties request) {

……

String name = request.getProperty("user");

if ( name != null && !"".equals(name) ) {

  name = name.replaceAll("/", "");

  name = name.replaceAll("\\", "");

  name = name.replaceAll(".", "");

  name = name.replaceAll("&", "");

  name = name + "-report";

  File filenew File("/usr/local/tmp/" + name);

  if (file != null) file.delete();

 }

  ……

}

 name에대해 위험한 문자 치환 추가