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防御

  • 输入过滤:对用户输入进行转义和验证
javascript 复制代码
function escapeHtml(str) {
  return str.replace(/[&<>'"]/g, 
    tag => ({
      '&': '&amp;',
      '<': '&lt;',
      '>': '&gt;',
      "'": '&#39;',
      '"': '&quot;'
    }[tag]));
}
  • 输出编码:根据输出上下文(HTML/JS/URL)进行编码

  • Content Security Policy (CSP):限制脚本来源

html 复制代码
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">

HttpOnly Cookie:防止JavaScript访问敏感Cookie

html 复制代码
//http
Set-Cookie: sessionid=xxxx; HttpOnly; Secure

2. CSRF防御

  • CSRF Token:表单中包含服务器验证的令牌
html 复制代码
<input type="hidden" name="_csrf" value="随机令牌">

SameSite Cookie属性

html 复制代码
//http
Set-Cookie: sessionid=xxxx; SameSite=Strict
  • 验证Referer/Origin头:检查请求来源

  • 关键操作二次验证:如短信/邮件确认

3. SQL注入防御

  • 参数化查询/预处理语句
javascript 复制代码
// 正确方式
db.query('SELECT * FROM users WHERE id = ?', [userId]);

// 错误方式(易受攻击)
db.query(`SELECT * FROM users WHERE id = ${userId}`);
  • ORM框架:使用Sequelize、TypeORM等

  • 最小权限原则:数据库用户仅赋予必要权限

  • 输入验证:白名单验证输入格式

4. 点击劫持防御

  • X-Frame-Options头
html 复制代码
//http
X-Frame-Options: DENY

CSP的frame-ancestors指令

html 复制代码
//http
Content-Security-Policy: frame-ancestors 'none'

JavaScript防御(后备方案):

javascript 复制代码
if (top !== self) top.location = self.location;

5. 文件上传防御

  • 文件类型验证:检查MIME类型和扩展名

  • 文件内容扫描:检查实际内容而非仅扩展名

  • 重命名文件:使用随机生成的文件名

  • 隔离存储:上传目录不解析脚本

  • 大小限制:防止超大文件攻击

6. DDoS防御

  • CDN服务:分散流量压力

  • 速率限制(Rate Limiting)

javascript 复制代码
// Express中间件示例
const rateLimit = require('express-rate-limit');
app.use(rateLimit({ windowMs: 15*60*1000, max: 100 }));
  • Web应用防火墙(WAF):过滤恶意流量

  • 云防护服务:如Cloudflare、AWS Shield

7. 中间人攻击防御

  • HTTPS强制:HSTS头
html 复制代码
//http
Strict-Transport-Security: max-age=31536000; includeSubDomains
  • 证书钉扎(HPKP):固定可信证书

  • 敏感操作二次验证:即使会话被劫持

三、综合安全建议

通过组合这些措施,可以显著提高Web应用的安全性,但需注意安全是一个持续过程而非一次性任务。

  1. 保持更新:定期更新框架、库和服务器软件

  2. 最小权限原则:所有服务使用最低必要权限运行

  3. 深度防御:多层安全措施而非依赖单一防护

  4. 安全头设置

    html 复制代码
    //http
    X-Content-Type-Options: nosniff
    X-XSS-Protection: 1; mode=block
  5. 日志监控:记录并分析异常访问模式

  6. 定期渗透测试:主动发现漏洞

  7. 安全意识培训:防范社会工程学攻击

相关推荐
陈随易15 分钟前
FFmpeg 9.0 发布,代号 Lei,音视频处理再升级
前端·后端·程序员
用户059540174464 小时前
把AI对话记忆存储测试从手工改成Playwright+pytest,覆盖率从20%提到96%,回归时间缩短90%
前端·css
kyriewen4 小时前
别再这样写TypeScript了——Code Review中最常见的8个反模式
前端·javascript·typescript
名字还没想好☜4 小时前
Next.js ‘use client‘ 到底加在哪:Server/Client Components 边界与常见报错
开发语言·前端·javascript·react·next.js
午安~婉4 小时前
GitHub Token/ GitHub Stats统计显示图异常
前端·github·vercel·github token
码云之上4 小时前
AI Agent 工程化总览篇:从 Prompt 到 Harness
前端·人工智能
2501_926978334 小时前
以说明书 DNA 为模板——完整 AGI 的结构图景
前端·人工智能·经验分享·笔记·ai写作
IT_陈寒5 小时前
Vite静态资源引用这个坑我踩得有点疼
前端·人工智能·后端
程序员黑豆5 小时前
鸿蒙应用开发:AttributeModifier 使用教程
前端·harmonyos
codeniu6 小时前
TRAE Work 实战 | 从"有个想法"到线上Demo,我全程只靠对话就完成了
前端·trae