Flutter 保护你的APP数据安全

image

原文

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

参考

正文

image

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

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

让我们开始

保护通信层

image

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

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

1- 采用高度加密:

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

如果您正在处理特别敏感的数据,您甚至可能需要更进一步,在应用程序中构建一个类似 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-使身份认证刀枪不入

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

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

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

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

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

保护申请

image

基本了解 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.release
            minifyEnabled true
            useProguard true
            proguardFiles 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,编译器会去掉这些符号并对你的代码进行优化,这就使得攻击者很难读取你的代码的编译输出。

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

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 应用程序?” 是移动应用程序开发者在求职面试中最常见的问题,所以我希望这将是有用的。


© 猫哥

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,546评论 6 507
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,224评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,911评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,737评论 1 294
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,753评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,598评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,338评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,249评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,696评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,888评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,013评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,731评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,348评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,929评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,048评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,203评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,960评论 2 355

推荐阅读更多精彩内容