Development record of developer who study hard everyday.

레이블이 안드로이드교차앱스크립팅인 게시물을 표시합니다. 모든 게시물 표시
레이블이 안드로이드교차앱스크립팅인 게시물을 표시합니다. 모든 게시물 표시
, , , ,

안드로이드 교차앱 스크립팅(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.

이유가 뭘까? 하면서 구글링을 열심히하면서 공부한 내용을 총 정리해보겠다.

1. exported = false

가장 흔히 나오는 대응 방식이다.

안드로이드 manifest.xml 파일에 가서 WebView를 사용하는 액티비티에 exported = false를 설정해준다.

예시는 아래와 같다.

<activity
android:name=".ui.MainActivity"
android:screenOrientation="portrait"
android:launchMode="singleInstance"
android:exported="false">
<intent-filter>
<action android:name="FCM_PLUGIN_ACTIVITY"/>
</intent-filter>

</activity>


2. EnalbeSafeBrowsing 설정

마찬가지로 manifest.xml 파일에가서 WebView를 사용하는 액티비티에 메타데이터를 설정해준다.

예시코드는 아래와 같다.

<activity
android:name=".ui.MainActivity"
android:screenOrientation="portrait"
android:launchMode="singleInstance"
android:exported="false">
<intent-filter>
<action android:name="FCM_PLUGIN_ACTIVITY"/>
</intent-filter>

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


3. sanitized한 url 호출

이해가 잘 안 갈지 모르겠다... 하지만 단순하다.

웹뷰에서 열어줄 url에 교차 앱 스크립팅 공격이 포함된 코드를 제거해주는 과정이다.

예시코드는 아래와 같다.

final String finalLinkUrl = UrlQuerySanitizer.getUrlAndSpaceLegal().sanitize(linkUrl);
loadUrl(finalLinkUrl);

이때 반드시, url을 저장하는 변수를 final로 선언해주자!!

                                       

✋ 이건 여담인데, 나같은 경우에는 위 3가지를 처리해줘도 앱이 계속 리젝당했다.

이유도 마찬가지로 교차 앱 스크립팅에 취약한 웹뷰를 사용한다는 이유였다.

이것때문에 거의 3주를 잡아먹었다.

문제의 원인은 너무 어이가 없었는데, 프로덕션 버전이 문제가 아니라 내부테스트 버전이 문제였다...;;

구글 플레이 스토어에서는 무조건 내부테스트도 프로덕션 버전과 동일한 방식으로 검토가 된다.

그래서 내부테스트 버전을 업데이트 시키라는 것인데 나는 계속 프로덕션 버전만 수정하고 있었던 것이다.

혹시 몰랐던 분들은 참고로 알아두면 좋을 것 같다.


Share:
Read More