일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Swift flutterviewcontroller
- 앱 백그라운드 푸시 데이터 저장
- 안드로이드 숏컷
- 스위프트 테이블 뷰 셀
- 안드로이드 FCM
- 스위프트 UserDefaults
- 플러터 뷰 컨트롤러
- swift sms
- FlutterView MethodChannel
- swift 문자
- 안드로이드 앨범
- 앱 꺼졌을 때 푸시 데이터 저장
- flutter rotate
- NotificationService Extension
- 노티피케이션 익스텐션
- 푸시 데이터 저장
- native flutter view
- silent push
- swift autolayout
- 안드로이드 바로가기
- Flutter NativeView
- 스위프트 앨범
- 스위프트 카메라
- 스위프트 웹뷰
- flutter 회전
- 스위프트 푸시
- 안드로이드 에러
- 스위프트
- Flutter UIKitView MethodChannel
- Swift flutterview
- Today
- Total
Things take time
[Android] 플레이스토어 Intent Scheme Hijacking 관련 리젝 본문
Your app(s) are using a WebView that is vulnerable to Intent scheme hijacking.
앱을 제출하고 나니 받은 에러,
웹뷰를 사용하고있는 내 앱은 하이재킹 인텐트 스키마에 취약하다?
한마디로 보안에 관련된 이슈로써, 웹뷰에서 사용하고 있는 것에 대해 점검해보란것이다.
https://support.google.com/faqs/answer/9101196
해결방법에 대해 간단히 정리하자면 두 가지가 있다. (옵션 1,2로 제공)
1. Intent.parseUri가 사용되는 부분을 모두 체크하여 아래와 같이 사용한다.
// convert Intent scheme URL to Intent object
Intent intent = Intent.parseUri(url);
// forbid launching activities without BROWSABLE category
intent.addCategory("android.intent.category.BROWSABLE");
// forbid explicit call
intent.setComponent(null);
// forbid Intent with selector Intent
intent.setSelector(null);
// start the activity by the Intent
view.getContext().startActivity(intent, -1);
그러니까 Browsable 카테고리 없이 액티비티를 실행하지 말란 의미이다. 즉, 스키마를 통해 외부 앱을 킬때는 Browasable로 등록된 앱들만 킬 수 있도록하여, 사용자의 보안을 향상시키란 의미이다.
2. 웹뷰 사용시, 간단히 말해서 아래의 설정을 사용하고 있으면 해제하자.
위치는 Manifest.xml의 application안에
android:usesCleartextTraffic="false"
위 속성이 만약 true로 되어있다면 false로 교체하자.
단, 교체하기전에 미리 알아보자면 저 속성의 의미는 암호화되지 않은 연결을 허용하겠다는 옵션으로, 대표적인 사용 예가 http로 된 URL을 로드하는 경우다.
안드로이드 파이(9.0)부터는 Https를 기본적으로 허용하는데, 이 부분을 예외처리하기 위해 사용하는 것이 저 옵션이다.
** 만약, 위 옵션대로 Https만을 허용하되, 특정 사이트는 Http를 허용하겠다면! 이럴때 사용하는것이 네트워크 보안 구성이다.
https://developer.android.com/training/articles/security-config.html
<application
android:usesCleartextTraffic="false"
android:networkSecurityConfig="@xml/network_security_config"
매니페스트에서 설정을 이렇게 맞추고 xml하위에 해당 xml 파일을 생성한다.
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">abc.def.com</domain>
</domain-config>
</network-security-config>
그리고 위와 같이 설정해주면 된다.
단, 이 것의 단점은 무엇인가.
위의 xml에 기록되지 않은 도메인들은 Https여야한다는 것인데, 만약 웹뷰에서 주소를 직접입력하여 Http로 된 사이트들을 오픈해야한다거나 할땐 보이지 않아 오류가 발생하므로, 그것또한 문제가 발생한다. (CLEAR TEXT NOT PERMITTED 관련 오류)
단순히 해당 사이트가 Https가 아니라서 문제가 발생합니다. 라고 해도 되겠지만, 현재는 Http사이트도 있기 때문에, 이 사이트들 모두를 막는 것은 현실적으로 맞지 않는다.
그러므로 옵션2의 방법인 false로 세팅하는 것보다는 옵션1의 방법을 따르자.