Web常见攻击方式及防御措施
一、常见Web攻击方式
1. 跨站脚本攻击(XSS)
攻击原理:攻击者向网页注入恶意脚本,在用户浏览器执行
-
存储型XSS:恶意脚本存储在服务器(如评论区)
-
反射型XSS:恶意脚本通过URL参数反射给用户
-
DOM型XSS:前端JavaScript不安全地操作DOM
2. 跨站请求伪造(CSRF)
攻击原理:诱骗用户在已认证的网站上执行非预期操作
-
利用用户的登录状态
-
通过恶意链接/图片发起请求
3. SQL注入
攻击原理:通过输入数据插入或"注入"恶意SQL命令
-
攻击者可以查看、修改、删除数据库内容
-
常见于未过滤的用户输入拼接SQL语句
4. 点击劫持(Clickjacking)
攻击原理:诱使用户点击隐藏的恶意元素
-
使用透明iframe覆盖合法页面
-
用户看似点击安全内容,实则触发恶意操作
5. 文件上传漏洞
攻击原理:上传恶意文件到服务器
-
上传可执行脚本获取服务器权限
-
上传超大文件导致DoS(Denial of Service(拒绝服务))
6. 分布式拒绝服务(DDoS)
攻击原理:用大量请求淹没服务器资源
-
消耗带宽、CPU或内存资源
-
使合法用户无法访问服务
7. 中间人攻击(MITM)
攻击原理:拦截通信双方的流量
-
公共WiFi常见风险
-
窃取敏感信息如登录凭证
二、防御措施
1. XSS防御
-
输入过滤:对用户输入进行转义和验证
function escapeHtml(str) {return str.replace(/[&<>'"]/g, tag => ({'&': '&','<': '<','>': '>',"'": ''','"': '"'}[tag]));
}
-
输出编码:根据输出上下文(HTML/JS/URL)进行编码
-
Content Security Policy (CSP):限制脚本来源
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
HttpOnly Cookie:防止JavaScript访问敏感Cookie
//http
Set-Cookie: sessionid=xxxx; HttpOnly; Secure
2. CSRF防御
-
CSRF Token:表单中包含服务器验证的令牌
<input type="hidden" name="_csrf" value="随机令牌">
SameSite Cookie属性:
//http
Set-Cookie: sessionid=xxxx; SameSite=Strict
-
验证Referer/Origin头:检查请求来源
-
关键操作二次验证:如短信/邮件确认
3. SQL注入防御
-
参数化查询/预处理语句:
// 正确方式
db.query('SELECT * FROM users WHERE id = ?', [userId]);// 错误方式(易受攻击)
db.query(`SELECT * FROM users WHERE id = ${userId}`);
-
ORM框架:使用Sequelize、TypeORM等
-
最小权限原则:数据库用户仅赋予必要权限
-
输入验证:白名单验证输入格式
4. 点击劫持防御
-
X-Frame-Options头:
//http
X-Frame-Options: DENY
CSP的frame-ancestors指令:
//http
Content-Security-Policy: frame-ancestors 'none'
JavaScript防御(后备方案):
if (top !== self) top.location = self.location;
5. 文件上传防御
-
文件类型验证:检查MIME类型和扩展名
-
文件内容扫描:检查实际内容而非仅扩展名
-
重命名文件:使用随机生成的文件名
-
隔离存储:上传目录不解析脚本
-
大小限制:防止超大文件攻击
6. DDoS防御
-
CDN服务:分散流量压力
-
速率限制(Rate Limiting):
// Express中间件示例
const rateLimit = require('express-rate-limit');
app.use(rateLimit({ windowMs: 15*60*1000, max: 100 }));
-
Web应用防火墙(WAF):过滤恶意流量
-
云防护服务:如Cloudflare、AWS Shield
7. 中间人攻击防御
-
HTTPS强制:HSTS头
//http
Strict-Transport-Security: max-age=31536000; includeSubDomains
-
证书钉扎(HPKP):固定可信证书
-
敏感操作二次验证:即使会话被劫持
三、综合安全建议
通过组合这些措施,可以显著提高Web应用的安全性,但需注意安全是一个持续过程而非一次性任务。
-
保持更新:定期更新框架、库和服务器软件
-
最小权限原则:所有服务使用最低必要权限运行
-
深度防御:多层安全措施而非依赖单一防护
-
安全头设置:
//http X-Content-Type-Options: nosniff X-XSS-Protection: 1; mode=block
-
日志监控:记录并分析异常访问模式
-
定期渗透测试:主动发现漏洞
-
安全意识培训:防范社会工程学攻击