Flutter应用安全防护插件perimeterx_flutter_plugin的使用

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

Flutter应用安全防护插件perimeterx_flutter_plugin的使用

perimeterx_flutter_plugin 是一个用于在Flutter应用中集成PerimeterX安全防护功能的插件。PerimeterX可以帮助开发者保护应用免受机器人攻击、欺诈行为和其他恶意活动的影响。以下是关于如何使用该插件的详细说明,包括完整的示例代码和配置步骤。

支持平台

平台 版本要求
Android SDK 21+
iOS 12.0+

示例代码

以下是一个完整的Flutter应用示例,展示了如何使用perimeterx_flutter_plugin来获取PerimeterX头部信息并处理挑战请求。

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:http/http.dart' as http;
import 'package:perimeterx_flutter_plugin/perimeterx_flutter_plugin.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  @override
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  // 用于存储从PerimeterX获取的头部信息
  Map<String, String>? _pxHeaders;

  // 用于存储挑战结果
  PerimeterxResult? _challengeResult;

  // 创建PerimeterXFlutter实例
  final _perimeterxFlutterPlugin = PerimeterXFlutter();

  // 获取PerimeterX头部信息
  Future<void> getHeaders() async {
    try {
      // 调用插件方法获取头部信息
      _pxHeaders = await _perimeterxFlutterPlugin.getHeaders();
    } on Exception {
      // 捕获异常,设置头部信息为null
      _pxHeaders = null;
    }

    // 更新UI
    setState(() {});
  }

  // 发起挑战请求
  Future<void> getChallenge() async {
    try {
      // 获取PerimeterX头部信息
      final pxHeaders = await _perimeterxFlutterPlugin.getHeaders();

      // 构建请求URL
      final url = Uri.https('sample-ios.pxchk.net', '/login');

      // 发送GET请求,并传递PerimeterX头部信息
      final response = await http.get(url, headers: pxHeaders);

      // 如果服务器返回403状态码,表示需要处理挑战
      if (response.statusCode == 403) {
        // 处理挑战响应
        _challengeResult = await _perimeterxFlutterPlugin.handleResponse(
            response: response.body, url: url.toString());

        // 根据挑战结果采取不同操作
        switch (_challengeResult!) {
          case PerimeterxResult.solved:
            // 挑战已解决,可以重试请求
            break;
          case PerimeterxResult.cancelled:
            // 挑战被取消,可以重试请求,挑战将再次呈现
            break;
          case PerimeterxResult.failed:
            // 挑战失败,处理错误
            break;
        }
      }
    } on Exception {
      // 捕获异常,设置挑战结果为null
      _challengeResult = null;
    }

    // 更新UI
    setState(() {});
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Perimeterx示例应用'),
        ),
        body: Center(
          child: Padding(
            padding: const EdgeInsets.all(8.0),
            child: Column(
              crossAxisAlignment: CrossAxisAlignment.start,
              children: [
                // 显示获取到的PerimeterX头部信息
                if (_pxHeaders != null)
                  for (var key in _pxHeaders!.keys)
                    Text(
                      '$key: ${_pxHeaders![key]}',
                      style: const TextStyle(
                        fontSize: 12,
                      ),
                    ),
                // 获取PerimeterX头部信息的按钮
                TextButton(
                  onPressed: () {
                    getHeaders();
                  },
                  child: const Text('获取Perimeterx头部信息'),
                ),
                const Divider(),
                // 显示挑战结果
                if (_challengeResult != null)
                  Text(
                    '挑战结果: ${_challengeResult!.name}',
                    style: const TextStyle(
                      fontSize: 12,
                      color: Colors.red,
                    ),
                  ),
                // 发起挑战请求的按钮
                TextButton(
                  onPressed: () {
                    getChallenge();
                  },
                  child: const Text(
                    '发起Perimeterx挑战',
                  ),
                )
              ],
            ),
          ),
        ),
      ),
    );
  }
}

配置步骤

iOS配置

在iOS平台上,您需要在AppDelegate.swift文件中启动PerimeterX SDK,并传入您的APP_ID。具体步骤如下:

import Flutter
import UIKit
import PerimeterX_SDK

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {
  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {

      GeneratedPluginRegistrant.register(with: self)
      
      do {
          let policy = PXPolicy()
          policy.urlRequestInterceptionType = .none
          policy.doctorCheckEnabled = false
          try PerimeterX.start(appId: "API_ID", delegate: nil, policy: policy)
      }
      catch {
          print("error: \(error)")
      }
      
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}
Android配置

在Android平台上,您需要进行以下配置:

  1. 设置应用主题:确保在AndroidManifest.xml文件中设置了Theme.AppCompat.Light主题,并创建MainApplication类。
<application
    android:name=".MainApplication"
    android:theme="@style/Theme.AppCompat.Light">
</application>
  1. 添加权限:在AndroidManifest.xml文件中添加必要的权限。
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permutation android:name="android.permission.INTERNET" />
  1. 启动SDK:在MainApplication.kt文件中启动PerimeterX SDK,并传入您的APP_ID
class MainApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        try {
            val policy = PXPolicy()
            policy.storageMethod = PXStorageMethod.DATA_STORE
            policy.urlRequestInterceptionType = PXPolicyUrlRequestInterceptionType.NONE
            policy.doctorCheckEnabled = false
            PerimeterX.start(this, "APP_ID", null, policy)
        }
        catch (exception: Exception) {
            println("failed to start. exception: $exception")
        }
    }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter应用中使用perimeterx_flutter_plugin插件进行安全防护的代码示例。这个插件通常用于增强应用的安全性,防止各种攻击,如点击劫持、代码注入等。

首先,确保你已经在pubspec.yaml文件中添加了perimeterx_flutter_plugin依赖:

dependencies:
  flutter:
    sdk: flutter
  perimeterx_flutter_plugin: ^最新版本号  # 请替换为实际的最新版本号

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

接下来,在你的Flutter应用中初始化并使用perimeterx_flutter_plugin。以下是一个基本的实现示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter PerimeterX Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final PerimeterXFlutterPlugin perimeterx = PerimeterXFlutterPlugin();

  @override
  void initState() {
    super.initState();
    // 初始化PerimeterX配置
    String appId = "你的AppId"; // 替换为你的实际AppId
    String customerId = "你的CustomerId"; // 替换为你的实际CustomerId
    String apiKey = "你的ApiKey"; // 替换为你的实际ApiKey

    // 配置PerimeterX
    perimeterx.init(
      appId: appId,
      customerId: customerId,
      apiKey: apiKey,
      activityHandler: (Activity activity) {
        // 你可以在这里处理活动事件,比如记录日志等
        print("Activity Event: ${activity.toMap()}");
      },
      errorHandler: (PerimeterXError error) {
        // 处理错误事件
        print("PerimeterX Error: ${error.message}");
      },
    );

    // 检查当前页面是否安全
    perimeterx.isActivityAllowed().then((bool isAllowed) {
      if (!isAllowed) {
        // 如果活动不被允许,可以显示一个错误页面或者执行其他操作
        showDialog(
          context: context,
          builder: (BuildContext context) {
            return AlertDialog(
              title: Text("访问被拒绝"),
              content: Text("当前操作因安全原因被拒绝。"),
              actions: <Widget>[
                FlatButton(
                  child: Text("关闭"),
                  onPressed: () {
                    Navigator.of(context).pop();
                    // 你可以在这里添加退出应用或者其他逻辑
                  },
                ),
              ],
            );
          },
        );
      }
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Flutter PerimeterX Demo"),
      ),
      body: Center(
        child: Text('Hello, Flutter with PerimeterX!'),
      ),
    );
  }
}

在这个示例中,我们做了以下几件事情:

  1. pubspec.yaml中添加了perimeterx_flutter_plugin依赖。
  2. MyApp应用的home页面中使用PerimeterXFlutterPlugin进行初始化。
  3. initState方法中,我们配置了PerimeterX的参数,并设置了活动事件和错误事件的处理函数。
  4. 使用perimeterx.isActivityAllowed()方法检查当前活动是否被允许,如果不被允许,则显示一个错误对话框。

请注意,为了运行这个示例,你需要替换appIdcustomerIdapiKey为你的实际PerimeterX配置值。此外,根据你的具体需求,你可能需要调整错误处理和活动事件的处理逻辑。

这个示例提供了一个基本的使用框架,你可以根据实际需求进行扩展和定制。

回到顶部