- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近安全团队通知我内存中存储了敏感数据/密码。
对于密码输入,我使用 TextInput onChangeText 在将密码字符串传递给 API 服务负载(带有密码字符串的对象)以对用户进行身份验证之前对其进行设置状态。与 redux 和 redux thunk 一起使用。
安全团队建议将字符串更改为字符数组。我不知道该怎么做,因为最后我仍然需要将密码字符串传递给 API 负载,因此敏感的密码字符串仍将存储在内存中。另一个建议是加密字符串,甚至可以在内存中执行此操作吗?我在发送 API 调用之前对其进行了加密,但我不确定如何在内存中对其进行加密。
为了检测内存中的字符串,我使用带有 fridump 的越狱 iPhone 来转储内存,并使用它和 -s 标志将字符串提取到文本文件中。
最佳答案
首先,关于“安全问题”的几句话。这里的警告是,密码在用户输入后,显然包含在设备内存中(甚至不像另一个答案所建议的那样在磁盘上,而是在内存中)。由于 Javascript 在 JSC 中运行,JSC 基本上是一个 C++ 程序,因此应用程序在操作时创建的 JS 字符串存储在堆中 - 所有原始数据所在的内存部分。为简单起见,当您输入“hello world”作为密码时,“hello world”字符串将被创建并作为一个整体存储在该堆的某个地方。当您转储设备内存时,您可以扫描它以查找 hello world
您刚刚输入的序列并得出结论,如果您发现该应用程序“不安全”
这是一个真正的安全问题吗?我不认为这是一个,因为如果入侵者可以访问另一个用户的设备内存以“读取未加密的密码”,那么他甚至不需要这样做,因为有更简单的方法来窃取该密码(记录例如,屏幕、触摸、键盘敲击或网络流量)。大多数应用程序从不关心这种事情,因为大多数安全性(在这种情况下是内存安全)通常由操作系统处理(例如,通过确保一个进程不能那么容易地读取另一个进程内存) .这些安全准则通常适用于不在移动设备上运行而是在 ATM 或服务器上运行的较低级别的程序,在这些程序中存在入侵者物理插入设备并在未引起注意的情况下转储内存的实际风险。
让我们讨论您如何仍然可以避免这种所谓的漏洞以满足您的安全团队。最简单的方法之一是,不是将密码存储在单个字符串中,而是将其存储在数组中,而不是 hello world
(堆中的单个字符串)您有 ["h", "e", "l", "l", "o", " ", "w", "o", "r", "l", "d"]
(9 个不同的单字母字符串(在其他语言中称为“字符”)随机存储在堆中的某个位置,其中一个数组对象包含对每个字符串的引用)。现在,如果您转储您的内存,您将无法在其中找到您的初始密码,因为它散落在各处。你如何在 React Native 中实现它?使用数组代替以字符串形式将密码存储在状态中的某处。在 onChangeText 从该数组追加或删除项目时,避免将整个字符串连接在一起,直到您确实需要将其发送到服务器。为了让星号正确出现在您的 TextInput 中,您可以创建一个假字符串,因为无论如何它都会被屏蔽掉,并且您唯一关心的只是该数组的长度,因此您可以在其中绘制相同数量的星号文字编辑。当然,最后连接整个字符串是(几乎)不可避免的,因为您仍然需要将其发送到服务器,但是该字符串的窗口应该相对较短 - 从构造请求并将其发送到 GC(垃圾收集器) ) 清除字符串,因为对它的引用(您在其中保存字符串的变量)超出范围并且不再可访问
Memory Management on MDN
关于react-native - 如何处理内存中的 React Native 敏感字符串信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60663811/
在这种情况下,我们在应用程序中同时使用react-native-gesture-handler Touchable和react-native Touchable。 (通过Touchables,我的意思
我有一个 MainFooter包含页脚和迷你播放器的组件,单击时动画显示为全 View 。我有一个问题,每当我们点击一个页脚选项卡时,播放器最大化然后卡在那里,没有响应。 此外,播放器内部的向下箭
我在 native react 之上使用 native 基础组件,我想知道如何在 UI 中使卡片呈圆形而不是矩形。有圆形的 Prop 吗? 最佳答案 好吧,实际上没有人能回答这个问题,但幸运的是我在
我在 native react 之上使用 native 基础组件,我想知道如何在 UI 中使卡片呈圆形而不是矩形。有圆形的 Prop 吗? 最佳答案 好吧,实际上没有人能回答这个问题,但幸运的是我在
我是 react-native 的新手,所以我认为“HTML”而不是“native”可能有点太多了,所以我的问题看起来很愚蠢。 我使用 react-native-router-flux 进行路由,并使
当我使用这个例子在我的应用程序上实现 Image-slider 时,我遇到了这个错误。 import React,{Component} from 'react' import {View,T
我正在为我们的产品使用“Native Base”组件,并且效果很好, 但我有一点被卡住了,它是关于将 Items 放入 Nativebase Picker 的问题。我的代码是这样的 渲染方法代码 -
正如文档中所建议的,我将一些长的数据获取代码移动到 native 模块中以释放 JS 线程,但我观察到这仍然阻塞了 UI。为什么会这样,我能做些什么来避免这种情况? 从 JS 调用 native 模块
我正在使用一个名为 react-native-svg 的框架在 React Native View 中绘制 SVG 元素。 我的目标是,当我点击 View 时(我在全局 View 上使用 PanRes
在 IOS 中发现错误 Native Module cannot be null 我不使用 react-native-push-notification 最佳答案 这通常发生在您未能将第三个库链接到您
当应用程序关闭时,我可以获得由 Linking.getInitialURL() 点击的深层链接网址。 .当应用程序处于后台状态时,则不会安装任何内容。所以,我什至无法通过 Linking.addEve
1) 说原生库是什么意思?什么样的图书馆?那些将用作 gradle 依赖项? 2)如何链接这些?我在使用 link 或 rnpm 时遇到了麻烦。 最佳答案 链接 native 库意味着您要将已经实现的
我需要帮助来构建我的 react 原生项目。我尝试过react-native run-android,但出现以下错误: react-native : The term 'react-native' i
我需要帮助来构建我的 react 原生项目。我尝试过react-native run-android,但出现以下错误: react-native : The term 'react-native' i
我是 React-Native 的新手,到目前为止我很喜欢它。我正在尝试创建一个屏幕(用于跨平台应用程序),右上角有一个菜单图标,单击时,我想打开一个菜单,希望使用 react-native-menu
RN doco 和其他示例展示了如何从 native iOS View Controller 启动 React-Native View ,但反之则不然。谁能解释一下我该怎么做? 最佳答案 我能够弄清楚
对于 react-native - WebStorm 用户: 我正在使用 Jet Brains IDE WebStorm 开始一个带有 React Native 的项目。 在项目 => node_mo
在升级过去的 react-native 0.60 之后......我被警告我应该取消链接所有手动链接的第 3 方库(因为 RN 现在通过自动链接处理它)。 但是,当我运行 react-native u
你可以使用像 https://github.com/tolu360/react-native-google-places 这样的库吗?在世博项目中?我假设任何 npm 库都可以添加,但是像这个 goo
我主要喜欢 React Native。自 0.22 以来一直在使用它。目前为 0.35。 但是为什么链接原生库就像抽奖一样呢?我很少在第一次拍摄时让它发挥作用,而破裂的东西通常是完全不同的东西。 每个
我是一名优秀的程序员,十分优秀!