一、代码层面的安全验证
1. 审查代码中的安全风险
-
XSS 漏洞:
-
检测点:
- 检查是否直接使用
innerHTML或document.write()插入未过滤的用户输入。 - 验证是否对用户输入进行转义(如使用
DOMPurify或textContent)。
- 检查是否直接使用
-
示例:
// 危险写法 element.innerHTML = userInput; // 安全写法 element.textContent = userInput;
-
检测点:
-
不安全的第三方库:
-
工具:
-
安全审计指令:
npm audit/yarn audit:扫描项目依赖中的已知漏洞。 -
Snyk/Dependabot:自动监控并修复依赖漏洞。
-
安全审计指令:
-
工具:
2. 验证 CSP(内容安全策略)配置
-
检查点:
- 是否禁用
'unsafe-inline'和'unsafe-eval'? - 是否通过
nonce或hash签名允许必要的内联脚本?
- 是否禁用
-
工具:
- 浏览器控制台查看 CSP 违规报告。
- 在线工具:CSP Evaluator 分析策略强度。
二、工具自动化检测
1. 使用浏览器开发者工具
-
Network 面板:
- 检查敏感数据(如 API 密钥、Token)是否通过 URL 或请求头泄露。
- 验证 HTTPS 是否强制启用(无混合内容警告)。
-
Security 面板:
- 查看证书有效性、TLS 版本和加密套件。
- 检测跨域资源加载是否安全(如 CORS 配置)。
2. 安全扫描工具
-
Lighthouse(集成于 Chrome DevTools):
- 检测 HTTPS 配置、安全头(如 CSP、HSTS)、被动混合内容。
-
OWASP ZAP / Burp Suite:
- 自动化扫描 XSS、CSRF、CORS 配置错误等漏洞。
-
WebPageTest:
- 检查资源加载安全性和 HTTPS 合规性。
三、手动测试常见攻击场景
1. 验证点击劫持(Clickjacking)防御
-
测试步骤:
- 尝试将页面嵌入到
<iframe>中:<iframe src="https://your-site.com"></iframe> -
检查是否触发
X-Frame-Options: DENY或 CSP 的frame-ancestors策略。 - 使用工具如 Clickjacking Test Tool 模拟攻击。
- 尝试将页面嵌入到
2. CSRF 漏洞验证
-
测试步骤:
- 构造一个伪造的 POST 请求表单(无 CSRF Token):
<form action="https://your-site.com/transfer" method="POST"> <input type="hidden" name="amount" value="1000"> </form> - 提交表单,检查服务端是否返回
403 Forbidden。
- 构造一个伪造的 POST 请求表单(无 CSRF Token):
3. 敏感信息泄露检查
-
测试点:
- 前端代码中是否硬编码 API 密钥、数据库密码?
- 错误页面是否暴露堆栈信息或服务器版本?
-
工具:
- 使用
grep或代码编辑器全局搜索敏感关键词(如password、secret)。
- 使用
四、安全头与网络配置验证
1. 检查关键 HTTP 响应头
-
必需头:
-
Content-Security-Policy:限制资源加载来源。 -
Strict-Transport-Security (HSTS):强制 HTTPS。 -
X-Content-Type-Options: nosniff:禁止 MIME 类型嗅探。 -
X-Frame-Options: DENY:防御点击劫持。 -
Referrer-Policy:控制 Referrer 信息泄露。
-
-
验证工具:
- SecurityHeaders.com 在线检测响应头配置。
2. 验证 HTTPS 配置
-
检查点:
- 是否全站强制 HTTPS(无 HTTP 回退)?
- 证书是否有效且未过期?
- 是否禁用弱加密算法(如 TLS 1.0、SSLv3)?
-
工具:
- SSL Labs 测试服务器 SSL/TLS 配置评分。
五、用户输入与数据处理验证
1. 表单与输入过滤
-
测试步骤:
- 在输入框尝试注入脚本:
<script>alert(1)</script>。 - 提交后检查页面是否弹窗或脚本执行。
- 在输入框尝试注入脚本:
-
防御验证:
- 输入内容是否被转义(如
<转为<)? -
富文本编辑器是否使用白名单过滤(如
DOMPurify)?
- 输入内容是否被转义(如
2. 文件上传漏洞检测
-
测试步骤:
- 上传一个伪装成图片的 PHP 文件(如
shell.php.jpg)。 - 检查服务器是否仅按文件内容(而非扩展名)校验类型。
- 上传一个伪装成图片的 PHP 文件(如
-
工具:
- 使用
ExifTool验证文件真实类型。
- 使用
六、第三方资源与依赖审计
1. 检查第三方脚本安全性
-
验证点:
- 加载的 CDN 资源是否使用
integrity属性(SRI):<script src="https://cdn.example.com/jquery.js" integrity="sha384-xxxxx"></script> - 是否监控第三方服务的可用性和安全性(如 Google Analytics 被篡改)?
- 加载的 CDN 资源是否使用
2. 验证 Cookie 安全属性
-
检查点:
- 敏感 Cookie 是否标记为
Secure、HttpOnly和SameSite=Lax?
- 敏感 Cookie 是否标记为
-
工具:
- 浏览器开发者工具 → Application → Cookies 查看属性。
七、持续监控与报告
-
集成安全测试到 CI/CD
- 使用
npm audit、Lighthouse CI在构建流程中自动检测漏洞。
- 使用
-
日志与报警
- 监控 CSP 违规报告(通过
report-uri或report-to)。 - 使用 Sentry 或 Datadog 捕获前端错误中的安全异常。
- 监控 CSP 违规报告(通过
总结:前端安全验证清单
| 类别 | 关键检查项 | 工具/方法 |
|---|---|---|
| 代码安全 | XSS、CSRF、敏感数据硬编码 | ESLint、人工审查、Snyk |
| 网络与协议 | HTTPS 配置、安全头、CSP | SSL Labs、SecurityHeaders.com |
| 用户输入 | 表单注入、文件上传校验 | 手动测试、OWASP ZAP |
| 第三方依赖 | 漏洞库版本、SRI 校验 | npm audit、浏览器开发者工具 |
| 持续监控 | CI/CD 集成、CSP 违规报告 | Lighthouse CI、Sentry |
通过以上方法,前端工程师可以系统性验证和加固网站安全性,结合自动化和手动测试,确保用户数据和业务逻辑的可靠性