보안/시큐어코딩

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

오픈이지 2012. 10. 28. 15:00


발생원인


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



영향


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



코드예


 안전하기 않은 코드의 예 - 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에대해 위험한 문자 치환 추가