Mobile App/Android

Cross-App Scripting Reject 해결방법

Jade Choe 2021. 9. 12. 13:57
SMALL

Intro

SSL Handler가 구현되어있는 최초 버전 (버전코드 1번)이 테스트 트랙에 올라가 있다는 이유로 구글플레이에서 삭제되었다.

당장 해당 트랙을 비활성화 한 뒤 업데이트를 시도해 보았지만 Cross App Scripting Vulnerability로 리젝되어 클라이언트의 요청이 지속되는 상황이었다.

Vulnerability APK Version(s) Past Due Date
Cross-app Scripting
Your app(s) are using a WebView that is vulnerable to cross-app scripting.
To address this issue, follow the steps in this Google Help Center article.
33 August 23, 2021

저 버전코드가 보이는가? 참고로 라이브 서비스중이었던 버전코드는 13이었다.

개빡친다

많고 많은 티스토리 블로그의 해결방법은 딱 두가지였는데,
내가 시도했던 방법은 이러하다.

AndroidMenifest 수정

많고 많은 티스토리 블로그들의 해결방법을 보면 아래 한 줄을 AndroidMenifest에 추가해줌으로써 해결할 수 있다고 쓰여있다.

<meta-data android:name="android.webkit.WebView.EnableSafeBrowsing" android:value="true" />

그러나 프로젝트에는 이미 해당 메타데이터가 추가되어있는 상태였다.

webview target url string to final

private final static String target_url = "https://블라블라";

...

    webView.loadUrl(target_url);

evaluateJavascript 보안

Scheme이 "javascript:" 인 것을 죄다 evaluateJavascript로 바꿔주고,
그마저도 사전에 약속된 스크립트가 아니면 실행하지 않도록 입구컷 시켰다.

구글한테 입구컷당했다.

FCM으로 넘어오는 url 검사

bundle.getString("url").contains(target_url)

위 코드가 true일 때만 해당 URL을 로드하도록 했다.

안된다.

android:exported="false" 설정

해당 속성을 웹뷰가 있는 Activity에 넣으면 된다고 한다.
근데.. 카카오톡 등 다른 앱 intent 사용은 안하시게요? 역시 패스....하려다가 혹시나 싶어 넣어봤다.

 

앱 실행이 안된다 ㅋㅋ

Unity Project 제거

해당 프로젝트는 Unity As A Library를 이용해 Unity Player Activity와 웹뷰가 상호 통신을 한다.
일단은.. 인텐트로 처리하니 빼보자..

***구글: 응~ 안돼~ 돌아가~

Camera / File Choose Handler 제거

카메라로 사진을 찍거나 파일선택기로 파일을 가져오는 것도 역시나 인텐트로 처리했으니 일단은 지워보았다.
다른 웹뷰 서비스들은 잘 올라가있는데 이게 맞을 리 없지.

죄다 지우고 함수 하나씩 살리기

개노가다 ON
버전코드가 33(지금은 40)까지 올라간 이유가 있다.

살리다보니 handleIntent 함수에서 딱 걸렸다.

혹시?

혹시나 싶어 FCM으로 넘어오는 url 검사 부분을 주석처리 해봤다.

와 Tlqkf

결론

구글새끼들은 loadUrl 메서드로 어떤 Url을 호출하는지에 관심이 없다.
그 Url이 final로 선언한 Url을 포함하고 있더라도..

단지 해당 Url이 final 인지 아닌지에만 관심이 있는 것 같다.

어휴..

해당부분은 이렇게 수정해 주고 업데이트를 올렸다.

 private final static String target_url = "https://블라블라";

 ...


 if(bundle.getString("url") != null) {
     final String target = target_url + bundle.getString("url");

     webView.loadUrl(target);
 }

fcm 데이터에 url 전체를 줬었는데 수정을 요청해서 url path만 주도록 바꿨다.

 

 

하........현타온다............

BIG