上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
123下一页
返回列表 发新帖

脚本猫新API CAT_fileStorage 提案

[复制链接]
  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    294

    主题

    3905

    回帖

    3825

    积分

    管理员

    积分
    3825

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-12-15 20:38:32 | 显示全部楼层 | 阅读模式

    调用此 API,可以操控脚本同步配置的文件储存源,将会在设定目录下创建一个app目录供此 API 使用.

    API 定义如下

    /**
     * 操控脚本同步配置的文件储存源,将会在同步目录下创建一个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

    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
  • TA的每日心情
    慵懒
    19 小时前
  • 签到天数: 633 天

    [LV.9]以坛为家II

    30

    主题

    535

    回帖

    1408

    积分

    荣誉开发者

    积分
    1408

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2022-12-15 21:38:57 | 显示全部楼层
    蒸蒸日上!
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    862

    回帖

    1361

    积分

    荣誉开发者

    积分
    1361

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2022-12-15 22:14:47 | 显示全部楼层
    storageName共享目录不太好吧,万一有别的脚本碰瓷,容易造成安全问题(比如A脚本下载js执行,B脚本上传恶意js,排查可能会认为是A脚本的问题)。我觉得共享value已经是最低限度,共享文件还是太激进了,如果真有必要,脚本面板那里一定要加醒目的提示(此文件目录被以下脚本共享使用:XXX)。
    回复

    使用道具 举报

  • TA的每日心情

    2023-10-19 09:35
  • 签到天数: 66 天

    [LV.6]常住居民II

    6

    主题

    126

    回帖

    219

    积分

    高级工程师

    积分
    219

    油中2周年生态建设者

    发表于 2022-12-16 09:09:26 | 显示全部楼层
    cxxjackie 发表于 2022-12-15 22:14
    storageName共享目录不太好吧,万一有别的脚本碰瓷,容易造成安全问题(比如A脚本下载js执行,B脚本上传恶 ...

    加入Hash校验?
    主要是怕保存重要数据会被恶意读取
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    294

    主题

    3905

    回帖

    3825

    积分

    管理员

    积分
    3825

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-12-16 09:35:55 | 显示全部楼层
    极品小猫 发表于 2022-12-16 09:09
    加入Hash校验?
    主要是怕保存重要数据会被恶意读取

    咋hash校验,这个应该得脚本自己处理了
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    294

    主题

    3905

    回帖

    3825

    积分

    管理员

    积分
    3825

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-12-16 09:50:55 | 显示全部楼层
    cxxjackie 发表于 2022-12-15 22:14
    storageName共享目录不太好吧,万一有别的脚本碰瓷,容易造成安全问题(比如A脚本下载js执行,B脚本上传恶 ...

    确实有点激进,但是如果确实有共享目录的需求才会使用@storageName特性吧

    不过value那里已经放开了,这里我觉得也可以,脚本从value读js执行也是一样的

    另外就是,确实是要做一下醒目的提示,然后文件的上传下载做一些日志方便审计

    而且这种恶意脚本都装下来了,这样去干了,为什么不直接点,自己去做恶意js的事情。

    后续也考虑在设置中对上传的内容做一些限制,例如后缀/大小之类,或者默认禁止共享,得用户手动开启。安全这块脚本猫、脚本站做得确实还不太够
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    19 小时前
  • 签到天数: 633 天

    [LV.9]以坛为家II

    30

    主题

    535

    回帖

    1408

    积分

    荣誉开发者

    积分
    1408

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2022-12-16 11:00:40 | 显示全部楼层
    王一之 发表于 2022-12-16 09:50
    确实有点激进,但是如果确实有共享目录的需求才会使用@storageName特性吧

    不过value那里已经放开了,这 ...

    话说哥哥value那边是怎么个放开法?
    之前试了半天 沙盒环境禁止操作IndexedDB……没法通过脚本读写其他脚本的GM_get/setValue
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-3-13 10:14
  • 签到天数: 211 天

    [LV.7]常住居民III

    294

    主题

    3905

    回帖

    3825

    积分

    管理员

    积分
    3825

    管理员荣誉开发者油中2周年生态建设者喜迎中秋油中3周年挑战者 lv2

    发表于 2022-12-16 11:11:27 | 显示全部楼层
    steven026 发表于 2022-12-16 11:00
    话说哥哥value那边是怎么个放开法?
    之前试了半天 沙盒环境禁止操作IndexedDB……没法通过脚本读写其他脚 ...

    同@storageName的get/set/deleteValue是共享的呀

    描述文档 | ScriptCat

    API 文档 | ScriptCat
    上不慕古,下不肖俗。为疏为懒,不敢为狂。为拙为愚,不敢为恶。/ 微信公众号:一之哥哥
    回复

    使用道具 举报

  • TA的每日心情

    2023-10-19 09:35
  • 签到天数: 66 天

    [LV.6]常住居民II

    6

    主题

    126

    回帖

    219

    积分

    高级工程师

    积分
    219

    油中2周年生态建设者

    发表于 2022-12-16 11:20:34 | 显示全部楼层
    王一之 发表于 2022-12-16 09:35
    咋hash校验,这个应该得脚本自己处理了

    就是由API去算文件的Hash并记录,不匹配的时候进行拒绝并警告
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    19 小时前
  • 签到天数: 633 天

    [LV.9]以坛为家II

    30

    主题

    535

    回帖

    1408

    积分

    荣誉开发者

    积分
    1408

    荣誉开发者新人进步奖油中2周年生态建设者新人报道挑战者 lv2油中3周年喜迎中秋

    发表于 2022-12-16 11:33:12 | 显示全部楼层
    王一之 发表于 2022-12-16 11:11
    同@storageName的get/set/deleteValue是共享的呀

    描述文档 | ScriptCat

    0.0
    油猴好像不共享
    共享感觉的确会有安全问题 我之前自动登录账号密码都是存在Value里面的
    这样别的脚本和我用同一个storageName不是能随便读了?
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表