欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
问题:io.dcloud.PandoraEntry组件可被利用获取存储/相册等资源,如何修复?
回答
根据官方文档《app-sec-android > Activity、Service、Receiver等组件导出风险》的说明,
HBuilderX 3.1.14 及以后版本已经把 DCloud 管理的所有不需要被外部访问的组件统一设置成私有(android:exported="false"),仅把 App 入口 Activity(io.dcloud.PandoraEntry)保留为公有,以满足外部调起需求。
因此,如果仍被扫描出风险,请按以下步骤自查并加固:
-
升级 HBuilderX 到最新正式版(当前 4.87),重新云打包;
官方已默认修复,无需手动改代码。
-
若使用离线 SDK,请检查 AndroidManifest.xml 中是否仍然把 io.dcloud.PandoraEntry 以外的其他 DCloud 组件(如 PandoraEntryActivity)显式声明为 android:exported="true"。
如无外部调用需求,全部改为 false。
-
对于必须导出的组件(如微信 SDK 的 WXEntryActivity、个推 SDK 的若干组件等),保持 exported="true" 即可,但需确保这些组件内部已做好鉴权与参数校验,防止被恶意调用。
-
若仍担心入口 Activity 被恶意透传 Intent 拉起内部组件,可在 PandoraEntry 的 onCreate 中主动丢弃危险参数:
@Override
protected void onCreate(Bundle savedInstanceState) {
// 不直接使用 getIntent(),避免透传
Intent cleanIntent = new Intent();
// 仅保留官方需要的字段
setIntent(cleanIntent);
super.onCreate(savedInstanceState);
}
但官方默认基座已做类似处理,通常无需自行修改。
总结:升级到最新 HBuilderX 并重新打包即可解决报告中提到的“可被利用获取存储/相册等资源”问题;离线打包项目请按上述清单检查 android:exported 配置。