yapi - 安全漏洞补救及遇到的问题汇总

Yapi 是比较好用的接口管理平台,之前写过一篇关于搭建过程的文章。

YApi - 通过docker搭建接口管理平台

本篇文章,记录下使用过程中遇到的问题。

YAPI 安全漏洞解决方法#

Yapi 使用的脚本执行沙箱存在安全漏洞问题,需要更换为更安全的沙箱 safeify。详情参考 yapi 安全漏洞详解

也可以一并解决,断言脚本报错问题:Error: assert.equal is not a function

// sandbox.js 脚本需要更新如下
const Safeify = require('safeify').default;
 
module.exports = async function sandboxFn(context, script) {
    // 创建 safeify 实例
    const safeVm = new Safeify({
        timeout: 3000,
        asyncTimeout: 60000,
        // quantity: 4,          //沙箱进程数量,默认同 CPU 核数
        // memoryQuota: 500,     //沙箱最大能使用的内存(单位 m),默认 500m
        // cpuQuota: 0.5,
        // true 表示不受 CPU 限制,解决 Docker 启动问题
        unrestricted: true,
        unsafe: {
            modules: {
              // 引入assert断言库
                assert: 'assert'
            }
        }
    });
 
    safeVm.preset('const assert = require("assert");');
    
    script += "; return this;";
    // 执行动态代码
    const result = await safeVm.run(script, context);
 
    // 释放资源
    safeVm.destroy();
    return result
};

操作步骤

# rz 命令将 sandbox.js 传入服务器
$ rz -be
# 服务器上执行 cp 命令,覆盖原文件
$ docker cp sandbox.js yapi:/yapi/vendors/server/utils/sandbox.js
$ docker restart yapi 

单个接口调试的请求参数怎么看?#

根据提示文档安装 cross-request,开发者栏 network 处查看跨域请求。

console.log() 方法输出的日志去哪里看?#

在脚本运行界面,F12 调出开发者选项,点击 console 栏查看。

如何抽象出公共参数?#

将公共参数写到 Pre-request Script(请求参数处理脚本) 内,这样也可以实现从接口响应内获取到内容作为其他请求的参数。

// Pre-request Script
// 从响应内去动态获取 session_id
let session_id =  localStorage.getItem('session_id');
context.query['session_id'] = session_id; 
console.log("当前 session_id 为:" + session_id);

// 这里可以添加公共参数
context.query['os'] = "android";


// Pre-response Script
if(context.responseData['session_id'] !== undefined) {
    let session_id = context.responseData['session_id'];
    console.log("获取到session_id:"+session_id);
    localStorage.setItem('session_id', session_id);
} /*else {
    console.log("当前响应内没有找到 session_id.");
}
*/

页面UI调整#

body 示例参数框内容稍长就会折行展示,备注框太长,导致页面整体拉长,不美观。

打开开发者选项调试页面,定位到表格处,发现该处引用了 word-break 属性,取消勾选后查看效果,比较满意。

word-break:在恰当的断字点进行换行

image-20210831101848946

找到问题就好办了,登录容器内,找到该文件,注释掉这个属性即可。

$ docker exec -it yapi sh
$ find / -name *.css | grep index@dc0427a58a38aab0505d.css
$ vi /yapi/vendors/static/prd/index@dc0427a58a38aab0505d.css
# vi 模式内通过 /.ant-table-thead>tr>th{padding:16px 10px; 搜索关键字
# 注释掉 ant-table-thead 的自动换行属性
.ant-table-thead>tr>th{padding:16px 10px;/*word-break:break-all;*/}

# 修改后刷新页面并不能直接生效
# 原因是当前目录下还存在 index@dc0427a58a38aab0505d.css.gz 压缩文件
# 修改名字作为备份
$ mv index@dc0427a58a38aab0505d.css index@dc0427a58a38aab0505d.css_bak
# 刷新页面,修改生效
# 重新压缩文件 -v 显示命令执行过程 -k 保留原文件
$ gzip -vk index@dc0427a58a38aab0505d.css

image-20210831112349198

References#

[1] yapi 安全漏洞详解: https://blog.csdn.net/meifannao789456/article/details/119551053
[2] word-break: https://www.w3school.com.cn/cssref/pr_word-break.asp

作者:ABEELAN

出处:https://www.cnblogs.com/abeelan/p/17203168.html

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   ABEELAN  阅读(429)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示