[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8MHXw7Fr-1636071244204)(https://ducafecat.tech/2021/11/04/translation/securing-flutter-apps/2021-11-02-21-21-20.png)]

原文

https://medium.com/@mohammadEzzo/securing-flutter-apps-3cd1aedda088

参考

  • https://www.guardsquare.com/en/blog/iOS-SSL-certificate-pinning-bypassing
  • https://www.freecodecamp.org/news/openssl-command-cheatsheet-b441be1e8c4a/
  • https://www.freecodecamp.org/news/what-is-tls-transport-layer-security-encryption-explained-in-plain-english/

正文

目前,大多数应用程序都包含支付或存储一些重要的个人数据,这增加了数据被攻击者利用或暴露的风险。

在这篇文章中,我将谈论最有效的做法,以尽量减少 Flutter 应用程序中任何安全漏洞的风险,并设置尽可能多的路障,以任何攻击者的方式。当然,这并不能保证你的应用程序是 100% 安全的。

让我们开始

保护通信层

https://www.guardsquare.com/en/blog/ios-ssl-certificate-pinning-bypassing

当攻击者锁定一个应用程序时,首先要做的事情之一就是查看他们是否 能拦截在应用程序和服务器后端之间传递的任何数据

1- 采用高度加密:

您可以通过使用 SSL 和 TLS 等协议来实现这一点,这些协议很容易添加到您的代码中,并且很难妥协。

如果您正在处理特别敏感的数据,您甚至可能需要更进一步,在应用程序中构建一个类似 vpn 的解决方案。

2- 限制网络流量

将网络流量或连接限制到不安全端点的一种方法是显式地将域名列为白名单。

要做到这一点,在 flutter 应用程序,我们需要为每个平台做一些步骤:

android :

go to the android folder and create this file under

进入 android 文件夹,创建下面的文件

res/xml/network_security_config.xml

然后复制这个并将其添加到创建的 xml 文件中:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config><domain-config><domain includeSubdomains="true">YOURDOMAIN.com</domain><trust-anchors><certificates src="@raw/YOURCERTIFICATE"/></trust-anchors></domain-config>
</network-security-config>

for ios:

add this to the info.plist file:

把这个添加到 info.plist 文件:

<key>NSAppTransportSecurity</key>
<dict><key>NSAllowsArbitraryLoads</key><false/><key>NSExceptionDomains</key><dict><key>YOURDOMAIN.com</key><dict><key>NSIncludesSubdomains</key><true/><key>NSExceptionAllowsInsecureHTTPLoads</key><true/></dict></dict>
</dict>

然后用你的服务器域名替换 YOURDOMAIN.com

这样做将确保您的应用程序不被允许与任何其他域通信。

3- 认可证书

SSL pinning 解决了 MITM (Man In The Middle)攻击。

怎么做到的?

在简单的语言中,您将从后端开发人员获得一个服务器证书文件,并将证书钉在每个 API 调用中。因此,HTTP 客户端将把这个证书作为一个可信赖的证书。现在,如果出现了 MITM,并且应用程序得到了一些错误的证书,那么由于握手错误,API 调用将被中断。

所以让我们实现这个 Flutter :

最有可能的证书延长将是。“.cef” 但是这个扩展在 flutter 中不可读,所以我们需要将其转换为 “.pem” 使用这个命令。

_openssl x509 -inform der -in_ Certificate_.cer -out_ Certificate_.pem_

证书是您可以自己使用的文件名。

然后将证书作为资产添加到 pubspec.yaml

现在使用 Dio 包,我们可以管理应用程序中的所有请求:

final dio = Dio(); ByteData bytes = await rootBundle.load('assets/Certificate.pem');
(dio.httpClientAdapter as DefaultHttpClientAdapter).onHttpClientCreate  = (client) {SecurityContext sc = SecurityContext();sc.setTrustedCertificatesBytes(bytes.buffer.asUint8List());HttpClient httpClient = HttpClient(context: sc);return httpClient;
};

在这段代码中,我们从资产中读取证书,并将其作为可信证书添加到 dio 实例的 http 客户端。

现在,当使用这个 dio 实例向另一个服务器发出任何请求时,由于服务器的证书无效,我们将得到一个握手错误。

4-使身份认证刀枪不入

除了你的应用程序的数据流,下一个最常见的攻击载体是它的认证方法的任何弱点。

因此,与服务器进行双因素身份验证是必要的,也是值得实现的。

除此之外,你还需要注意如何处理像钥匙交换这样的事情。至少,您应该使用加密来保证这些事务的安全。

  • 到目前为止,我们已经尽力保护与服务器的传输层。

现在我们开始保护应用本身。

保护申请

基本了解 Android app. Source — Pranay Airan.

1- 模糊编码

编译后的二进制文件和应用程序的代码可以被逆向设计。可以公开的内容包括字符串、方法和类名以及 API 键。这些数据要么是原始形式,要么是纯文本形式。

  • 你可以做的是使用 --obfuscate 参数时,建立您的 apk。
flutter build appbundle --obfuscate --split-debug-info=/<directory>

从本土的角度来说,你需要通过以下方式来处理这个问题:

android

/android/app/build.gradle 文件中,添加以下内容:

android {...buildTypes {release {signingConfig signingConfigs.releaseminifyEnabled trueuseProguard trueproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}
}

/android/app/proguard-rules.pro 中创建一个 ProGuard 配置文件:

# Flutter
-keep class io.flutter.app. { *; }
-keep class io.flutter.plugin.  { *; }
-keep class io.flutter.util.  { *; }
-keep class io.flutter.view.  { *; }
-keep class io.flutter.  { *; }
-keep class io.flutter.plugins.  { *; }

使用 ProGuard,它不仅可以模糊你的代码,还可以帮助你缩小 Android 应用程序的大小。

iOS

如果你使用 Objective-C 或 Swift 来编译 iOS,编译器会去掉这些符号并对你的代码进行优化,这就使得攻击者很难读取你的代码的编译输出。

还有一些付费工具可以帮助你模糊代码: iXGuard 和 Vermatrix.

2- 越狱和植根设备

越狱的 iOS 和安卓设备有更多的特权,可能会给用户的设备带来恶意软件,从而绕过设备的正常运行。

flutter_jailbreak_detection 是一个软件包,它可以帮助你检测你的应用是否正在一个越狱或根植的设备上运行,

它在 Android 上使用 RootBeer on Android, and DTTJailbreakDetection ,在 iOS 上使用 DTTJailbreakDetection 。

而且很容易使用:

import 'package:flutter_jailbreak_detection/flutter_jailbreak_detection.dart';bool jailbroken = await FlutterJailbreakDetection.jailbroken;
bool developerMode = await FlutterJailbreakDetection.developerMode; _// android only._

https://pub.dev/packages/flutter_jailbreak_detection

3-保护用户资料

为了存储敏感的用户数据,你不应该使用共享首选项或 sqflite,因为它很容易在任何设备上打开,因为你需要对存储的数据进行加密,你可以使用 flutter_secure_storage

https://pub.dev/packages/flutter_secure_storage

这个软件包使用了 Android 的 Keystore 和 iOS 的 Keychains。

还值得设置一个周期性时间,以便自动清除过期的数据缓存。

4. 使用本地身份验证

假设用户手机被盗,并且您的应用程序已经安装在手机上,并且它有一些支付信息:)

为了防止任何访问您的应用程序,您应该使用生物特征识别认证使用此软件包。

https://pub.dev/packages/local_auth

5- 背景快拍预防

当一个应用程序被背景化时,操作系统会获取任务切换器中最后一个可见状态的快照。因此,防止后台快照捕捉到账户余额和付款细节是非常需要的。

用这个 secure_application 包就能解决这个问题

https://pub.dev/packages/secure_application

他的插件允许你保护你的应用程序内容不被点击查看。

总结

最终,作为一个开发人员,这就是所有人对你的要求。

我还想提到“如何保护您的 Flutter 应用程序?” 是移动应用程序开发者在求职面试中最常见的问题,所以我希望这将是有用的。


© 猫哥

  • https://ducafecat.tech/

  • https://github.com/ducafecat

  • 微信群 ducafecat

  • b 站 https://space.bilibili.com/404904528

Flutter 保护你的APP数据安全相关推荐

  1. 开户功能遭入侵攻击,银行 App 数据安全如何保护?

    2019 年 10 月,00 后田某因非法获取计算机信息系统数据罪判处有期徒刑三年,并处罚金人民币一万元.当事人田某只有初中文化,但却拥有极强的计算机天赋,在 2019 年 1 月 5 日到 1 月 ...

  2. Flutter中实现整个App变为灰色

    前言 为了让更多的人永远记住12月13日,各大厂都在这一天将应用变灰了. 那么接下来我们看一下Flutter是如何实现的. Flutter中实现整个App变为灰色 在Flutter中实现整个App变为 ...

  3. 云时代企业如何保护共享文档数据安全?

    本文讲的是云时代企业如何保护共享文档数据安全,越来越多的用户开始涌向云计算文件共享服务(例如Dropbox.Google Drive和iCloud),因为它们易于使用,并允许从任何地方访问数据.简言之 ...

  4. flutter开发的某app逆向

    参考文章: 对flutter开发的某app逆向分析 [原创]一种基于frida和drony的针对flutter抓包的方法 包名:dGVjaC5lY2hvaW5nLmt1cmls 版本:3.2.1 解压 ...

  5. 对flutter开发的某app安全分析

    声明 以下只是搬运下我公众号的东西.很早就发过了.原帖地址: 对flutter开发的某app分析 前言 最近总感觉时间不够用,很多东西都堆着,答应给朋友看的某app,也没来得及看.所以也就一直没有空发 ...

  6. 使用Flutter撸一个视频播放APP(有福利哦~)

    使用Flutter撸一个视频播放APP(有福利哦~) 基于苹果CMS8.0的资源站收集视频播放APP. 视频资源来源:从网上的各大资源收集站中获取视频资源,他们大都支持苹果CMS8.0的接口方法获取. ...

  7. 谁来保护商务人士的数据安全?

    谁来保护商务人士的数据安全? 文/阿祥       提到笔记本电脑的数据安全,自然就会想到企业的商业机密.       毫不夸张地说,商业机密关系到一个企业的生死存亡,一旦泄漏就会给竞争对手提供可乘之 ...

  8. 保护个人隐私和数据安全的方法与策略

    引言 随着信息技术的普及和发展,我们享受到了便捷的互联网服务,但与此同时,个人隐私和数据安全问题也日益受到威胁.在这个所谓的"裸奔"时代,网络攻击.数据泄露和隐私侵犯已经成为常态. ...

  9. 浅识Flutter Android studio 设置APP启动页

    Flutter Android studio 设置APP名启动页 Android设置APP启动页 ios设置APP启动页 APP的应用一打开,启动应用程序后,进入主功能界面前会有一张图片或一段动画效果 ...

最新文章

  1. 第九代小冰惊喜登场,多端融合且琴棋书画样样精通
  2. POJ - 1094 Sorting It All Out(拓扑排序)
  3. python os模块的学习
  4. 解决stamp mismatch with graph file
  5. 假笨说-从一起GC血案谈到反射原理
  6. linux 固定usb设备,linux下多个usb设备固定名称方法
  7. 处理 read_csv 报错 OSError:Initializing from file failed
  8. CentOS忘记普通用户密码解决办法
  9. HttpClient中异步方法的同步调用
  10. DosBox装Windows98
  11. java 调用科大讯飞 实现会议录音,语音转写会议既要功能
  12. Hexo博客美化之蝴蝶(butterfly)主题魔改
  13. 用只读打开服务器上的文档,打开WebDAV文档在MS Office中以IT只读方式打开WebDAV服务器...
  14. 国产存储芯片,emmc,性能强
  15. 用友U8 cloud再升级,为成长型集团注入数智新力量
  16. 教你用html和css仿制小米官网页面!
  17. 如何学习一项新的IT技术
  18. iPad 使用感想 - 初体验
  19. MindMaster------游乐项目
  20. 同源基因鉴定 | OrthoFinder 2.0 + MAFFT + IQtree

热门文章

  1. win10启动个性化文字提示
  2. ac1900修改代理服务器,AC1900路由器怎么设置? | 192路由网
  3. Multi-way PCA——多维主成分分析
  4. 最新UI仿水滴筹系统源码+全开源Uniapp开发的
  5. 中级计算机知识点,计算机操作员中级基础知识教程解析.doc
  6. Pytorch 之修改Tensor部分值
  7. YUV是究竟什么意思
  8. 最接地气的详解CountDownLatch闭锁应用与实现机制
  9. 将STemWin526_CM3_Keil.lib更换成STemWin V5.44版本
  10. 企业网络营销信息源类别及传递渠道调查