Android WebView JavaScript 인터페이스 노출

Android WebView JavaScript 인터페이스 노출

설명

addJavascriptInterface는 Java/Kotlin 객체를 WebView JavaScript 환경에 노출합니다. 신뢰할 수 없는 페이지나 외부 입력으로 구성된 HTML에 이 인터페이스를 노출하면 스크립트가 앱 내부 메서드를 호출할 수 있습니다.

잠재적 영향

  • 앱 내부 기능 오용
  • 민감한 데이터 노출
  • 오래된 Android 환경에서 원격 코드 실행 위험 증가

해결 방법

  1. 신뢰할 수 없는 콘텐츠를 로드하는 WebView에는 JavaScript 인터페이스를 추가하지 않습니다.
  2. 노출 메서드를 최소화하고 @JavascriptInterface 메서드에서 권한과 입력을 검증합니다.
  3. 외부 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를 사용하지 않습니다.

참조