라벨이 DownloadManager인 게시물 표시

Android WebView 파일 다운로드 구현 (DownloadManager vs SAF 선택 기준과 보안 설정)

WebView 기반으로 앱을 빌드하고 운영하다 보면, 웹 페이지 내의 파일 다운로드 기능을 처리해야 할 때가 꼭 생깁니다. 처음에는 단순히 다운로드 링크를 누르면 알아서 받아지겠지 생각하기 쉽지만, 실제로 운영해보면 그렇지가 않습니다. 다운로드 URL 검증부터 파일명 정제, Android 버전별 저장소 정책, 보안 검수까지 사전에 챙겨야 할 항목들이 꽤 많습니다. 저의 경우도 예전에 대충 넘겼다가 구글 플레이 보안 관련 지적을 받거나, Android 버전이 올라가면서 저장소 권한 문제로 다운로드가 안 된다는 사용자 피드백을 받고 식은땀을 흘린 적이 있습니다. 자꾸 까먹기도 해서, 실무에서 바로 쓸 수 있도록 다운로드 구현 기준과 필수 체크리스트를 정리해 둡니다. 1. WebView 파일 다운로드 시 자주 겪는 문제들 보통 다운로드 기능을 대충 구현하면 아래와 같은 지점에서 문제가 터집니다. URL 검증 미흡: 다운로드 URL을 검증하지 않고 그대로 DownloadManager 에 넘기면, 알 수 없는 스킴이나 피싱 목적의 HTTP URL까지 처리하게 되어 보안상 위험합니다. 파일명 오염: 서버가 내보낸 Content-Disposition 값을 그대로 믿고 쓰면, 파일 이름에 허용되지 않는 특수문자가 섞여 있거나 이름이 너무 길어서 저장 실패가 날 수 있습니다. MIME Type 누락: 파일 타입을 제대로 지정하지 않으면 사용자가 다운로드 폴더에서 파일을 열 때 어떤 앱으로 열어야 하는지 기기가 인지하지 못합니다. 저장소 권한 반려: Android 10(API 29) 이후 Scoped Storage 정책을 고려하지 않고 과거 방식대로 공용 저장소에 직접 쓰려고 하면 앱이 뻗거나 구글 검수에서 권한 과다 요청으로 반려됩니다. 인증 토큰 노출: 다운로드 URL의 Query 스트링에 Access Token이나 개인 식별자를 그대로 태워 보내면, 시스템 로그나 알림 창, 브라우저 기록에 고스란히 남는 보안 취약점이 발생합니다. 운영 관점에서 파일 다운로드는 ...