脚本猫新API CAT_fileStorage 提案
调用此 API,可以操控`脚本同步`配置的文件储存源,将会在设定目录下创建一个`app`目录供此 API 使用.API 定义如下
```js
/**
* 操控脚本同步配置的文件储存源,将会在同步目录下创建一个app/(uuid或者storageName)目录供此 API 使用
* 当声明了@storageName时,将会将文件上传至指定的@storageName目录,多个脚本也可用此声明公用一个文件夹
* 上传时默认覆盖同名文件
* @param action 操作类型 list 列出指定目录所有文件, upload 上传文件, download 下载文件, delete 删除文件
*/
declare function CAT_fileStorage(
action: "list",
details: {
path?: string;
onload?: (files: CATType.FileStorageFileInfo[]) => void;
onerror?: (error: FileStorageError) => void;
}
): void;
declare function CAT_fileStorage(
action: "download",
details: {
filename: string;
onload: (data: Blob) => void;
onprogress?: (progress: number) => void;
onerror?: (error: FileStorageError) => void;
}
): void;
declare function CAT_fileStorage(
action: "delete",
details: {
filename: string;
onload?: () => void;
onerror?: (error: FileStorageError) => void;
}
): void;
declare function CAT_fileStorage(
action: "upload",
details: {
filename: string;
data: Blob;
onload?: () => void;
onprogress?: (progress: number) => void;
onerror?: (error: FileStorageError) => void;
}
): void;
interface FileStorageError {
// 错误码 1 用户未配置文件储存源 2 文件储存源配置错误 3 路径不存在
// 4 文件不存在 5 文件已存在 6 上传失败 7 下载失败 8 删除失败
code: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;
msg: string;
}
interface FileStorageFileInfo {
path: string;
name: string;
size: number;
isDir: boolean;
}
```
经讨论有以下问题:
### storageName共享
直接的使用@stroageName来指定公共的储存空间容易产生恶意脚本篡改的问题,经哥哥们这么一说,觉得value的@storageName也得加上一些限制。
#### 解决方案
文件这里可以和哥哥们说的一样提供两个储存空间,一个私有的储存空间和公有的储存空间,在操作时通过一个参数指定是将文件储存在私有的还是公有的。
如果是公有的那么将会和GM_xhr一样弹出一个窗口需要用户确认。
初版先只实现私有的吧,公有的再斟酌斟酌
安全问题确实考虑得少,此次发布API提案进行讨论感觉效果不错,帮我考虑到了很多问题,以后如果有新特性加入,也会发布提案。
github issue:
https://github.com/scriptscat/scriptcat/issues/127
蒸蒸日上! storageName共享目录不太好吧,万一有别的脚本碰瓷,容易造成安全问题(比如A脚本下载js执行,B脚本上传恶意js,排查可能会认为是A脚本的问题)。我觉得共享value已经是最低限度,共享文件还是太激进了,如果真有必要,脚本面板那里一定要加醒目的提示(此文件目录被以下脚本共享使用:XXX)。 cxxjackie 发表于 2022-12-15 22:14
storageName共享目录不太好吧,万一有别的脚本碰瓷,容易造成安全问题(比如A脚本下载js执行,B脚本上传恶 ...
加入Hash校验?
主要是怕保存重要数据会被恶意读取 极品小猫 发表于 2022-12-16 09:09
加入Hash校验?
主要是怕保存重要数据会被恶意读取
咋hash校验,这个应该得脚本自己处理了 cxxjackie 发表于 2022-12-15 22:14
storageName共享目录不太好吧,万一有别的脚本碰瓷,容易造成安全问题(比如A脚本下载js执行,B脚本上传恶 ...
确实有点激进,但是如果确实有共享目录的需求才会使用@storageName特性吧
不过value那里已经放开了,这里我觉得也可以,脚本从value读js执行也是一样的
另外就是,确实是要做一下醒目的提示,然后文件的上传下载做一些日志方便审计
而且这种恶意脚本都装下来了,这样去干了,为什么不直接点,自己去做恶意js的事情。
后续也考虑在设置中对上传的内容做一些限制,例如后缀/大小之类,或者默认禁止共享,得用户手动开启。安全这块脚本猫、脚本站做得确实还不太够 王一之 发表于 2022-12-16 09:50
确实有点激进,但是如果确实有共享目录的需求才会使用@storageName特性吧
不过value那里已经放开了,这 ...
话说哥哥value那边是怎么个放开法?
之前试了半天 沙盒环境禁止操作IndexedDB……没法通过脚本读写其他脚本的GM_get/setValue steven026 发表于 2022-12-16 11:00
话说哥哥value那边是怎么个放开法?
之前试了半天 沙盒环境禁止操作IndexedDB……没法通过脚本读写其他脚 ...
同@storageName的get/set/deleteValue是共享的呀
描述文档 | ScriptCat
API 文档 | ScriptCat
王一之 发表于 2022-12-16 09:35
咋hash校验,这个应该得脚本自己处理了
就是由API去算文件的Hash并记录,不匹配的时候进行拒绝并警告 王一之 发表于 2022-12-16 11:11
同@storageName的get/set/deleteValue是共享的呀
描述文档 | ScriptCat
0.0
油猴好像不共享
共享感觉的确会有安全问题 我之前自动登录账号密码都是存在Value里面的
这样别的脚本和我用同一个storageName不是能随便读了?