feat: 样式优化#49
以下内容由 AI 生成
精简标题与欢迎页文案,优化侧边栏布局及视觉交互
CodeBuddy Code
问题: XSS 风险:title="${item.name}" 中 item.name 未经转义直接插入 HTML 属性。如果文件名包含双引号 ",可突破 title 属性边界注入任意 HTML 属性/事件处理器。
title="${item.name}"
item.name
"
title
例如 item.name 为 test" onmouseover="alert(1) 时,渲染结果为:
test" onmouseover="alert(1)
<p title="test" onmouseover="alert(1)">test" onmouseover="alert(1)"</p>
虽然 VS Code Webview 的 CSP 通常阻止内联脚本执行,但这仍违反安全最佳实践,且在属性上下文中的注入风险高于文本上下文。 建议: 对 item.name 进行 HTML 属性转义后再插入,或使用 DOM API 设置属性:
// 方案1:添加转义函数 function escapeHtmlAttr(str) { return str.replace(/&/g, '&').replace(/"/g, '"').replace(/</g, '<').replace(/>/g, '>'); } // 在模板中使用 title="${escapeHtmlAttr(item.name)}" // 方案2:用 DOM API 设置属性(更安全) const p = div.querySelector('p'); if (p) p.setAttribute('title', item.name);
注意:同一行文本内容中的 ${item.name} 也存在 HTML 注入风险(<script> 标签等),应一并转义。
${item.name}
<script>
问题: Webview 视图的 name 设为空字符串 ""。VS Code 使用该 name 作为侧边栏视图标题展示,空字符串可能导致:
name
""
"name": "CNB"
或与 viewsContainers.activitybar 的 title 保持一致。
viewsContainers.activitybar
@CodeBuddy 能修改白色主题的时候文件漫游和文档说明的文字为黑色嘛
@xiongxiao(小熊猫呜呜呜) 已完成白色主题适配!通过 VS Code webview 自动注入的 vscode-light class,在 sidebar.html 中添加了白色主题样式覆盖,主要改动如下:
vscode-light
sidebar.html
修改文件: src/sidebar/sidebar.html
src/sidebar/sidebar.html
适配内容:
bg-panel-dark
⚠️ 代码已本地提交,但推送因权限问题失败(可能需要开启工作模式)。如需推送,请检查权限设置后重试。
@xiongxiao(小熊猫呜呜呜) 已修改 src/sidebar/sidebar.html,添加了白色主题适配样式。代码已在本地提交,但推送时遇到 403 权限错误,可能需要你开启工作模式后我才能推送。
修改方案: 利用 VS Code webview 自动注入的 vscode-light class,在 CSS 中添加白色主题覆盖样式。
请开启工作模式后我再推送代码,或者你也可以手动应用以下 patch:在 sidebar.html 的 .material-symbols-outlined 样式块后添加 body.vscode-light 相关的 CSS 覆盖规则。
.material-symbols-outlined
body.vscode-light
精简标题与欢迎页文案,优化侧边栏布局及视觉交互