PATH_TRAVERSAL은?
PATH_TRAVERSAL은 악성 사용자가 경로 조작 기술을 사용하여 시스템에 악성 파일을 설치하거나 데이터를 도용하는 보안 취약점 중 하나입니다. 경로 조작 기술은 악성 사용자가 입력 필드에서 경로 값을 조작하거나 URL 매개 변수에서 경로 값을 조작하여 악성 파일을 설치하거나 데이터를 도용하는 데 사용될 수 있습니다. 이러한 공격을 방지하기 위해 경로를 검증하고, 파일을 업로드하기 전에 파일 확장자 및 파일 크기 제한을 설정하고, 입력 필드 및 URL 매개 변수에서 경로 값 검증을 수행해야 합니다.
저의 경우는 아래 소스로 제작 되었습니다.
File inputFile = new File(dirTemp + fileName);
dirTemp 경로와 fileName으로 파일을 받는데 fileName을 request에서 받는 소스입니다.
해결법은 아래와 같습니다.
Java에서 PATH_TRAVERSAL 공격을 방지하는 가장 간단한 방법은 파일 경로에 하드 코딩하지 않는 것입니다. 대신, 파일 경로를 동적으로 생성하거나 사용자 입력을 통해 파일 경로를 가져오는 경우에는 경로 유효성 검사를 수행하고 안전한 경로만 사용하도록 합니다. 또한 파일 경로를 구성할 때 디렉토리 구분자로 File.separator를 사용하여 OS에 따라 다른 구분자를 사용하는 문제를 방지할 수 있습니다.
다음은 경로 유효성 검사를 수행하는 예시 코드입니다.
public static String getSafeFilePath(String basePath, String fileName) {
// 경로 유효성 검사를 위해 파일 이름에서 경로 구분자를 제거합니다.
String safeFileName = fileName.replace("\\", "").replace("/", "");
// 경로와 파일 이름을 조합하여 파일 경로를 생성합니다.
String filePath = basePath + File.separator + safeFileName;
// 경로 유효성 검사를 수행합니다.
if (!filePath.startsWith(basePath)) {
throw new IllegalArgumentException("Invalid file path");
}
return filePath;
}
위 코드에서는 basePath와 fileName을 조합하여 filePath를 생성한 후, filePath가 basePath로 시작하는지 확인하여 유효성 검사를 수행합니다. 이렇게 함으로써 파일 경로를 조작하여 다른 경로의 파일에 액세스하는 PATH_TRAVERSAL 공격을 방지할 수 있습니다.
ChatGPT, 블록체인, 자바, 맥북, 인터넷, 컴퓨터 정보를 공유합니다.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!