保护你的 Flutter 应用程序
原文 https://medium.com/flutter-community/securing-your-flutter-applications-77c2bf3ff25e
如果本文对你有帮助,请转发让更多的朋友阅读。
如果您不知道需要更改哪些内容以及这些内容如何影响整个构建,那么保护 Flutter 应用程序可能是一项任务,但在生产应用程序时,这是唯一最重要的事情。
保护 Flutter 应用程序的安全应该是每个开发人员都必须认真对待的事情,因为这直接影响到应用程序的最终用户。他们的数据和通过 Internet 发生在您的应用程序之间的所有通信都可能受到各种攻击,意识到这些风险并采取措施防范这些风险应该是每个开发人员的责任。
Flutter + Security = ❤
这里需要注意的一点是,我在本文中提到的所有内容都取决于您的应用程序是否需要它。您必须决定这对您的应用程序是否至关重要。
首先,让我们从一些基本的列表项目开始,然后转向更加技术性的列表项目。
使用受信任的软件包,总体上使用较少的软件包(如果可能的话)
大多数应用程序的功能或 UI 组件将依赖于外部包,确保所使用的包由受信任的开发人员开发、维护良好并被相当多的人使用非常重要。这样做的原因是,在出现问题的情况下,由于使用它的人数较多,所以它被提前发现。Dev 得分和受欢迎程度应该是一个很好的起点。
始终通过 HTTPS 进行通信
如果您的应用程序与外部 API 和服务通信,请确保应用程序与远程服务器之间的通信是通过 HTTPS 进行的,以便数据在传输过程中被加密,并且在传输过程中没有外部黑客可以轻易访问数据。几乎所有在互联网上的东西都已经迁移到使用 HTTPS,所以这真的不应该再是一个选项,而是一种默认的做事方式。
HTTP vs HTTPS
正确的错误处理和消息传递
有可能抛出异常的函数应该总是放在 try-catch 块中,这样就不会给用户带来不可预见的应用程序崩溃。除此之外,向用户显示有用的错误信息也是一个很好的做法,但是始终不要显示错误的确切细节,因为这些信息可能/可以很容易地用来找到漏洞。
import 'package:flutter/material.dart';
Future<dynamic> functionThatThrowsException() async {
// some code
throw Exception('Could not perform operation.');
}
Future<void> testFunction() async {
try {
var x = await functionThatThrowsException();
// do something with x
} catch (e) {
debugPrint(e.toString());
}
}
Try Catch with Flutter
当 Flutter 应用程序生产发布,如果发生错误,灰色屏幕显示给用户,这可以从用户的观点令人沮丧。因此,显示一个有用的错误小部件/屏幕可能是简化用户体验的好方法。
return MaterialApp(
title: 'Flutter App',
builder: (context, widget) {
ErrorWidget.builder = (FlutterErrorDetails errorDetails) {
return CustomErrorWidget(errorDetails: errorDetails);
};
return widget ?? const Scaffold();
},
...
...
class CustomErrorWidget extends StatelessWidget {
final FlutterErrorDetails errorDetails;
const CustomErrorWidget({
Key? key,
required this.errorDetails,
}) : super(key: key);
@override
Widget build(BuildContext context) {
return const Card(
color: Colors.red,
margin: EdgeInsets.zero,
child: Padding(
padding: EdgeInsets.all(8.0),
child: Text(
"Something is not right here...",
style: TextStyle(
color: Colors.white,
fontWeight: FontWeight.bold,
),
),
),
);
}
}
Displaying a Custom Error Widget