反应-本土-应用-安全 qq
在 React Industrial Expo apps 中轻松执行通常的安全措施
• 免责声明
这个软件包旨在帮助实施一些基本的安全特性,但本身并不能保证应用程序的安全.
参见 OWASP的资源 关于移动应用程序安全的更多信息.
你也可以这样 联系我们 如果你需要帮助 保护您的应用程序.
安装和设置
此软件包设计用于 expo apps 中 发展。 。 。 .
yarn add @bam.tech/react-native-app-security
将配置插件添加到 app.config.ts 编号 : app.config.js 编号 : app.json数字 :
{
"plugins": [
[
"@bam.tech/react-native-app-security",
{
"sslPinning": {
"yahoo.com": [
"TQEtdMbmwFgYUifM4LDF+xgEtd0z69mPGmkp014d6ZY=",
"rFjc3wG7lTZe43zeYTvPq8k4xdDEutCmIhI5dn4oCeE="
]
},
"preventRecentScreenshots": {
"ios": { "enabled": true },
"android": { "enabled": true }
}
}
]
]
}
每当你改变配置,不要忘记运行:
yarn expo prebuild
特征
SSL 平接键
什么威胁? 攻击者拦截了您的应用程序的网络请求并访问私人数据或发送恶意回复. 更多细节
此软件包执行 公钥接线 使用 信任键 在iOS上,并包含在Android上的OkHttp中的证书pinner.
配置
[
"@bam.tech/react-native-app-security",
{
"sslPinning": {
// The hostname you want to pin, without `https://`
"yahoo.com": [
// The public key hashes for the pinned certificates, without a `sha256/` prefix
"TQEtdMbmwFgYUifM4LDF+xgEtd0z69mPGmkp014d6ZY=",
"rFjc3wG7lTZe43zeYTvPq8k4xdDEutCmIhI5dn4oCeE="
]
}
}
]
请注意,你需要提供 2个 公用钥匙散列。 这是为了鼓励制定适当的程序,避免将用户锁出, 如本文所描述的 TrustKit 文档。 。 。 .
固定子域
要给特定子域打针, 只需将其包含在您提供的字符串中, 例如 :
"sslPinning": {
"subdomain.domain.com": [/* ... */]
}
要标出一个域及其所有子域,请使用通配符:
"sslPinning": {
// domain.com and all its subdomains will be pinned
"*.domain.com": [/* ... */]
}
通配符只能用于主机名中最通配的部分.
无效 :
*domain.com, (中文(简体) ),domain.*.com, (中文(简体) ),sub.*.domain.com
生成公钥散列
您需要证书( E).cer 或者说 .crt(中文(简体) )
openssl x509 -in certificate.cer -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64
测试
要测试 SSL 针线是否正常, 您可以:
- 换出( 更改) 证书并检查连接失败 (别忘了)
yarn expo prebuild接下来yarn ios或者说yarn android以重建应用程序) - 设置代理( 我们爱 代理服务器)并检查连接失败
防止"最新截图"
什么威胁? OS终止应用时,可能会取出截图并存储在设备上,以显示在应用切换器上. 这个截图可能泄露敏感数据
通过以下方式来缓解这一威胁:
- 使用
FLAG_SECUREandroid < 13号 - 使用
Activity.setRecentScreenshotsEnabled安卓13号 - 在 iOS (要求) 上用溅出屏幕覆盖应用程序 expo- splash- 屏幕 (待设置)
配置
[
"@bam.tech/react-native-app-security",
{
"preventRecentScreenshots": {
"ios": { "enabled": true },
"android": { "enabled": true }
}
}
]
安全键盘检测器
什么威胁? 第三方键盘可能嵌入恶意键盘来记录密码和敏感数据. 更多细节
通过以下方式来缓解这一威胁:
- 在Android上,将当前键盘ID与列表比较 我们认为安全的键盘包。 。 。 .
- 在iOS上,由于iOS已经阻止了在密码等敏感领域使用第三方键盘,所以没有做具体的事情.
import { SafeKeyboardDetector } from "@bam.tech/react-native-app-security";
const { isInDefaultSafeList, inputMethodId } = getCurrentInputMethodInfo(); // Will always return {isInDefaultSafeList: true, inputMethodId: "iosKeyboard"} on iOS
if (!isInDefaultSafeList) {
console.warn(`Your current keyboard (${inputMethodId}) is not safe`);
}
// Prompt the user to change the current keyboard
SafeKeyboardDetector.showInputMethodPicker(); // can only be called on Android
[警告 - iOS] 禁用默认缓存 Cache.db
⚠️ 分局: 这个实验特征可能会影响应用行为. 冒险用吧 瘫痪的缓存会造成出乎意料的问题.
可能的副作用:
- 由于缺乏缓存答复,性能更慢
- 重复请求的网络使用率较高
- 需要缓存数据的组件发生崩溃
- 离线模式中的功能失败
威胁: 在iOS上,每个
NSURL请求可能默认在Cache.db除非明确禁用,否则有可能储存敏感数据。 这可能导致无意的数据泄露.
通过以下方式来缓解这一威胁:
- 完全清除已存在的缓存
- 通过设置为空缓存来删除缓存 :
URLCache.shared = URLCache(memoryCapacity: 0, diskCapacity: 0, diskPath: nil)
配置
如果您想要启用此功能, 需要在应用程序配置文件中启用( 默认情况下已禁用)
[
"@bam.tech/react-native-app-security",
{
"disableCache": {
"ios": { "enabled": true }
}
}
]
捐款
欢迎捐款。 见 展览模块文件 关于如何建设/运行/开发项目的信息.
当改变到 plugin 文件夹,您需要运行 yarn prepare 在创建和创建示例应用程序之前.
关于BAM
我们是100个人公司 开发和设计多平台的应用程序 原生反应 使用 Lean & Agile 方法。 要了解更多适合你需要的解决方案,请随意联系 电子邮件 或者通过我们 联系表单来啊!
我们总是会很高兴地回答你