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

相关推荐
又又呢37 分钟前
前端面试题总结——webpack篇
前端·webpack·node.js
dog shit1 小时前
web第十次课后作业--Mybatis的增删改查
android·前端·mybatis
我有一只臭臭1 小时前
el-tabs 切换时数据不更新的问题
前端·vue.js
七灵微2 小时前
【前端】工具链一本通
前端
Nueuis3 小时前
微信小程序前端面经
前端·微信小程序·小程序
_r0bin_5 小时前
前端面试准备-7
开发语言·前端·javascript·fetch·跨域·class
IT瘾君5 小时前
JavaWeb:前端工程化-Vue
前端·javascript·vue.js
potender5 小时前
前端框架Vue
前端·vue.js·前端框架
站在风口的猪11086 小时前
《前端面试题:CSS预处理器(Sass、Less等)》
前端·css·html·less·css3·sass·html5
程序员的世界你不懂6 小时前
(9)-Fiddler抓包-Fiddler如何设置捕获Https会话
前端·https·fiddler