添加静态文件 授信host 功能 防止XSS#747
Conversation
klboke
left a comment
There was a problem hiding this comment.
发现 2 个会直接影响现有预览能力的 blocker:
-
online3D现在只把“单个 Blob 文件”喂给 viewer,导致依赖伴随资源的多文件格式回归。原实现是把website/index.html#model=...交给内置 hash loader 处理,viewer 自己支持 URL 列表和依赖文件(server/src/main/resources/web/online3D.ftl:22-31;server/src/main/resources/static/website/build/website_dev/o3dv.website.min.js:9487-9488, 10198, 10371-10381)。这个 PR 改成了先fetch一个modelUrl,再构造单个File触发<input type=file>流程(server/src/main/resources/web/online3D.ftl:90-133)。这样像.obj + .mtl + texture这类依赖同目录附属文件的预览就没有依赖文件上下文了;仓库自带的 3D viewer 示例本身都把obj当成多 URL 场景处理(server/src/main/resources/static/website/index.html里的#model=assets/models/solids.obj,assets/models/solids.mtl)。也就是说,这个改动会把现有一类 3D 预览直接打坏。 -
drawio的编辑/新窗口路径现在会打开错误的文件来源。drawio.ftl仍然显式传了edit=_blank,所以预览页工具栏上的 edit/open 路径还在(server/src/main/resources/web/drawio.ftl:47-61)。但这个 PR 把 vendor bundle 里的Editor.prototype.editAsNew改成了固定写入file=<currentDomain>,而不是当前图文件 URL(server/src/main/resources/static/drawio/js/app.min.js:2467-2468)。同一个 bundle 里 chromeless toolbar 的 edit 按钮会直接走editAsNew(...)(server/src/main/resources/static/drawio/js/app.min.js:2578-2581)。结果就是用户从预览页点“编辑/新窗口”时,draw.io 会重新对着站点根域名打开,而不是当前 diagram 文件,这条现有交互会失效。
这两个问题都属于合并前需要先修掉的回归。
已经修复了 |
klboke
left a comment
There was a problem hiding this comment.
继续跟进了 4/16 新增的两个提交,之前的 blocker 还不能关闭,当前仍建议保持 changes requested。
-
drawio.ftl现在把 iframe hash 写死成了#Uhttp://127.0.0.1/1.drawio(当前 PR 的server/src/main/resources/web/drawio.ftl:61)。这样初始预览加载的不是当前fileUrl,而是固定的本地测试地址;新增的file=参数只被后续editAsNew逻辑读取,不能替代 draw.io viewer 初始打开文件所用的#U...。这里应该恢复为基于当前文件地址构造 hash,例如原来的#U+encodeURIComponent(url)这一类逻辑,否则普通 drawio 预览会直接打开错文件。 -
online3D仍然没有沿用 3D viewer 已有的 hash/URL-list 加载入口。当前 PR 改成自写fetch -> File -> input change流程,并尝试调用OV.Website.ImportFiles/LoadFiles、OV.ViewerManager.getViewer()(server/src/main/resources/web/online3D.ftl:201-229),但现有o3dv.website.min.js对外导出的只有Engine、RegisterHeaderPlugin、RegisterToolbarPlugin、SetWebsiteEventHandler、StartEmbed、StartWebsite、UI,并没有OV.Website或OV.ViewerManager这类 API。bundle 内部本来已经有GetModelFilesFromHash/SetModelFilesToHash/LoadModelFromUrlList,原实现走website/index.html#model=...正是交给这条路径处理。现在这套重写绕开了 viewer 的原生 URL-list loader,依赖程序化 file input fallback,风险仍然落在多 URL / OBJ+MTL / texture 这类场景上。
合并前建议先把 drawio 的固定测试 URL 去掉;3D 预览则尽量保留或复用 viewer 的 #model=url1,url2/LoadModelFromUrlList 路径,并补一个实际远程 OBJ+MTL 的烟测,证明多资源附件不是靠手工列几个 URL 才偶然能跑。
No description provided.