[go] 파일 경로 매칭의 유효성 검사
파일 경로 매칭은 유용한 기능이지만, 잘못된 입력으로 인해 보안 문제가 발생할 수 있습니다. 따라서 파일 경로 매칭을 사용할 때는 입력된 경로가 유효한지 검사해야 합니다.
상대 경로와 절대 경로
파일 경로는 상대 경로와 절대 경로로 나눌 수 있습니다.
- 절대 경로: 루트 디렉토리(예:
/
또는C:\
)에서부터 시작하는 경로 - 상대 경로: 현재 작업 디렉토리를 기준으로 한 경로
경로 유효성 검사
파일 경로 매칭을 수행하기 전에 다음과 같은 사항을 확인해야 합니다.
- 사용자 입력 검증: 사용자가 입력한 경로가 유효한지 확인해야 합니다. 이를 통해 악의적인 경로가 입력되는 것을 방지할 수 있습니다.
- 상대 경로 변환: 상대 경로가 절대 경로로 변환되어 매칭되는지 확인해야 합니다.
- 디렉토리 접근 권한: 사용자가 접근 가능한 디렉토리인지 확인해야 합니다.
- 경로 확장자 필터링: 허용되지 않는 파일 확장자를 매칭에서 제외해야 합니다.
실제 코드 예시
다음은 Go 언어를 사용하여 파일 경로 유효성을 검사하는 예시 코드입니다.
package main
import (
"fmt"
"path/filepath"
)
func main() {
inputPath := "/somepath/file.txt"
basePath := "/somepath"
fullPath, err := filepath.Abs(inputPath)
if err != nil {
fmt.Println("Invalid path:", err)
return
}
if !filepath.IsAbs(fullPath) || !filepath.HasPrefix(fullPath, basePath) {
fmt.Println("Invalid path:", fullPath)
return
}
fmt.Println("Valid path:", fullPath)
}
결론
파일 경로 매칭을 사용할 때는 항상 유효성을 검사하여 보안 문제를 예방해야 합니다. 사용자 입력을 신뢰하지 말고 항상 검증하는 습관을 가지는 것이 중요합니다.
참고 문헌: