설명
addJavascriptInterface는 Java/Kotlin 객체를 WebView JavaScript 환경에 노출합니다. 신뢰할 수 없는 페이지나 외부 입력으로 구성된 HTML에 이 인터페이스를 노출하면 스크립트가 앱 내부 메서드를 호출할 수 있습니다.
잠재적 영향
- 앱 내부 기능 오용
- 민감한 데이터 노출
- 오래된 Android 환경에서 원격 코드 실행 위험 증가
해결 방법
- 신뢰할 수 없는 콘텐츠를 로드하는 WebView에는 JavaScript 인터페이스를 추가하지 않습니다.
- 노출 메서드를 최소화하고
@JavascriptInterface메서드에서 권한과 입력을 검증합니다. - 외부 URL 대신 앱이 관리하는 정적 콘텐츠만 로드합니다.
예시
변경 전
java
webView.getSettings().setJavaScriptEnabled(true);
webView.addJavascriptInterface(new Bridge(), "bridge");
webView.loadUrl(userControlledUrl);
변경 후
java
webView.getSettings().setJavaScriptEnabled(false);
webView.loadUrl("file:///android_asset/help.html");
설명:
- 변경 전: addJavascriptInterface로 Java 객체를 WebView JavaScript에 노출하면 페이지 스크립트가 앱 객체의 메서드를 호출할 수 있습니다.
- 변경 후: 신뢰되지 않은 콘텐츠를 로드하는 WebView에서는 addJavascriptInterface를 사용하지 않습니다.