🎯 学习目标
通过本文,你将深入理解密码安全存储的原理和防护策略。
- 密码哈希的攻击原理和防护
- 盐值的安全实践和最佳做法
- bcrypt的安全配置和监控 预计学习时间:8小时
💡 核心概念详解
密码安全存储是Web安全中的重要话题,理解攻击原理是防护的基础。
基础防护
// 密码安全存储基础示例 - 输入验证
function sanitizeInput(input) {
// 移除HTML标签
return input.replace(/<[^>]*>/g, '');
}
// 使用示例
const userInput = '<script>alert("XSS")</script>';
const safeInput = sanitizeInput(userInput);
console.log(safeInput); // Output: alert("XSS")
进阶防护
// 密码安全存储进阶示例 - CSP配置
const express = require('express');
const app = express();
app.use((req, res, next) => {
res.setHeader(
'Content-Security-Policy',
"default-src 'self' " +
"script-src 'self' 'unsafe-inline' " +
"style-src 'self' 'unsafe-inline' " +
"img-src 'self' data: " +
"connect-src 'self' https://api.example.com"
);
next();
});
app.listen(3000);
实战场景
// 密码安全存储实战示例 - JWT认证
const jwt = require('jsonwebtoken');
function generateToken(user) {
return jwt.sign(
{ userId: user.id, email: user.email },
process.env.JWT_SECRET,
{ expiresIn: '1h' }
);
}
function verifyToken(token) {
try {
return jwt.verify(token, process.env.JWT_SECRET);
} catch (error) {
throw new Error('Invalid token');
}
}
// 中间件验证
function authenticate(req, res, next) {
const token = req.headers.authorization?.split(' ')[1];
if (!token) {
return res.status(401).json({ error: 'Unauthorized' });
}
try {
const decoded = verifyToken(token);
req.user = decoded;
next();
} catch {
res.status(401).json({ error: 'Invalid token' });
}
}
📖 深入理解密码哈希
密码哈希是Web安全的基础攻击类型。
攻击原理
理解密码哈希的攻击方式和危害。
防护策略
- 输入验证: 验证所有用户输入
- 输出编码: 对输出进行HTML编码
- 安全头: 设置适当的安全响应头
常见误区
- 信任用户输入: 永远不要信任用户输入
- 忽略编码: 输出前必须进行编码
- 缺少验证: 缺少输入验证会导致安全漏洞
📖 掌握盐值
盐值是身份认证的重要内容。
认证方案
- Session认证: 传统的会话认证
- JWT认证: 无状态的令牌认证
- OAuth2: 第三方授权认证
安全实践
- 密码安全: 使用bcrypt等强哈希算法
- 令牌管理: 合理的令牌过期策略
- 多因素认证: 增加额外的安全层
📖 实践bcrypt
bcrypt是API安全的重要内容。
API安全
- 认证授权: API访问控制
- 请求限流: 防止API被滥用
- 安全审计: 记录和分析安全事件
安全监控
- 日志记录: 记录安全相关事件
- 异常检测: 检测异常访问模式
- 告警机制: 设置安全告警
⚖️ 防护方案对比
| 方案 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 输入验证 | 简单有效 | 需要全面覆盖 | 所有输入 |
| 输出编码 | 防止XSS | 需要正确实现 | HTML输出 |
📚 推荐学习资源
- OWASP — Web安全权威组织
- MDN安全指南 — 安全入门
- Security Headers — 安全头检测
🚀 实践建议
安全服务器配置,DigitalOcean为你保驾护航!