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. 安全意识培训:防范社会工程学攻击

相关推荐
古时的风筝5 分钟前
暴论:2025年,程序员必学技能就是MCP
前端·后端·mcp
古时的风筝5 分钟前
这编程圈子变化太快了,谁能告诉我 MCP 是什么
前端·后端·mcp
王月lydia10 分钟前
环境变量篇-vue3的H5项目从0到1工程化落地经验篇2
前端
赵要上天10 分钟前
利用TTP协议 ETag + 路由守卫 实现前端发版后通知用户更新得一个方案
前端
李剑一12 分钟前
写一个vitepress新建文章脚本,自动化创建链接,别再手写了!
前端·node.js·vitepress
火星思想12 分钟前
React如何实现时间切片
前端·react.js
小学生豆豆18 分钟前
eslint以及其扩展插件
前端
Electrolux24 分钟前
【前端bug】Safari的选区机制导致的前端@人组件的bug
前端
w236173460126 分钟前
Tomcat:从零理解Java Web应用的“心脏”
java·前端·tomcat
姝然_952729 分钟前
cursor vue3 rules
前端