Flutter安全检测插件flutter_security_checker的使用

发布于 1周前 作者 songsunli 来自 Flutter

Flutter安全检测插件flutter_security_checker的使用

此插件提供了在Android和iOS平台上验证root权限、设备完整性以及安装来源的功能。

pub package

功能特性

  • 可以检查设备是否被root或越狱。
  • 可以检查应用所安装的设备是否为实体设备。
  • 可以检查应用是否通过正确的内容服务(如Google Play或Apple Store)安装。

支持版本

  • Flutter: 3.3.0+
  • Dart: 2.18.0+
  • Android: 5.0+ (minSdkVersion: 21)
  • iOS: 12.0+

入门指南

要使用此插件,请将flutter_security_checker作为依赖项添加到您的pubspec.yaml文件中。例如:

dependencies:
  flutter_security_checker: ^3.2.1

使用方法

下面是一个完整的示例代码,展示了如何使用flutter_security_checker插件进行安全检测,并将结果展示给用户。

示例代码

import 'package:flutter/material.dart';
import 'package:flutter/foundation.dart' show kReleaseMode;
import 'package:flutter_security_checker/flutter_security_checker.dart';

void main() => runApp(ExampleApp());

class ExampleApp extends StatefulWidget {
  @override
  _ExampleAppState createState() => _ExampleAppState();
}

class _ExampleAppState extends State<ExampleApp> {
  bool _isChecking = false;

  bool? _isRooted;
  bool? _isRealDevice;
  bool? _hasCorrectlyInstalled;

  void _onCheckButtonPressed() async {
    if (!kReleaseMode) {
      // 在非发布模式下不执行安全检查,避免误报
      return;
    }
    setState(() => _isChecking = true);

    try {
      _isRooted = await FlutterSecurityChecker.isRooted;
      _isRealDevice = await FlutterSecurityChecker.isRealDevice;
      _hasCorrectlyInstalled = await FlutterSecurityChecker.hasCorrectlyInstalled;
    } catch (e) {
      // Handle any errors here
      print("Error during security check: $e");
    }

    setState(() => _isChecking = false);
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Flutter Security Checker'),
          centerTitle: true,
        ),
        body: _buildContentView(),
      ),
    );
  }

  Widget _buildContentView() {
    return Column(
      crossAxisAlignment: CrossAxisAlignment.stretch,
      children: [
        Expanded(child: _buildResultTable()),
        _buildCheckButton(),
      ],
    );
  }

  Widget _buildResultTable() {
    final cellsBuilder = (String method, bool? result, [bool reverse = false]) {
      final resultStyle = (result != null)
          ? TextStyle(
              color: result
                  ? reverse
                      ? Colors.red
                      : Colors.blue
                  : reverse
                      ? Colors.blue
                      : Colors.red,
            )
          : TextStyle();

      return [
        DataCell(Text(method)),
        DataCell(Text(result.toString(), style: resultStyle))
      ];
    };

    return DataTable(
      columns: [
        DataColumn(label: Text('method')),
        DataColumn(label: Text('result'))
      ],
      rows: [
        DataRow(cells: cellsBuilder('isRooted', _isRooted, true)),
        DataRow(cells: cellsBuilder('isRealDevice', _isRealDevice)),
        DataRow(cells: cellsBuilder('hasCorrectlyInstalled', _hasCorrectlyInstalled)),
      ],
    );
  }

  Widget _buildCheckButton() {
    final buttonChild = _isChecking
        ? SizedBox.square(
            dimension: 15.0,
            child: const CircularProgressIndicator(
              strokeWidth: 2.0,
              valueColor: AlwaysStoppedAnimation<Color>(Colors.white),
            ),
          )
        : Text('CHECK');

    return SizedBox(
      height: 58.0,
      child: ElevatedButton(
        child: buttonChild,
        onPressed: _onCheckButtonPressed,
      ),
    );
  }
}

注意事项

  • 开发环境下的限制isRootedhasCorrectlyInstalled 函数可能在开发环境中无法正常工作。建议在发布模式下测试这些功能。
  • 模拟器行为:在Android模拟器或iOS模拟器上,isRooted 总是返回 true
  • 调试模式:在调试模式下,hasCorrectlyInstalled 总是返回 false

如果您在使用插件时遇到任何问题,可以访问GitHub Issues页面注册问题,或者联系开发者邮箱:hwj930513@naver.com

希望这个插件能帮助您更好地保护您的Flutter应用程序!


更多关于Flutter安全检测插件flutter_security_checker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter安全检测插件flutter_security_checker的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用flutter_security_checker插件来进行安全检测的示例代码。这个插件可以帮助你检测应用中的潜在安全问题,比如不安全的网络请求、不安全的存储等。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加flutter_security_checker依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_security_checker: ^latest_version  # 请替换为最新的版本号

然后运行flutter pub get来安装依赖。

2. 导入插件

在你的Dart文件中导入flutter_security_checker插件:

import 'package:flutter_security_checker/flutter_security_checker.dart';

3. 初始化并运行安全检测

你可以在应用启动时或者在你认为合适的地方初始化并运行安全检测。以下是一个简单的示例,展示了如何在main.dart文件中进行安全检测:

import 'package:flutter/material.dart';
import 'package:flutter_security_checker/flutter_security_checker.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Security Checker Example'),
        ),
        body: FutureBuilder<List<SecurityIssue>>(
          future: checkSecurity(),
          builder: (context, snapshot) {
            if (snapshot.connectionState == ConnectionState.waiting) {
              return Center(child: CircularProgressIndicator());
            } else if (snapshot.hasError) {
              return Center(child: Text('Error: ${snapshot.error}'));
            } else {
              final issues = snapshot.data ?? [];
              return ListView.builder(
                itemCount: issues.length,
                itemBuilder: (context, index) {
                  final issue = issues[index];
                  return ListTile(
                    title: Text('Issue: ${issue.description}'),
                    subtitle: Text('Severity: ${issue.severity}'),
                  );
                },
              );
            }
          },
        ),
      ),
    );
  }

  Future<List<SecurityIssue>> checkSecurity() async {
    try {
      final checker = FlutterSecurityChecker();
      final issues = await checker.check();
      return issues;
    } catch (e) {
      throw e;
    }
  }
}

4. 解释代码

  • 依赖导入:在pubspec.yaml中添加依赖并运行flutter pub get
  • 插件导入:在Dart文件中导入flutter_security_checker
  • 安全检测:在main.dart中创建一个FutureBuilder,它在未来完成时(即安全检测完成后)构建UI。checkSecurity函数初始化FlutterSecurityChecker实例并调用check方法进行安全检测。
  • UI展示:如果检测正在进行中,显示一个加载指示器;如果检测出错,显示错误信息;如果检测完成,显示检测到的安全问题列表。

注意事项

  • 请确保你使用的flutter_security_checker版本与Flutter SDK兼容。
  • 根据flutter_security_checker的文档和API,可能有一些额外的配置或自定义选项,你可以根据需要进行调整。
  • 安全检测只是工具的一部分,确保应用安全还需要结合其他安全措施,比如代码审计、安全编码实践等。

希望这个示例能帮助你在Flutter项目中使用flutter_security_checker插件进行安全检测。

回到顶部