android:exported
Sử dụng bộ sưu tập để sắp xếp ngăn nắp các trang
Lưu và phân loại nội dung dựa trên lựa chọn ưu tiên của bạn.
Danh mục OWASP: MASVS-PLATFORM: Tương tác với nền tảng
Tổng quan
Thuộc tính android:exported
xác định liệu các thành phần của ứng dụng khác có thể chạy một thành phần (hoạt động, dịch vụ, broadcast receiver, v.v.) hay không:
- Nếu là
true
, mọi ứng dụng đều có thể truy cập vào hoạt động và chạy hoạt động đó theo tên lớp chính xác.
- Nếu là
false
, chỉ các thành phần của cùng một ứng dụng, các ứng dụng có cùng mã nhận dạng người dùng hoặc các thành phần hệ thống đặc quyền mới có thể chạy hoạt động đó.
Logic phía sau giá trị mặc định của thuộc tính này đã thay đổi theo thời gian và khác nhau tuỳ thuộc vào loại thành phần cũng như phiên bản Android. Ví dụ: theo mặc định, trên API cấp 16 (Android 4.1.1) trở xuống, giá trị của các phần tử <provider>
được đặt thành true
. Việc không thiết lập thuộc tính này rõ ràng dẫn đến nguy cơ có các giá trị mặc định khác nhau giữa một số thiết bị.
Tác động
Trường hợp có các giá trị mặc định khác nhau nghĩa là bạn có thể vô tình tiết lộ các thành phần nội bộ của ứng dụng. Sau đây là một số ví dụ về hậu quả:
Các cuộc tấn công từ chối dịch vụ.
Các ứng dụng khác truy cập trái phép vào các thành phần nội bộ để sửa đổi chức năng nội bộ của ứng dụng.
Rò rỉ dữ liệu nhạy cảm.
Quá trình thực thi mã trong ngữ cảnh của ứng dụng dễ bị tấn công.
Giải pháp giảm thiểu
Luôn đặt thuộc tính android:exported
một cách rõ ràng. Vì vậy, bạn không được phép diễn giải và thể hiện rõ ý định của mình về khả năng hiển thị của một thành phần.
Đề xuất cho bạn
Nội dung và mã mẫu trên trang này phải tuân thủ các giấy phép như mô tả trong phần Giấy phép nội dung. Java và OpenJDK là nhãn hiệu hoặc nhãn hiệu đã đăng ký của Oracle và/hoặc đơn vị liên kết của Oracle.
Cập nhật lần gần đây nhất: 2023-12-14 UTC.
[null,null,["Cập nhật lần gần đây nhất: 2023-12-14 UTC."],[],[],null,["# android:exported\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-PLATFORM: Platform Interaction](https://mas.owasp.org/MASVS/09-MASVS-PLATFORM)\n\nOverview\n--------\n\nThe `android:exported` [attribute](/guide/topics/manifest/activity-element#exported) sets whether a component (activity, service, broadcast receiver, etc.) can be launched by components of other applications:\n\n- If `true`, any app can access the activity and launch it by its exact class name.\n- If `false`, only components of the same application, applications with the same user ID, or privileged system components can launch the activity.\n\nThe logic behind the default value of this attribute changed over time and was different depending on the component types and Android versions. For example, on API level 16 (Android 4.1.1) or lower the value for `\u003cprovider\u003e` elements is set to `true` by default. Not setting this attribute explicitly carries the risk of having different default values between some devices.\n\nImpact\n------\n\nThe situation with different default values means you could accidentally expose internal application components. A few examples of the consequences could be the following:\n\nDenial of service attacks.\nOther apps inappropriately accessing internal components to modify your app's internal functionality.\nLeaking of sensitive data.\nCode execution in the context of the vulnerable application.\n\nMitigations\n-----------\n\nAlways explicitly set the `android:exported` attribute. This will leave no room for interpretation and clearly signal your intention with regard to a component's visibility.\n\nRecommended for you\n-------------------\n\n- Note: link text is displayed when JavaScript is off\n- [# Key management {:#key-management}](/topic/security/data)\n- [Run embedded DEX code directly from APK](/topic/security/dex)\n- [Tapjacking](/topic/security/risks/tapjacking)"]]