React Native Webview安全问题解决办法

2023-05-16

威胁描述

威胁描述 根据CVE披露的WebView远程代码执行漏洞信息(CVE-2012-663、CVE-2014-7224),Android系统中存在一共三个有远程代码执行漏洞的隐藏接口。分别是位于android/webkit/webview中的“searchBoxJavaBridge”接口、android/webkit/AccessibilityInjector.java中的“accessibility”接口和“accessibilityTraversal”接口。调用此三个接口的APP在开启辅助功能选项中第三方服务的Android系统上将面临远程代码执行漏洞。

修改源码

/node_modules/react-native-webview/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java

在这个文件中搜索removeJavascriptInterface

@SuppressLint("AddJavascriptInterface")
    public void setMessagingEnabled(boolean enabled) {
      if (messagingEnabled == enabled) {
        return;
      }

      messagingEnabled = enabled;

      if (enabled) {
        addJavascriptInterface(createRNCWebViewBridge(this), JAVASCRIPT_INTERFACE);
      } else {
        removeJavascriptInterface(JAVASCRIPT_INTERFACE);
      }
    }

修改成:

@SuppressLint("AddJavascriptInterface")
    public void setMessagingEnabled(boolean enabled) {
      	removeJavascriptInterface("searchBoxJavaBridge_");
		removeJavascriptInterface("accessibility");
		removeJavascriptInterface("accessibilityTraversal");
    }

带来了更多的问题

removeJavascriptInterface(“searchBoxJavaBridge_”);
removeJavascriptInterface(“accessibility”);
removeJavascriptInterface(“accessibilityTraversal”);
安全问题是成功解决了,但是现在带来的一堆新的问题了。

React Native WebView这个组件一些常用功能无法正常使用了。
简单的来说,因为禁用了javascript交互的一些功能。RN无法控制Webview中的内容了。导致了以下的问题:

  1. RN端无法与WebView中的H5页面正常交互了。这样导致Livebos中的附件下载,或者一些操作事件,APP中无法监听到了。
  2. 影响当前APP的登录逻辑。目前我们APP的登录依赖这些JavascriptInterface。如果没有这个接口,我们必须把登录逻辑大改。需要曲线救国了。

shell配合sed实现整段文本替换实例

https://blog.csdn.net/lxyoucan/article/details/123582294

写本文的原始需求:
需要修改一个非常长的Java文件,以下代码块

 @SuppressLint("AddJavascriptInterface")
    public void setMessagingEnabled(boolean enabled) {
      if (messagingEnabled == enabled) {
        return;
      }

      messagingEnabled = enabled;

      if (enabled) {
        addJavascriptInterface(createRNCWebViewBridge(this), JAVASCRIPT_INTERFACE);
      } else {
        removeJavascriptInterface(JAVASCRIPT_INTERFACE);
      }
    }

替换成:

    @SuppressLint("AddJavascriptInterface")
    public void setMessagingEnabled(boolean enabled) {//webview removeJavascriptInterface
        removeJavascriptInterface("searchBoxJavaBridge_");
        removeJavascriptInterface(accessibility);
        removeJavascriptInterface(accessibilityTraversal);
    }

原本我想使用Java代码代码来实现替换动作,或者使用lua脚本来实现这个事情。
考虑到这两种方式都是需要安装运行环境的。所以我就想能不能使用兼容性相对比较好的shell来实现。
就想到使用sed命令来实现了。
最终功能已经成功实现了,代码写的比较笨拙,仅供大家参考:

#!/bin/bash
#自动修改React Native Webview中的代码
#editFilePath='input.txt1'
editFilePath='../node_modules/react-native-webview/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewManager.java
'
#获取要修改的行号
setMessagingEnabledLine=$(sed -n '/public void setMessagingEnabled(boolean enabled) {$/=' ${editFilePath})
echo "查询关键字的位置:${setMessagingEnabledLine}"
if [[ "$setMessagingEnabledLine" == '' ]]; then
    echo "没有找到关键字,程序将要退出"
    echo "可能已经执行过 自动修改脚本了"
    exit
fi

#要修改的开始行号
startLine="$((setMessagingEnabledLine+1))"
#要修改的结束行号
endLine="$((startLine+10))"
index1="$((startLine-1))"
index2="$((startLine))"
index3="$((startLine+1))"
#删除方法体的内容
sed -i "${startLine},${endLine}d" ${editFilePath}
#增加第一行代码___用于格式化
sed -i "${index1}a________removeJavascriptInterface(\"searchBoxJavaBridge_\");" ${editFilePath} 
#增加第二行代码
sed -i "${index2}a________removeJavascriptInterface("accessibility");" ${editFilePath}
#增加第三行代码
sed -i "${index3}a________removeJavascriptInterface("accessibilityTraversal");"  ${editFilePath}
#用空格格式化一下
sed -i 's/________/        /' ${editFilePath}
#标记位做个标记访问重复处理
sed -i 's/public void setMessagingEnabled(boolean enabled) {$/public void setMessagingEnabled(boolean enabled) {\/\/webview removeJavascriptInterface/' ${editFilePath}
cat ${editFilePath}

参考

https://developpaper.com/android-webview-high-risk-problem-solving/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React Native Webview安全问题解决办法 的相关文章

  • Netty编解码器,Netty自定义编解码器解决粘包拆包问题,Netty编解码器的执行过程详解

    文章目录 一 编解码器概述1 编解码器概述2 编码器类关系图3 解码器类关系图 二 以编解码器为例理解入站出站1 Server端2 Client端3 编解码器3 执行查看结果4 注意事项 三 Netty其他内置编解码器1 Replaying
  • ERROR Error: Reanimated 2 failed to create a worklet

    报错 To reload the app press span class token string 34 r 34 span To span class token function open span developer menu pr
  • React Native创建一个新的项目常用命令

    创建项目 创建一个typescript项目 npx react native init ywh template react native template typescript 导入库 整合 方便一键安装 以下仅是本人常用的组件 xff0
  • 各操作系统支持图标字体的终端推荐

    软件推荐 操作系统推荐macOSiTerm2windowsWindows TerminallinuxGNOME 终端 等androidTermux或TermiusiOSTermius 不完美 如果你在macOS我推荐你使用iterm2 xf
  • MAME set 4 player

    背景 我本身有一个手柄 xff0c 准备12 12在入手一个 然后小杨同学就把他的一对手柄借给我啦 xff0c 让我试试手感 xff0c 好决定买哪个 那么我现在就有3个手柄可以使用 我就想找个3个人以上的游戏来玩玩 首先我就想到了玩街机
  • [视频教程]macOS运行MAME

    操作视频 https www bilibili com video BV1Nr4y1D7SQ 安装 brew span class token function install span mame ROM 把roms文件夹放到以下目录 xf
  • [视频教程]MAME画质优化hq3x

    关于滤镜 xff0c 萝卜白菜各有所爱 我个人喜欢hq3x的画质 视频教程 https www bilibili com video BV1Ji4y1d7j6 默认画质 hq3x 加了层滤镜 xff0c 显示更平滑了 配置方法 核心配置 搜
  • macOS安装最新MAME 报错dyld: Library not loaded:

    在macOS中安装最新版本的MAME 报错 mame dyld Library not loaded 64 rpath SDL2 framework Versions A SDL2 Referenced from Users itkey m
  • ‘@typescript-eslint/no-shadow‘ was not found

    我新建了一个React Native项目 xff0c 然后IDE报错如下 以前新建的项目是不会有任何报错信息的 报错信息 Definition for rule 64 typescript eslint no shadow was not
  • 纯javascript代码修改react 的输入框的值

    背景 我们有一个老的项目在维护 xff0c 项目是使用react dom 64 16 8 6实现的 也就是react开发的 xff0c 但是因为某种原因 xff0c 暂时找不到源码了 时间紧任务重 xff0c 必须赶紧解决问题 简化需求 x
  • 【视频教程】MAME0.238配置分享

    视频链接 https www bilibili com video BV15q4y1B7Hn 附件下载 百度网盘分享 链接 https pan baidu com s 1rsBdRn99 KWjhRpPrGBmfw 提取码 4ge5CSDN
  • Netty解决粘包拆包问题,Netty使用自定义编解码器解决粘包拆包问题

    文章目录 一 什么是粘包拆包二 粘包拆包实例1 Server端2 Client端3 测试一下 三 解决粘包拆包的方案四 使用自定义编解码器解决粘包拆包问题1 定义协议包2 编解码器3 server端4 client端5 测试一下 一 什么是
  • vim表格格式化插件vim-table-mode

    简介 一个很棒的自动表格创建器和格式化程序 xff0c 允许您在键入时创建整洁的表格 项目主页 https github com dhruvasagar vim table mode 安装 这里以packer为例 packer插件管理器安装
  • React Native打包安卓应用笔记

    前言 大部分内容是复制过来的 xff0c 主要做了一下整理 xff0c 方便自己查阅 打包发布 Android 要求所有应用都有一个数字签名才会被允许安装在用户手机上 xff0c 所以在把应用发布到应用市场之前 xff0c 你需要先生成一个
  • 无需AS通过命令行启动安卓模拟器

    背景 我是做RN开发的 xff0c 要经常启动安卓模拟器来测试 时间久了 xff0c Android Studio 成安卓模拟器启动器了 每次打开AS还是挺久的 xff0c 所以就想直接通过命令行来启动安卓模拟器 xff0c 这样会快很多
  • ssh登录时自动运行命令

    方法一 编辑 nvim ssh rc 里面写上要执行的命令 比如 xff1a span class token builtin class name echo span span class token string 39 command
  • React Native倒计时

    代码 span class token keyword import span span class token operator span span class token keyword as span React span class
  • React Native android 8以上版本闪退踩坑笔记

    背景 我的android的测试机版本是android 8 xff0c 我使用React Native开发的应用 xff0c 自己测试是正常的 iOS上也是正常的 但是一放到android8以上的版本本就出现了闪退的现象 xff0c 让我非常
  • git push send-pack: unexpected disconnect while reading sideband packet

    错误信息 span class token function git span push 枚举对象中 span class token number 200 span 完成 对象计数中 span class token number 100
  • node.js启动静态页面服务

    安装http server span class token function npm span span class token function install span http server g 启动服务 span class to

随机推荐

  • ssh中远程vim自动切本地输入法

    简介 SshIM 是一个解决ssh中使用vim nvim 中文输入法自动切换插件 原理 xff1a 当ssh中使用的vim 进入insert模式或者离开insert模式 xff0c 都会触发一个事件 当触发事件以后 xff0c 通过http
  • mame0.239选定系统所需要的ROM/磁碟映像档为缺少或不正确

    背景 之前发过一个视频 xff0c 讲MAME怎么配置和使用的 结果有网友反馈说有少部分游戏打开报错 xff0c 不会弄 运气比较好 xff0c 我想玩的ROM基本都可以正常使用 我就很奇怪 xff0c 为什么会报错的呢 xff1f 我怎么
  • Netty核心源码分析(一),Netty的Server端启动过程源码分析

    文章目录 系列文章目录一 Netty的Server端启动过程源码分析1 NioEventLoopGroup的创建 xff08 1 xff09 构造方法 2 ServerBootstrap的创建 xff08 1 xff09 构造方法 xff0
  • Android Emulator安卓模拟器去黑边

    安卓模拟器默认会有一个黑边 xff0c 让它看起来像个手机 但是看久了总感觉太占地方了 去掉黑边 重启完成以后 xff0c 效果如下 xff1a
  • 【视频】iOS开发允许http请求

    APP开发中有时会对接一些比较老的项目 xff0c 老的项目还有一些在使用http的 iOS应用默认情况下不允许请求http xff0c 怎么能让其允许呢 xff1f 视频讲解 https www bilibili com video BV
  • The run destination iPhone 13 is not valid for Running the scheme

    报错信息 The run destination iPhone 13 is not valid for Running the scheme apexedu 原因分析 后来我发现我的项目中的TARGETS中少了一个项目 xff0c 不清楚是
  • xcode Archive菜单是灰色的解决办法

    想把iOS应用打包上传到App Store发现这个菜单是灰色的 原因 后来发现 xff0c 因为我当前的运行环境是iOS模拟器 解决办法 运行设备修改成Any iOS Device arm64 xff0c 菜单就可以正常使用了 参考 htt
  • iterm2(zsh)粘贴慢解决办法

    我在macOS环境中使用的是iterm2终端 xff0c 每次在粘贴大量命令的时间 xff0c 明显感觉粘贴速度慢 就感觉粘贴也是一个字一个字粘贴的 在命令过长时由为明显 本以为是iterm2的原因 xff0c 后来发现原来是因为zsh的原
  • MAME打开ROM报错解决办法

    问 olds100 34 西游释厄传 特别版 版本 100 第 1 套 34 运行报错如何解决 xff1f 答 经过我的研究olds100 zip这个游戏是一个特别版本 它依赖两个文件才可以正常运行 分别是 xff1a olds zip x
  • 【新建Spring Boot项目】Connect to 127.0.0.1:1087 [/127.0.0.1] failed: Connection refused

    背景 我在新建微服务项目的时候 xff0c 使用gradle报错Connect to 127 0 0 1 1087 127 0 0 1 failed Connection refused 然后我检查了一下IDEA的代理设置 xff0c 没有
  • 命令行搜索神器fzf

    文件搜索神器fzf xff0c 名气很大 xff0c 很快 xff0c 很强大 fzf 是一个通用的命令行模糊查找器 它是一个交互式 Unix 命令行过滤器 xff0c 可用于任何列表 xff1b 文件 命令历史 进程 主机名 书签 git
  • docker中搭建nacos集群笔记

    最近在学习nacos xff0c 在本地搭建nacos集群环境 因为电脑配置低 xff0c 所以没有使用vmware虚拟机 xff0c 而是用docker中搭建的 仅是简单的笔记供自己复习查看 nacos相关配置 数据源配置 vim con
  • nginx: [emerg] could not build server_names_hash

    报错信息 nginx emerg could not build server names hash you should increase server names hash bucket size 32 nginx configurat
  • Netty核心源码分析(二),Netty的Server端接收请求过程源码分析

    文章目录 系列文章目录一 连接请求接受过程源码分析1 事件的值2 processSelectedKeys获取事件 xff08 1 xff09 doReadMessages方法 xff08 2 xff09 pipeline的fireChann
  • HAProxy学习笔记

    最近在学习微服务架构 xff0c 里面有用到HAProxy xff0c 记录一下学习笔记 官方网站是 xff1a https www haproxy org 下载安装 推荐使用源码安装 xff0c 因为我用的ubuntu 20 04中本身自
  • 如果在ubuntu上安装mysql client

    ubuntu安装mysql客户端 MySQL 是流行的开源关系数据库管理系统 与服务器交互的程序称为 MySQL 客户端 您可以使用的最基本的客户端是命令行工具 xff0c 通常称为 MySQL 客户端 要在 Ubuntu 20 04 上安
  • neovim内置lsp实现Java语言补全

    文章目录 通用方式自动化配置Java LSP手动配置JDK版本选择配置解压jdt language server配置环境变量 我的配置分享 neovim使用nvim jdtls搭建Java IDE 通用方式自动化配置Java LSP 可以使
  • neovim使用nvim-jdtls搭建Java IDE

    nvim jdtls简介 Neovim for eclipse jdt ls 中内置 LSP 支持的扩展 Neovim gt 61 0 6 0 中对eclipse jdt ls的内置语言服务器协议支持的扩展 该项目遵循KISS 原则 xff
  • 【视频】零基础neovim搭建Java IDE

    文章目录 视频教程系统环境准备工作文件下载安装neovim 0 6以上版本 下载解压jdt language server安装JDK11安装curl git neovim配置插件安装配置nvim cmp配置LuaSnip配置nvim jdt
  • React Native Webview安全问题解决办法

    威胁描述 威胁描述 根据CVE披露的WebView远程代码执行漏洞信息 xff08 CVE 2012 663 CVE 2014 7224 xff09 xff0c Android系统中存在一共三个有远程代码执行漏洞的隐藏接口 分别是位于and