赞
踩
1.9.2有漏洞,mock会被入侵,而原本的集合测试中使用了assert断言。
网上所有的方案全是
在镜像中启动服务报错:Error: EROFS: read-only file system, mkdir '/sys/fs/cgroup/cpu/safeify'
这是safeify为了限定CPU资源使用,需要在此路径下写入文件,但是在镜像中此路径为只读路径,在 new Safeify对象时设置unrestricted: true,即可。
断言功能不可用,assert.equal is not a function
safeify对于执行脚本中库的引入方式与之前不同,需要通过unsafe来实现,具体可以看上面的sandbox.js的实现。
我用docker-compose的方式部署,看得是一头雾水
最后找到了文件所在位置
docker-compose exec yapi bash
进入 cd /home/vendors/server/utils
vim sandbox.js进行更改即可
镜像中没有yum没有vim,我们用apt安装
apt-get install vim,
出现Unable to locate package vim是apt过旧没有vim相关的包,进行包管理工具更新
apt-get update
重新输入
apt-get install vim 进行安装
- const Safeify = require('safeify').default;
-
- module.exports = async function sandboxFn(context, script) {
- // 创建 safeify 实例
- const safeVm = new Safeify({
- timeout: 3000,
- asyncTimeout: 60000,
- // cpuQuota: 0.5,
- // true为不受CPU限制,解决safeify只读问题
- unrestricted: true,
- //引入assert,解决assert.equal not a function 问题
- unsafe: {
- modules: {
- assert: 'assert'
- }
- }
- });
-
- safeVm.preset('const assert = require("assert");');
-
- script += "; return this;";
- const result = await safeVm.run(script, context);
-
- safeVm.destroy();
- return result
- };
改完之后出现Request failed with status code 504
查看日志发现了另外的报错。对应的github issue 暂时还没解决
https://github.com/YMFE/yapi/issues/2543https://github.com/YMFE/yapi/issues/2543
UnhandledPromiseRejectionWarning: TypeError: Converting circular structure to JSON
查看源码定位到应该是测试集合循环后的一个问题,前端同事看了源码之后,试着将sandbox.js 的return this移除后,该报错解决了。虽然这个报错解决了,但是还有另外的报错。
最后是回滚回原来的版本。做一些安全策略的限制。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。