无论您是开发传统的原生应用、使用 Appcelerator 或 Xamarin 跨编译的应用、使用 Ionic 的混合应用,还是使用 NativeScript 或 React Native 的 JavaScript 原生应用,每个应用都存在一个共同点:应用安全。
我认为,现在比以往任何时候,我们开发者都更加意识到面临的各种安全问题。当您使用 NativeScript 开发跨平台移动应用时,您开发的是一个真正的原生应用。但这同时也意味着,与任何其他原生移动应用一样,需要考虑相同安全问题。
观看网络研讨会"保护移动应用的最佳实践",获取 NativeScript 安全方面的一些技巧和窍门!
在上一篇文章中,我们深入探讨了如何通过高级混淆、防止代码篡改、缩小安装范围以及将敏感业务逻辑迁移到云端来保护我们的源代码。
今天,我们的重点是如何在本地存储(并保护)数据。所以让我们开始吧!
查看来自NativeScripting.com 的关于移动应用安全的新课程,使用代码:NSSECURE 可享受 30% 的折扣。
iOS 和 Android 默认情况下都会阻止一个应用存储的数据被系统上的任何其他应用访问。但是,众所周知,通往地狱的路是用善意铺成的,对吧?🔥😰
因此,最好始终加密我们保存到设备上的任何数据。
幸运的是,nativescript-secure-storage 插件可以帮到我们!
安全存储插件允许我们加密、保存、解密和检索键值对。
// require the plugin
import { SecureStorage } from "nativescript-secure-storage";
// instantiate the plugin
let secureStorage = new SecureStorage();
// async
secureStorage.set({
key: "foo",
value: "I was set at " + new Date()
}).then(success => console.log("Successfully set a value? " + success));
// sync
const success = secureStorage.setSync({
key: "foo",
value: "I was set at " + new Date()
});
注意:在内部,iOS 上此插件通过SAMKeychain 库 使用 KeyChain,Android 上通过Hawk 库(进而使用Facebook conceal)使用。
您是SQLite 的粉丝吗?您知道有一个功能齐全的 NativeScript 插件 支持 SQLite 吗?现在您知道了!
SQLite 插件的免费版本(如上)提供了您期望从 SQLite 获得的所有功能。但是,有一个付费选项 也包括在静止状态下加密 SQLite 数据库。通过利用SQLCipher,您可以在用户设备上对 SQLite 数据库进行透明的 256 位 AES 加密。
我们中的许多人使用移动后端服务(mBaaS),如Firebase 或Progress Kinvey 作为我们的远程后端。在开发移动应用时,我们需要了解在线/离线连接,以及在用户在这些状态之间切换时同步数据(以免应用在没有网络连接的情况下崩溃!)。
Kinvey 默认情况下包含在线/离线数据同步,如文档中的此扩展代码示例所示。
// Retrieve an instance
const dataStore = Kinvey.DataStore.collection('books', Kinvey.DataStoreType.Sync) as Kinvey.SyncStore;
// Pull data from the backend and save it locally on the device.
const promise = dataStore.pull()
.then((entities: Array<{}>) => {
// ...
})
.catch((error: Kinvey.BaseError) => {
// ...
});
// Find data locally on the device.
const subscription = dataStore.find()
.subscribe((data: Array<{}>) => {
// Called once, with local data
}, (error: Kinvey.BaseError) => {
// ...
}, () => {
// Called after the local data has been retrieved
});
// Save an entity locally to the device. This will add the item to the sync table to be pushed to the backend at a later time.
const entity = {};
const promise = dataStore.save(entity)
.then((entity: {}) => {
// ...
})
.catch((error: Kinvey.BaseError) => {
// ...
});
// Syncs this store with the backend. This will first push any pending changes on the device to the backend and then pull data from the backend onto the device.
const promise = dataStore.sync()
.then((entities: Array<{}>) => {
// result will contain the results of the push to the backend and a pull from the backend
// result = {
// push: [], // pushed entities
// pull: [] // pulled entities
// };
//
// Each item in the array of pushed entities will look like the following
// { _id: '<entity id before push>', entity: <entity after push> }
// It could also possibly have an error property if the push failed.
// { _id: '<entity id before push>', entity: <entity after push>, error: <reason push failed> }
})
.catch((error: Kinvey.BaseError) => {
// ...
});
此外,Kinvey 提供了设备上静止数据的加密,使用 SQLite 和 SQLCipher,在您初始化 Kinvey 时会自动配置。
Kinvey.init({
appKey: '<appKey>',
appSecret: '<appSecret>',
encryptionKey: '<encryptionKey>'
});
我们许多在企业中开发应用的人员都非常了解合规性和安全法规。在美国,对于为医疗保健提供商或保险公司创建应用的开发者来说,一个重要的法规是HIPAA。
如果您正在开发一个处理医疗保健行业中的 PHI(个人健康信息)的应用,您绝对需要确保所述数据的存储和传输符合 HIPAA 标准。
Kinvey 通过 SOC2、HIPAA、GDPR、萨班斯-奥克斯利法案和其他合规活动每年审查、确认和改进安全控制措施。对于专注于 FFIEC 或 GLBA 规范的银行客户、专注于 HIPAA 的医疗保健客户,或在欧盟开展业务并关注 GDPR 的客户,Kinvey 平台提供了全面的端到端安全性和支持您监管合规工作所需的功能。
在此处阅读更多信息,了解 Kinvey 如何为您组织提供所需的安全性及合规性保障。
今天,我们介绍了如何在应用中安全地存储私有数据元素,甚至研究了一些本地和远程安全数据存储选项。接下来 我们将探讨如何安全地传输客户端与服务器之间的数据。提示:这并不像 SSL 那样简单。🤔