안드로이드

[안드로이드] 2-2. WebView 웹뷰 - Javascript Interface(Kotlin)

디벨로펄 2023. 3. 11.
반응형

참고자료 : https://developer.android.com/guide/webapps/webview?hl=ko

 

WebView에서 웹 앱 빌드  |  Android 개발자  |  Android Developers

WebView에서 웹 앱 빌드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 웹 애플리케이션 또는 웹페이지만 클라이언트 애플리케이션의 일부로 제공하려는 경

developer.android.com

1. Local HTML파일 불러오기

https://developerpearl.tistory.com/63

2. Javascript 인터페이스 테스트

 

WEBView에서 javascript를 사용해보자!!

* 자바스크립트에 결합된 객체는 객체가 생성된 스레드가 아닌 다른 스레드에서 실행된다.

* 보안 문제를 인지하자.

 

1. webView 세팅 javascriptEnabled = true

myWebView.settings.javaScriptEnabled=true

이외에도 settings를 활용하면 다양하고 유용한 기타 설정에 액세스할 수 있습니다

2. WebAppInterface정의

class WebAppInterface(private val mContext : Context) {
    // 웹에서 안드로이드 toastmessage 띄우기!!?
    @JavascriptInterface
    fun showToast(toast:String){
        Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show()
    }
}

3. addJavascriptInterface

myWebView.addJavascriptInterface(WebAppInterface(this), "Android")
// name("Android")으로 javascript내에서 해당 인터페이스를 불러오게된다.

 

테스트 성공~

 

* Javascript로 안드로이드 API를 다루어 봤다. 웬만하면, 동일 서비스의 android, web버전 사이에서 사용될 것 같다.

XSS 취약점이 있을 수 있다고 한다.(웹사이트 관리자가 아닌 이가 웹 페이지에 악성 스크립트를 삽입할 수 있는 취약점이다.)

 

필독사항(구현도 중요하지만, 사용할 때와 아닐 때를 구분하는게 더 중요한듯..)

주의: addJavascriptInterface()를 사용하면 자바스크립트가 Android 앱을 제어할 수 있게 됩니다. 이는 유용한 기능일 수 있지만 동시에 위험한 보안 문제가 될 수 있습니다. WebView에 포함된 HTML이 신뢰할 수 없는 HTML인 경우(예: HTML의 일부 또는 전체가 알 수 없는 사람이나 프로세스에 의해 제공된 경우) 공격자가 클라이언트 측 코드와 공격자가 선택한 모든 코드를 실행하는 HTML을 포함할 수 있습니다. 따라서 개발자는 WebView에 표시되는 HTML 및 자바스크립트를 모두 작성한 경우가 아니면 addJavascriptInterface() 사용해서는 안 됩니다. 또한 사용자에게WebView 내에서 개발자 소유가 아닌 다른 웹페이지로 이동하도록 허용해서는 안 됩니다. 대신 사용자의 기본 브라우저 애플리케이션에서 외부 링크를 열 수 있도록 허용합니다. 기본적으로 사용자의 웹브라우저는 모든 URL 링크를 엽니다. 따라서 위 섹션에서 설명한 것처럼 페이지 탐색을 처리하는 경우에만 주의합니다.

반응형

댓글