안드로이드 웹앱 교차 앱 스크립팅 대응하기
회사에서 이전에 만들어진 앱이 있다.
웹앱인데 최근에 교차 앱 스크립팅 문제로 앱이 삭제되었다.
너무 황당했다;;
이전에 분명 대응을 했는데 아무 이유없이 앱을 내려버린 것이다.
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주를 잡아먹었다.
문제의 원인은 너무 어이가 없었는데, 프로덕션 버전이 문제가 아니라 내부테스트 버전이 문제였다...;;
구글 플레이 스토어에서는 무조건 내부테스트도 프로덕션 버전과 동일한 방식으로 검토가 된다.
그래서 내부테스트 버전을 업데이트 시키라는 것인데 나는 계속 프로덕션 버전만 수정하고 있었던 것이다.
혹시 몰랐던 분들은 참고로 알아두면 좋을 것 같다.
댓글 없음:
댓글 쓰기