如何保护我的FlutterMobile应用程序?(Flutter App渗透测试结果)



哪里可以获得Flutter应用程序的安全文档或最佳实践我几乎准备好发布我的应用程序了。我在线使用(免费版(https://www.ostorlab.co/report/并检查我的应用程序的安全性。

我上面有一个主要问题,下面还有一些问题。

  • 如何禁用调试模式
  • 如何禁用备份模式
  • 如何防止我的谷歌地图api密钥在AndroidManifest或类似的

这些是我面临的安全问题。------------------------------------------------------------------

已启用高调试模式描述

该应用程序是使用调试模式编译的,允许攻击者附加调试器以访问敏感数据或执行恶意操作。攻击者可以在不访问源代码的情况下调试应用程序,并利用它代表用户执行恶意操作、修改应用程序行为或访问凭据和会话cookie等敏感数据。

推荐

通过在application标记中将属性android:debuggeable设置为false来禁用调试模式。

参考文献•DRD10-J不要重新绑定可调试的应用程序(CERT安全编码(

例如:AndroidManifest:

<activity android:name="com.apptreesoftware.mapview.MapActivity" android:theme="@7F0C0102"> </activity>
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value=“****************************”></meta-data>
<meta-data android:name="com.google.android.gms.version" android:value="@7F080004"></meta-data>

--------------------------------------------------------

可能启用备份模式描述

Android默认情况下执行应用程序的完整备份,包括存储在/data分区上的私人文件。Backup Manager服务将这些数据上传到用户的Google Drive帐户。

推荐

如果应用程序包含不想还原的敏感数据,可以通过在application标记中将属性android:allowBackup设置为false来禁用备份模式。

参考文献•随机集结M开发者预览版:丑陋(第二部分(•图22。不缓存敏感信息

--------------------------------------------------------

在没有权限的情况下声明的潜在服务描述

服务是一个应用程序组件,它可以处理要在后台执行的操作,而无需用户交互。服务还可以用于向其他应用程序公开功能。这对应于对Context.bindService((的调用,以建立与服务的连接并与其交互。未受保护的服务可以由其他应用程序调用,并可能访问敏感信息或执行特权操作

推荐

服务可以向外部组件公开几种方法。可以使用checkPermission方法为每个方法定义任意权限。还可以通过强制清单标签中的权限来分离服务并限制访问。

<permission android:name="co.ostorlab.custom_permission" android:label="custom_permission" android:protectionLevel="dangerous"></permission>
<service android:name="co.ostorlab.custom_service" android:permission="co.ostorlab.custom_permission">
<intent-filter>
<action android:name="co.ostorlab.ACTION" />
</intent-filter>
</service>

该服务可以通过在执行个别IPC调用的实现之前调用checkCallingPermission方法来强制执行该调用的权限。

参考文献•CWE-280:权限或特权不足的不当处理•通过不受信任的输入做出安全决策(OWASP Mobile Top 10(•服务(Android开发人员文档(

技术细节假阳性AndroidManifest.xml:中的服务定义

<service android:name="com.mobile.niyazibank.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT">
</action>
</intent-filter>
</service>
<service android:name="com.mobile.niyazibank.MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT">
</action>
</intent-filter>
</service>
<service android:name="io.flutter.plugins.firebasemessaging.FlutterFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT">
</action>
</intent-filter>
</service>
<service android:name="io.flutter.plugins.firebasemessaging.FlutterFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT">
</action>
</intent-filter>
</service>
<service android:exported="true" android:name="com.google.firebase.messaging.FirebaseMessagingService">
<intent-filter android:priority="-500">
<action android:name="com.google.firebase.MESSAGING_EVENT">
</action>
</intent-filter>
</service>
<service android:exported="true" android:name="com.google.firebase.iid.FirebaseInstanceIdService">
<intent-filter android:priority="-500">
<action android:name="com.google.firebase.INSTANCE_ID_EVENT">
</action>
</intent-filter>
</service>

----------------------------------------

重要导出活动、服务和广播接收者列表描述

应用程序中所有导出组件的列表。导出的组件可供外部应用程序访问,并为应用程序提供入口点。

推荐

本条目仅供参考,没有适用的建议。

参考文献•内容提供商(Android开发人员文档(•活动(Android开发人员文档(•广播接收器(Android开发人员文档(•服务(Android开发人员文档(

您是否上传了release版本或apk的调试版本来检查安全性?

flutter build --release将生成发布版本apk

此外,请在此处阅读更多信息:https://flutter.dev/docs/deployment/android

Ya sure flutter build--release命令将为您的应用程序生成一个发布版本,如果您只想在测试时从应用程序中删除调试标志,那么在MaterialApp上,将debugShowCheckedModeBanner设置为false。

MaterialApp(debugShowCheckedModeBanner:false)调试标志也将在发布版本中自动删除。

最新更新