android:exported의 기본값
지정이 없으면 항상 디폴트로 android:exported="false"가 되는 것은 아니다는 이야기.
결론
exported 속성은, 명시적으로 모두 지정하는 편이 안전
이유
예기치 않게 외부 앱에 게시했을 가능성이 있기 때문에
1. Activity의 exported는 무지정의 경우,intent-filter의 정의의 유무에 의해 true/false가 정해진다.
- intent-filter 정의 있음: android:exported="true"(외부 앱에 공개)
- intent-filter 정의 없음: android:exported="false"(외부 앱에 비공개)
실수로 exported를 지정하지 않고 intent-filter를 정의하면,
그 activity는 외부 앱에서도 시작할 수 있습니다.
게다가, 그 activity를 기동하려고 던진 암묵적 인텐트는, 외부의 어플리도 받아들여져 버린다.
2. Provider의 exported의 디폴트는, OS버전으로 행동이 다르다.
- Android 4.2(API Level 17)까지는 기본적으로 true
- Android 4.3(API Level 18)부터는 기본적으로 false
실수로 exported를 지정하지 않고 minSdkVersion을 17 이하도 포함하면
OS 버전의 차이로 공개/비공개가 바뀌는 것에.
AndroidManifest.xml 보지 않으면 문제없는 생각도 들지만. . .
Google Play의 앱인 AndroidManifest.xml을 살펴보세요.
*【이 괄호 안은, 가변입니다】
예기치 않게 외부 앱에 게시했을 가능성이 있기 때문에
1. Activity의 exported는 무지정의 경우,intent-filter의 정의의 유무에 의해 true/false가 정해진다.
- intent-filter 정의 있음: android:exported="true"(외부 앱에 공개)
- intent-filter 정의 없음: android:exported="false"(외부 앱에 비공개)
실수로 exported를 지정하지 않고 intent-filter를 정의하면,
그 activity는 외부 앱에서도 시작할 수 있습니다.
게다가, 그 activity를 기동하려고 던진 암묵적 인텐트는, 외부의 어플리도 받아들여져 버린다.
2. Provider의 exported의 디폴트는, OS버전으로 행동이 다르다.
- Android 4.2(API Level 17)까지는 기본적으로 true
- Android 4.3(API Level 18)부터는 기본적으로 false
실수로 exported를 지정하지 않고 minSdkVersion을 17 이하도 포함하면
OS 버전의 차이로 공개/비공개가 바뀌는 것에.
AndroidManifest.xml 보지 않으면 문제없는 생각도 들지만. . .
Google Play의 앱인 AndroidManifest.xml을 살펴보세요.
*【이 괄호 안은, 가변입니다】
앱 페이지 URL에서 확인할 수 있습니다.
https://play.google.com/store/apps/details?id=【target package name】
adb 명령으로 전체 경로 확인
>adb shell pm list packages -f 【target package name】
package:/data/app/【target package name】-1/base.apk=【target package name】
adb를 사용하여 apk를 PC에 pull
> adb pull/data/app/【target package name】-1
↓
zip의 AndroidManifest.xml을 AXMLPrinter2.jar로 변환
AXMLPrinter2.jar
>java -jar AXMLPrinter2.jar AndroidManifest.xml> AndroidManifestConverted.xml
exported="true"의 activity, 또는 exported의 기재가 없이 intent-filter가 정의되고 있는 activity를 찾는다.
체감, 평가가 낮은 앱에서 발견하기 쉬운 느낌
MainActivity.kt
val targetPackageName : String = "【target package name】"
val targetActivityName : String = "【target activity name】"
val intent : Intent = Intent()
intent.setClassName( targetPackageName, targetActivityName )
startActivity( intent )
여기에서도 가능
adb am start -n 【target package name】/.【target activity name】
그러면 일반적으로 활동이 일어납니다.
이 activity가, 같은 패키지의 특정의 처리에 의해서만, 불려 가는 것이 전제이거나 하면, 상정하고 있는 처리를 헹구고, 동작할 가능성도 있다.
요약
지식으로서는 여기 보면 쓰고 있다 Android 앱의 보안 설계 및 보안 코딩 가이드
실제로 모든 리뷰에서 확인하는 것은 현실적이지 않으며 누락이 나오므로 도구를 사용하는 것이 현실적입니다.
만드는 앱에 따라 보안 측면에 걸리는 금액은 전혀 다를 것입니다.
Reference
이 문제에 관하여(android:exported의 기본값), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kz_12/items/412f93208e8d17db442e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(android:exported의 기본값), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kz_12/items/412f93208e8d17db442e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)