背景
个人开发一款可以播放视频的app,使用expo+rn,由于不开发后端服务器,后端采用网络资源,通过爬虫以插件的形式进入注入,这难免存在安全问题
方式
- 使用new Function
- 使用eval
问题
1. 易获得全局上下文
例如
javascript
"use s"
const { parseDocument } = context.htmlparser2
const that = this
return {
name: '问题插件',
version: '0.0.1',
//首页
getHomeList: async function (page) {
console.log(that, '插件环境');
try {
const fs = require('react-native-fs')
console.log(fs, '插件环境----');
return []
} catch (error) {
console.log(error);
return []
}
},
//详情页
getDetailData: async function (id) {
// const res = await request.get(`/anime/${id}`)
return []
},
//播放地址
getPlayUrlData: async function (url) {
return []
},
//搜索
getSearchData: async function (keyWord) {
return []
},
};
这样内部执行就获得了上下文,易获取内部缓存隐私。
解决方案
使用严格模式,在读取代码后往头添加
ts
const useStrict = `"use strict"\n` + code;
这样解决通过require获取rnfs或者expo-file-system库进行本地写入,防止通过axios下载木马病毒后通过上面库写入本地app内。