ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Cross-App Scripting Reject 해결방법
    Mobile App/Android 2021. 9. 12. 13:57

    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만 주도록 바꿨다.

     

     

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

    댓글 4

Designed by Tistory.