1.리액트 네이티브 코드 난독화
코드 난독화 는 민감한 데이터를 저장하는 가장 기본적인 방법입니다. 읽을 수 있는 코드를 Uglify와 같은 소프트웨어를 사용하여 사람이 육안으로 읽을 수 없게 만듭니다. React Native의 Java 코드는 난독화되지 않는 한 읽을 수 있는 DEX 파일로 저장됩니다.
React Native에는 react-native-obfuscating-transformer로 알려진 난독화 라이브러리가 내장되어 있어 사용자가 JavaScript 코드와 모든 기본 코드에 대해 난독화를 구현할 수 있습니다.
애플리케이션의 gradle 파일에서 난독화를 활성화하는 것입니다. buildTypes 섹션 내에서 [app_name]/android/app/build.gradle로 이동하여 아래 코드를 적용할 수 있습니다.
android {
// … other config
buildTypes {
release {
debuggable false
shrinkResources true
zipAlignEnabled true
minifyEnabled true
useProguard true
setProguardFiles([getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’])
}
}
// … other config
}
minifyEnabled 및 useProguard는 코드의 최소화 및 난독화를 활성화하는 반면 setProguardFiles 지시문은 proguard 구성의 위치를 나타냅니다. Proguard는 코드를 보호하는 동시에 불필요한 부분을 제거하고 최종 앱 크기를 줄이는 최적화를 수행합니다. proguard 구성은 코드를 난독화하는데 필요한 모든 예외가 추가되는 (proguard-rules.pro)파일로 설정할 수 있습니다.
2.React Native 저장소 보안
개발자는 종종 애플리케이션 내부에 영구 데이터를 저장합니다. React Native는 Async-storage, sqlite, pouchdb 및 realm과 같은 여러 가지 방법을 제공하고 있습니다.
다음은 애플리케이션에 보안 계층을 추가 할 수 있는 몇 가지 플러그인입니다.
- SQLite : 데이터를 저장하는 가장 일반적인 방법 중 하나입니다. SQLCipher는 SQLite 암호화를 위해 널리 사용되는 오픈 소스 확장 컴포넌트입니다. 암호는 키 없이는 액세스 할 수 없는 256비트 AES로 암호화됩니다. React Native에는 SQLCipher를 제공하는 react-native-sqlcipher-2 (ORM 공급자로 pouchdb 와 함께 사용 가능)와 react-native-sqlcipher-storage (Cordova 구현 기반) 라이브러리가 있습니다.
- Realm : SQLite에 비해 더 빠른 데이터베이스이며 기본적으로 암호화를 지원합니다. 또한 AES256 알고리즘을 사용하며 암호화는 SHA-2 HMAC 해시를 사용하여 검증합니다.
이 외에도 React Native는 iOS 및 Android를 위해서 민감한 데이터를 저장하는 몇 가지 기본 방법을 제공합니다.