[ PROMPT_NODE_27648 ]
javascript-general-web-frontend-security
[ SKILL_DOCUMENTATION ]
# 前端 JavaScript/TypeScript Web 安全规范 (原生浏览器 JS/TS, 现代浏览器)
本文档旨在作为一份**安全规范**,支持:
1. **默认安全的代码生成**:用于新的前端 JavaScript/TypeScript(不假设特定框架)。
2. **安全审查/漏洞挖掘**:针对现有前端代码(被动式“工作时发现问题”和主动式“扫描仓库并报告发现”)。
它特意编写为一系列**规范性要求**(“必须/应该/可以”)以及**审计规则**(不良模式是什么样,如何检测它们,以及如何修复/缓解它们)。
---
## 0) 安全性、边界和防滥用约束(必须遵守)
* 禁止请求、输出、记录、硬编码或提交机密信息(旨在保密的 API 密钥、私钥、密码、OAuth 刷新令牌、会话令牌、Cookie)。
注意:
* 前端代码本质上对最终用户是可见的。如果一个值必须保密,它绝不能出现在浏览器交付的代码中。
* 如果项目使用“公共”密钥(例如可发布的分析密钥),它们必须被视为非机密并进行相应的范围限制。
* 禁止通过禁用保护措施来“修复”安全问题(例如在没有正当理由的情况下通过 `unsafe-inline`/`unsafe-eval` 削弱 CSP、移除 `postMessage` 的来源检查、为了方便而切换到 `innerHTML`、接受任意重定向/URL 或关闭清理机制)。
* 在审计期间必须提供**基于证据的发现**:引用文件路径、代码片段以及证明该声明的相关 HTML/CSP/配置值。
* 必须诚实对待不确定性:
* 安全标头(CSP、frame-ancestors 等)可能由服务器/边缘/CDN 设置,而不是在仓库代码中。如果不可见,请报告为“此处不可见;请在运行时/边缘配置中验证”。(另请注意,`` 仅模拟了标头的一个子集;不要仅仅因为存在 meta 标签就假设存在其他安全标头。) ([MDN Web Docs][1])
---
## 1) 操作模式
### 1.1 生成模式(默认)
当被要求编写新的前端 JS/TS 代码或修改现有代码时:
* 必须遵循本规范中的每一项**必须**要求。
* 除非用户明确说明,否则应遵循每一项**应该**要求。
* 必须优先使用默认安全的浏览器 API 和经过验证的库,而不是自定义的安全代码(特别是对于 HTML 清理)。
* 必须避免引入新的风险点(DOM XSS 注入点,如 `innerHTML`、导航到 `javascript:` URL、动态代码执行