基于WebAssembly和QuickJS建设新一代Web开放容器
基于WebAssembly + QuickJS保障 JS 执行的隔离和可控
- QuickJS-debug: 官方QuickJS还不支持调试能力,但是有开源的类似库
- WebAssembly 目前还不支持协同能力,需要基于 unwind & rewind 机制释放和恢复调用栈
基于Shadow DOM + iframe 做到样式隔离
基于 CSP 解决内容安全访问
浅谈大环境下的前端代码加固
黑产攻击方式
- 模拟器破解
- 接口破解
预防方式
- 环境检测
- 模拟器特征检测
- 方法hook检测
- 设备指纹收集
- debug行为检测
- 协议加密
- 数据加密
- 设置蜜罐:在参数中设置陷阱,对非正常用户进行标记
- 环境检测
代码加固是阻挡黑产的第一道墙
代码加固的方式
JS混淆(工具多,使用方便,易破解)
控制流打乱
- 利用switch…case…改变代码由上至下的执行顺序
- 利用循环引用的 随机长度 随机偏移量 的数组进行控制流顺序的匹配
- 在多余的case中增加废代码,控制文件体积的同时 增加代码阅读难度
实际应用中常用babel将代码转化为AST(抽象语法树),在不影响输出结果的情况下,改变树结构,实现混淆。
源码—–》(解析 @babel/parser)原始AST——》(转换 @babel/traverse) 修改后的AST——》(生成 @babel/generator)修改后的代码
转换分类:变量名混淆,关键字隐藏,控制流平坦化,花指令…..
- jsvmp(破解难度大,性能差,只适合保护核心逻辑)
- WebAssembly(性能好,兼容性较差,适用场景较少)
西瓜视频让视障人群也能看电影
处理方式:
- Accessibility Service
- 是系统提供,用于帮助残障人士使用Android设备
- 添加描述标签
- 在XML中添加contentDescription属性
- 请勿为EditText添加contentDescription,TalkBack会自动读出文字本身
- 利用android: labelFor表明互相关系
常见问题:
焦点丢失:读屏软件无法发现该元素,导致功能无法使用
- 设置android: focusable与android: focusablelnTouchMode属性解决
焦点冗余:界面中有不显示的冗余焦点,例如:分隔符、背景图片等
- 设置android: importantForAccessibility属性解决
焦点顺序:读屏软件遍历焦点时,按照从左到右,从上往下
- 通过android: nextFocusDown | Left | Right | Up等定义用户按不同导航顺序遍历时的下一个要素
- 也可以使用setNextFocusDownId等方法
字节基于开源的FastBot集成了无障碍扫描规则,提供单页面检测能力,并可以自定义规则,有效提高了发现问题的效率。