Web 安全基础与常见攻击防护
📅 2024年1月11日
⏱️ 阅读时间: 12分钟
常见Web安全威胁
XSS(跨站脚本攻击)
// 攻击示例
// 恶意脚本注入
<script>alert('XSS攻击')</script>
// 防护措施
// 1. 输入验证和过滤
function sanitizeInput(input) {
return input
.replace(/&/g, '&')
.replace(//g, '>')
.replace(/"/g, '"')
.replace(/'/g, ''')
.replace(/\//g, '/');
}
// 2. 使用Content Security Policy
// HTTP头部
Content-Security-Policy: default-src 'self'; script-src 'self' trusted.com;
CSRF(跨站请求伪造)
// 防护措施
// 1. 使用CSRF Token
// 服务器生成token
const csrfToken = generateToken();
// 在表单中嵌入token
<input type="hidden" name="_csrf" value="<%= csrfToken %>">
// 2. SameSite Cookie属性
Set-Cookie: sessionId=abc123; SameSite=Strict; HttpOnly
// 3. 验证Referer头部
if (req.headers.referer && !req.headers.referer.startsWith('https://yourdomain.com')) {
throw new Error('Invalid request origin');
}
SQL注入防护
// 易受攻击的代码
const query = `SELECT * FROM users WHERE username = '${username}' AND password = '${password}'`;
// 防护措施
// 1. 使用参数化查询
const query = 'SELECT * FROM users WHERE username = ? AND password = ?';
db.execute(query, [username, password]);
// 2. 使用ORM框架
const user = await User.findOne({
where: {
username: username,
password: password
}
});
// 3. 输入验证
if (!isValidUsername(username) || !isValidPassword(password)) {
throw new Error('Invalid input');
}
HTTPS和安全头部
// 安全的HTTP头部配置
const helmet = require('helmet');
app.use(helmet());
// 或手动设置
app.use((req, res, next) => {
// 防止点击劫持
res.setHeader('X-Frame-Options', 'SAMEORIGIN');
// 启用XSS保护
res.setHeader('X-XSS-Protection', '1; mode=block');
// 防止MIME类型嗅探
res.setHeader('X-Content-Type-Options', 'nosniff');
// HSTS强制HTTPS
res.setHeader('Strict-Transport-Security', 'max-age=31536000; includeSubDomains');
// 内容安全策略
res.setHeader('Content-Security-Policy', "default-src 'self'");
next();
});
网络安全
Web安全
安全防护