mirror of
https://github.com/jnMetaCode/superpowers-zh.git
synced 2026-09-03 07:23:56 +08:00
安全审核发现两处防御纵深缺口(当前内容可信、非活跃漏洞,但公开站应补齐):
1. 部署站 _headers 此前只有 Cache-Control,缺所有安全响应头。
现新增全站 /* 头:
- Content-Security-Policy:default-src 'self';script-src 'self' + 本站
内联脚本的 SHA-256 hash(构建时从生成 HTML 实测,禁用 unsafe-inline/
unsafe-eval 又不误伤自有脚本);style-src 'self';object-src 'none';
base-uri 'self';frame-ancestors 'none';form-action 'self'
- X-Content-Type-Options: nosniff / X-Frame-Options: DENY /
Referrer-Policy: no-referrer / Cross-Origin-Opener-Policy: same-origin /
Permissions-Policy(关闭定位/麦克风/摄像头)
2. md.mjs 链接渲染未校验 scheme。现仅放行 http/https/mailto/锚点/相对
路径,阻断 javascript:/data:/vbscript: 等可执行 scheme,并转义引号防
属性逃逸。
验证:重建 42 页成功;独立核验全站 84 处内联脚本的 hash 全部命中 CSP
白名单(0 缺失 → CSP 不会打断站点);链接净化单测 5/5(正常/锚点/相对
保留,javascript:/data: 中和为 #);站点正常外链完好。外部资源仅 <a>
导航链接,不受 default-src 影响。
157 lines
5.2 KiB
JavaScript
157 lines
5.2 KiB
JavaScript
// 零依赖 Markdown → HTML 渲染器,够用于本项目的 SKILL.md。
|
||
// 支持:ATX 标题、代码围栏、表格、有/无序列表(含嵌套)、引用、分隔线、
|
||
// 行内 code/bold/italic/link,原生 HTML 行透传。
|
||
|
||
function escapeHtml(s) {
|
||
return s.replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>');
|
||
}
|
||
|
||
// 行内:先保护代码片段,再处理粗体/斜体/链接
|
||
function inline(text) {
|
||
const codes = [];
|
||
// 行内代码 `...`
|
||
text = text.replace(/`([^`]+)`/g, (_, c) => {
|
||
codes.push('<code>' + escapeHtml(c) + '</code>');
|
||
return ' |