网络安全实战:三大常见漏洞原理与防御指南
目录
- 前言
- 密码安全存储与验证
- 2.1 明文存储的风险
- 2.2 哈希加盐技术
- 2.3 Python代码实现
- XSS跨站脚本攻击防御
- 3.1 攻击原理分析
- 3.2 HTML转义与过滤
- 3.3 Node.js防御示例
- SQL注入防护方案
- 4.1 注入攻击演示
- 4.2 参数化查询实践
- 4.3 Java PreparedStatement示例
- 总结
1. 前言
在数字化时代,网络安全成为系统开发的关键环节。本文针对三种最常见的安全漏洞(密码泄露、XSS攻击、SQL注入),结合实战代码演示防御方案,帮助开发者构建更安全的Web应用。
2. 密码安全存储与验证
2.1 明文存储的风险
- 数据库泄露导致密码直接暴露
- 相同密码在不同平台被撞库
2.2 哈希加盐技术
- 使用bcrypt算法(自适应哈希算法)
- 每个用户独立盐值(salt)
- 迭代次数动态调整
2.3 Python代码实现
import bcrypt
def hash_password(password: str) -> bytes:
# 生成随机盐(自动包含在哈希值中)
salt = bcrypt.gensalt(rounds=12)
return bcrypt.hashpw(password.encode(), salt)
def verify_password(input_pwd: str, hashed_pwd: bytes) -> bool:
return bcrypt.checkpw(input_pwd.encode(), hashed_pwd)
# 使用示例
stored_password = hash_password("user123")
print(verify_password("user123", stored_password)) # True
print(verify_password("wrongpwd", stored_password)) # False
3. XSS跨站脚本攻击防御
3.1 攻击原理分析
- 恶意脚本注入到网页中
- 盗取用户Cookie或会话信息
- 类型:存储型/反射型/DOM型
3.2 HTML转义与过滤
- 上下文敏感转义(HTML/JS/CSS)
- 使用白名单过滤HTML标签
- 设置Content Security Policy(CSP)
3.3 Node.js防御示例
const xss = require('xss');
const xssOptions = {
whiteList: {
a: ['href', 'title', 'target'],
p: [],
br: []
}
};
// 用户输入过滤
const userInput = '<script>alert(1)</script><a href="/safe">链接</a>';
const cleanHTML = xss(userInput, xssOptions);
console.log(cleanHTML);
// 输出: <a href="/safe">链接</a>
4. SQL注入防护方案
4.1 注入攻击演示
恶意输入:' OR 1=1; --
导致查询语句:
SELECT * FROM users WHERE username = '' OR 1=1; -- ' AND password = '...'
4.2 参数化查询实践
- 使用预编译语句(Prepared Statement)
- 永远不要拼接SQL语句
- ORM框架自动处理
4.3 Java PreparedStatement示例
public User getUserByName(Connection conn, String name) throws SQLException {
String sql = "SELECT * FROM users WHERE username = ?";
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, name); // 参数安全绑定
ResultSet rs = stmt.executeQuery();
// 处理结果集...
}
}
5. 总结
安全威胁 | 防御方案 | 关键实践 |
---|---|---|
密码泄露 | 加盐哈希存储 | 使用bcrypt/PBKDF2算法 |
XSS攻击 | 输入过滤+输出转义 | 白名单策略+CSP设置 |
SQL注入 | 参数化查询 | 预编译语句+ORM框架 |
扩展建议:
- 定期进行安全审计
- 使用OWASP ZAP等扫描工具
- 保持依赖库的安全更新