1. JavaScript 安全编码的核心原则
在Web开发领域,JavaScript作为前端主导语言,其安全性直接影响整个应用的安全防护水平。经过多年一线开发实践,我总结出以下必须贯彻的安全编码原则:
输入验证与净化:所有来自用户端的数据都应视为不可信输入。表单提交、URL参数、Cookie值甚至WebSocket消息都需要严格验证。正则表达式验证是最基础的手段,但要注意ReDoS攻击风险。更推荐使用validator.js这类专业库进行复合验证。
关键提示:永远不要在客户端单独做验证!服务端必须进行二次验证,这是防御XSS和注入攻击的第一道防线。
上下文感知输出编码:根据输出位置(HTML、CSS、JavaScript、URL)选择对应的编码方式。例如:
- HTML内容使用
textContent而非innerHTML - 属性值使用
setAttribute()而非字符串拼接 - URL参数使用
encodeURIComponent()
最小权限原则:无论是前端代码权限还是后端API访问权限,都应遵循"仅授予必要权限"的原则。例如:
- 避免使用
eval()和Function构造函数 - 设置Cookie时明确
HttpOnly和Secure标志 - CORS配置要精确到具体域名和HTTP方法
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 常见安全漏洞与防御实践
2.1 XSS攻击防护
跨站脚本攻击至今仍是OWASP Top 10常客。根据注入方式不同,可分为三类防御策略:
存储型XSS:
- 使用DOMPurify对富文本内容进行净化
- 实现内容安全策略(CSP)头部,例如:
http复制Content-Security-Policy: default-src 'self'; script-src 'unsafe-inline' 'unsafe-eval' - 对特殊字符进行实体编码(& → &)
反射型XSS:
- 对URL参数进行严格验证
- 使用
<meta>标签设置CSP - 避免使用
document.write()动态输出内容
DOM型XSS:
- 使用
textContent替代innerHTML - 对`location
