Flutter 에서 디바이스 내부에 정보를 저장하기 위해서 일반적으로 shared_preferences 패키지를 많이 사용하지만
로그인 정보들이 쉽게 노출이되기에 보안에 취약하므로
개인정보는 flutter_secure_storage 를 이용해서 저장하는것이 바람직하다.
Shared_preferences 는 왜 보안에 취약한가?
- Android에서의 문제
Android는 루팅을 통하여 루트 권한을 얻음으로 생산자, 판매자측에서 걸어 놓은 제약을 해제하면
Shared Preference 같은 쉽게 사용할 수 있는 내부 저장소들은 간단한 루팅 과정만으로
ADB(Android Debug Bridge)를 사용해서 저장되어있는 내용들을 쉽게 볼 수 있다고 한다. - iOS에서의 문제
iOS는 탈옥(Jailbreaking) 을 통하여 iOS의 샌드박스 제한을 풀어 타 회사에서 사용하는 서명되지 않은 코드를 실행할 수 있게 된다.
FlutterSecureStorage는 왜 보안성을 보장하는가?
민감한 정보들을 저장할 때 flutter_secure_storage 라는 패키지를 사용하면 AES 비밀키는 RSA로 암호화되어
Android에서는 keystore 영역에, iOS에서는 keychain라는 내부 저장소 영역을 사용하게 된다.
Android의 keystore은 소스코드 내부 어딘가가 아닌 시스템만이 접근할 수 있는 컨테이너에 저장 하기 때문에 루팅을 하여도 접근 할 수 없다. 그래서 앱에서 임의로 발급한 암호화 키만 저장하고 이 키를 이용해 정보를 암호화해 로컬 DB에 저장하고, 저장된 정보를 사용할 때는 복호화해 사용한다.
FlutterSecureStorage 사용법
- V5.0.0부터 아래와 같이 Android 옵션에서 활성화하여 EncryptedSharedPreferences를 사용가능하며 해당 옵션을 권장합니다.
AndroidOptions _getAndroidOptions() => const AndroidOptions(
encryptedSharedPreferences: true,
);
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
// Create storage
final storage = new FlutterSecureStorage();
// Read value
String value = await storage.read(key: key);
// Read all values
Map<String, String> allValues = await storage.readAll();
// Delete value
await storage.delete(key: key);
// Delete all
await storage.deleteAll();
// Write value
await storage.write(key: key, value: value);
https://pub.dev/packages/flutter_secure_storage/example
FlutterSecureStorage를 이용한 로그인 / 로그아웃 예제코드 (+ Dio를 이용한 Rest Api 호출)
'Study > Flutter' 카테고리의 다른 글
[Flutter] 앱 이름, 아이콘, 스플래시 이미지설정 (0) | 2023.01.25 |
---|---|
[Flutter] Rest Api 호출 라이브러리 비교 (dio,retrofit,chopper) (0) | 2023.01.18 |
[Flutter] ensureInitialized() 언제, 왜 호출해야 하는가? (0) | 2023.01.18 |
[Flutter] FCM foreground, background 설정 (IOS,AOS) with local_notification (0) | 2023.01.04 |
[Flutter] Firebase Cloud Messaging - FCM 테스트발송 (2) | 2022.12.23 |