본문 바로가기
cs

[시큐어 코딩/Secure Coding] 입력 데이터 검증 및 표현 - 상대 경로 탐색

by 최연탄 2019. 2. 11.
728x90
반응형

참고: 안드로이드 시큐어코딩 가이드
참고: CWE-23: Relative Path Traversal
참고: Seven pernicious kingdoms

설명

파라미터를 통하여 제한된 디렉토리 내에서만 파일접근을 허용하도록 만들 경우, 적절한 검증 절차를 거치지 않으면 ‘..’ 같은 문자열을 통해 해당 디렉토리 외부에 있는 경로에 대한 접근을 허용하는 문제가 발생할 수 있습니다.

안전한 코딩기법

모든 입력을 악의적 입력이라 가정하고 좋은 입력만 허용하는 전략을 사용합니다. 즉 요구사항을 엄격히 준수하는 입력가능 허용 목록을 사용하고 엄격히 따르지 않는 모든 입력은 거부하는 것입니다. 상기 서술한 바와 같이 상대경로 접근과 같은 문자열이 파라미터로 넘어올 경우 원칙적으로 거부해야 하지만 그렇지 못할 경우 replaceAll(), replacingOccurrences(of:with:) 등의 메소드를 사용해 악의적일 가능성이 있는 위험 문자열을 필터 하도록 방어코드를 작성합니다.

예제 (Android Java)

위 코드는 외부에서 받은 경로를 통해 파일을 삭제하도록 하고있습니다. 만일 name의 값으로 ../otherFile이 전달된다면 의도치 않았던 파일이 삭제되는 결과를 얻을 수 있습니다.

작업을 진행 할 객체들에 대하여 null 체크를 하고, 외부 입력값(name)에 대해 상대경로 등 특수문자를 설정할 수 없도록 필터 함으로 안전한 코드를 만들 수 있습니다. 이 코드는 방법론을 설명하기위한 것이기 때문에 맹신 보다는 더 효율적이고 우아한 코드를 생산할 수 있도록 고민을 해볼 필요가 있습니다.

반응형

댓글