나는 새로운 작업에서 새로운 활동을 시작하기 위해 의도를 사용하고 있습니다. 이 인 텐트는 엑스트라에서 해당 액티비티가 필요로하는 개인 데이터를 가지고 있습니다. 이 데이터는 다른 응용 프로그램에서 읽을 수 없어야합니다. 이 데이터가 실제로 유출되지 않았는지 조사했습니다. 우리는 getRecentTasks()에서 RecentTaskInfo를 사용함으로써 GET_TASK 권한을 가진 임의의 응용 프로그램에서이 여분의 데이터를 읽을 수 있다는 것을 알았습니다. 이것은 안전하지 않습니다. 누출이 발견되면 검색을 중단했습니다. 이 데이터가 누출되는 다른 방법이 있습니까? 그리고 여분의 데이터를 다른 응용 프로그램에서 읽을 수 없도록하려면 어떻게해야합니까?Android 인 텐트에서 여분의 데이터 보호
답변
이 의도는 엑스트라
왜
에서 그 활동에 필요한 일부 개인 데이터를 전달? 엑스트라의 개인 데이터에 식별자를 전달합니다. 식별자를 개인 데이터 (예 : 데이터베이스 쿼리)로 해석하는 작업은 해당 활동에서만 수행 할 수 있습니다.우리는) (getRecentTasks에서 RecentTaskInfo를 사용하여이 추가 데이터가
예, blogged about this 거의 2 년 전 GET_TASK 권한이 임의의 응용 프로그램에서 읽을 수 있음을 발견하고, 다른 사람은 아마 한 그것 앞에.
더 많은 데이터 유출이 있습니까?
다른 구성 요소를 시작하라는 모든 요청은 OS 프로세스를 거치므로 OS에 항상 유출됩니다.
Intent
의 작업 내용에 따라 다른 방법으로 누출 될 수 있습니다 (예 : Intent
그 자체를 Parcelable
으로 다른 앱에 전달).
그리고 여분의 데이터를 다른 응용 프로그램에서 읽을 수 없도록하려면 어떻게해야합니까?
수 없습니다. 다시 말하지만, 개인 데이터를 활동 엑스트라에 넣지 말고 대신 개인 데이터를 가져 오는 데 사용할 수있는 식별자를 사용하십시오.
개인 저장 공간은 응용 프로그램에서만 읽을 수 있습니다. 루트가 아닌 기기에서는 앱에 저장 한 정보에만 액세스 할 수 있습니다.
SharedPreference을 사용하여 데이터를 저장할 수 있습니다. 데이터는 앱의 지정된 개인 저장소에 저장됩니다.
또는이 같은이 와이어 임의의 파일을 직접 개인 저장소를 사용할 수 있습니다 : 안드로이드에서 시작
FileOutputStream fos;
try {
fos = openFileOutput (FILENAME, Context.MODE_PRIVATE);
fos.write (string.getBytes());
fos.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
은 추가 권한의 여분을 사용하여 타사 앱 읽고있는 것 지키기 위해 추가 된 4.1.1 RecentTaskInfo
. 이 허가 (android.Manifest.permission.GET_DETAILED_TASKS
)는 시스템에서만 수집 할 수 있습니다. 이 허가가 없으면 baseIntent
이 RecentTaskInfo
을 통해 반환되기 전에 여분이 스왑 아웃됩니다.http://androidxref.com/4.2.2_r1/history/frameworks/base/services/java/com/android/server/am/ActivityManagerService.java#8238e717df4bc5eebf15f97172d68af3599a95bb 커밋의 코멘트에서
:
작업의 세부 사항을 얻을 수있는 새로운 서명 수준의 권한을 추가합니다.
타사 앱은 개인 데이터가 누출되지 않도록 작업과 관련된 인 텐트 의 추가 기능에 액세스 할 수 없습니다.
는 변경 ID :
I95af9e181ac42557bc8b981807e7ddd266a88d0e
는 그래서 그 노력이 민감한 정보를 전송하는 의도 여분의 안전 만들기에 투입되고있는 것으로 보인다. 나는이 여분이 누설 될 수있는 다른 방법이 있는지 모르지만 적어도 여분의 것은 JB에서 위로 OK 보인다.글쎄, 그건 확실히 멋지다. 나는 이것을 더 깊이 조사해야 할 것이다. 감사! – CommonsWare
- 1. android 타사 앱의 인 텐트에서 여분의 param 값을 스니핑하는 방법
- 2. Android : 인 텐트에서 UsbDevice 받기
- 3. 인 텐트에서 여분의 char [] 데이터를 가져 오는 것은 null을 반환합니다.
- 4. Android : 인 텐트에서 앱 이름 가져 오기
- 5. Android NFC 인 텐트에서 URI 가져 오기
- 6. Android : 인 텐트에서 데이터를 가져올 수 없습니다.
- 7. Android : 인 텐트에서 번들을 얻는 방법?
- 8. Android 인 텐트에서 가져올 CSV 선택
- 9. 하나의 인 텐트에서 다른 인 텐트로 안드로이드의 데이터 전달
- 10. 오디오 인 텐트에서 onActivityResult 받기
- 11. 인 텐트에서 타사 앱 열기
- 12. 다른 인 텐트에서 정보를 얻는 방법?
- 13. Android 인 텐트에서 "QuickContact"를 표시하는 방법은 무엇입니까?
- 14. Android - 활성화 된 인 텐트에서 돌아와 비동기 호출을 중지하는 방법?
- 15. 액티비티에서 인 텐트로 여분의 데이터 전달하기
- 16. android release, 데이터 리소스 보호
- 17. 다른 인 텐트에서 이미지 가져 오기
- 18. 인 텐트에서 활동 속성을 업데이트하는 방법은 무엇입니까?
- 19. 인 텐트에서 새로운 행 아웃 다이얼러 시작
- 20. BroadcastReceiver가 외부 인 텐트에서 반응하지 않습니다.
- 21. 인 텐트에서 appwidget 구성 활동을 시작하는 방법
- 22. 다른 인 텐트에서 배열 목록에 항목 추가
- 23. 새로운 인 텐트에서 AsyncTask 실행을 모니터링 하시겠습니까?
- 24. 다른 서비스의 인 텐트에서 서비스를 시작하면 런타임 오류가 발생합니다.
- 25. 인 텐트에서 링크드 인으로 공유 할 클래스 이름
- 26. 잡힌 DownloadManager 인 텐트에서 파일 경로 가져 오기
- 27. 인 텐트에서 데이터를 추출 할 수 없습니다. - Firebase 푸시 알림
- 28. 너비가 100 % 인 여분의 픽셀
- 29. intent-filter에서 여분의 null 인 인 텐트를받지 않도록 지정하는 방법
- 30. Android 블랙 마트 보호
귀하의 솔루션을 사용할 수 있으며 (그렇지만 "모든"API 레벨에 적용 할 수 있음) 동의하지만, 최신 Android 버전이 블로그에 설명 된 문제를 실제로 수정 한 것으로 보입니다. 내 대답에 링크 된 커밋을 확인하십시오 .. – baske
OS가 내 데이터를 읽을 수 있다는 것을 받아 들일 수 있습니다. 문제는 비 OS 응용 프로그램에 있습니다. 솔루션을 올바르게 해석하면 ContentProvider를 설정해야합니다. 그러면 보안 문제가 다른 위치로 옮겨집니다 : 의도 한 활동이 액세스 할 때 쿼리에서 응답 만 반환하도록하는 방법? 여러 응용 프로그램에서 보안 정보를 전송해야하지만 다른 사용자에게 정보를 볼 수 없으면 사용 가능한 솔루션으로 사용 권한이 표시되지 않습니다. – user2186703
@ user2186703 : "솔루션을 올바르게 해석하면 ContentProvider를 설정해야합니다."- 아니요. 데이터베이스 테이블의 기본 키와 같은 식별자를 갖는 데이터의 개념은 수십 년 전부터있었습니다. 안드로이드는 수십 년 동안 존재하지 않았기 때문에, ContentProvider와 같은 안드로이드 특정 구조를 사용하지 않고 식별자를 사용하여 데이터를 찾는 방법이있었습니다. 따라서 "식별자"란 데이터베이스 테이블의 키 또는 HashMap의 키 또는 CSV 테이블의 행 번호 또는 JSON 객체의 키 등을 의미합니다. – CommonsWare