浅谈前端安全领域的XSS攻击

简介: 本文由喵喵侠撰写,介绍前端安全中的XSS(跨站脚本攻击)基本概念与防范。涵盖反射型、存储型和DOM型XSS原理,并通过一个留言板案例演示攻击过程。文章还提供防御建议,如避免使用innerHTML、采用DOMPurify过滤恶意脚本,帮助开发者提升安全意识,防范常见前端漏洞。

目录

前言

大家好,我是喵喵侠。我们在做前端开发项目时候,大部分情况专注于业务功能的实现,却很少关注前端安全这方面的内容。XSS 是一种常见的攻击方式,攻击者可以通过网页端实施攻击行为,可以劫持用户会话、修改网页内容、窃取用户数据等,危害极大。因此,了解 XSS很有必要。接下来我会先介绍 XSS的概念,以一个实战小案例,让你明白 XSS 攻击到底是怎么一回事。

XSS 的基本概念

XSS全称是跨站脚本攻击(Cross-Site Scripting,XSS)。XSS攻击的基本思路是攻击者在网页中注入恶意脚本,当用户访问该网页时,这些脚本会在用户的浏览器中执行,进而执行攻击者预期的操作。XSS主要分为三种类型:

  1. 反射型XSS(Reflected XSS):攻击代码通过URL参数传递,并在响应中直接反射回浏览器执行。
  2. 存储型XSS(Stored XSS):恶意脚本被存储在服务器端,用户访问时被加载执行。
  3. DOM型XSS(DOM-based XSS):攻击代码在客户端运行,直接操纵DOM节点,修改网页内容。

简单理解就是,DOM 操作、提交数据给后端、URL 拼接恶意参数,都是 XSS 的实施方式,掌握了攻击方式,后面也就知道如何防御了。

XSS攻击示例 - 简单的留言板应用

这里我将构建一个简单的留言板网页,用于展示XSS攻击如何发生及其影响。

为了展示 XSS 攻击对多个用户的影响,我们可以将留言存储在数据库中(这里用静态页面模拟),并在用户访问时加载这些留言。下面是一个简单的 HTML 版本的案例:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>XSS Demo</title>
</head>
<body>
  <h1>XSS 演示</h1>
  <form id="xssForm">
    <input type="text" id="username" placeholder="用户名" required>
    <textarea id="message" placeholder="留言内容" required></textarea>
    <button type="submit">提交</button>
  </form>
  <div id="messages"></div>
  <script>
    const form = document.getElementById('xssForm');
    const messagesDiv = document.getElementById('messages');
    form.addEventListener('submit', (e) => {
      e.preventDefault();
      const username = document.getElementById('username').value;
      const message = document.getElementById('message').value;
      displayMessage(username, message);
    });
    function displayMessage(username, message) {
      const msg = `<div><strong>${username}:</strong> ${message}</div>`
      messagesDiv.textContent += msg;
    }
  </script>
</body>
</html>

如果你在输入框输入<script>alert('XSS Attack!');</script>提交,后台接受存储后,页面评论区刷新后,这段脚本就会被执行。

这也就意味着,每个访问该网页的用户,只要页面上显示了这个评论,就会执行这个脚本,这是多么可怕的事啊!

好在现在的浏览器安全机制已经十分完善,常见的 XSS 攻击都会被屏蔽掉,所以在大多数情况下,不用特别担心。

如果你还是不放心的话,可以借助第三方库来处理字符串中的脚本,比方说DOMPurify,可以很好的过滤XSS 脚本。

针对 XSS 攻击,我个人有两个小建议:

  1. 尽量不要用 innerHTML,而是使用 innerText 或者 textContent,这样可以有效过滤 html 代码。
  2. Vue 项目中,对 v-html 的内容,可以用DOMPurify进行过滤处理。

总结

XSS 攻击有点像「鬼」一样,很多人都听说过,但都没有遇到过。但并不代表XSS 攻击不存在,只不过现代框架和浏览器安全机制,已经规避了大多数 XSS 攻击。只要技术在不断更新迭代,网络攻防就是一个持久不变的话题,值得网络安全人员持续关注。

希望通过本篇文章的介绍,让你能对 XSS 攻击有个基本的了解,在日常的开发工作中,也可以试试哪些地方可以注入脚本,进行测试,看看是否会攻击成功。

目录
相关文章
|
3月前
|
域名解析 网络协议 Linux
Linux网络基础完全指南(小白也能看懂的网络入门教程)
本教程系统讲解Linux网络基础,涵盖IP地址、子网掩码、网关、DNS等核心概念,介绍ifconfig、ip、ping等常用命令及网络配置文件的使用方法,助力掌握Linux网络配置技能。
453 117
|
5月前
|
人工智能 自然语言处理 搜索推荐
AI写作工具应用效能与治理策略研究报告
本报告聚焦AI写作工具在学术、商业、政务、创意四大场景的应用现状与适配逻辑,结合实测数据构建效率、质量、合规三维评估体系,剖析版权模糊、同质化等核心问题,提出法律、技术、行业协同治理路径,并预测认知智能、多模态创作等未来趋势,为产业健康发展提供参考。
|
4月前
|
消息中间件 Java Kafka
kafka入门+代码初步实现--小白必看
kafka入门+代码初步实现--小白必看
393 5
|
4月前
|
存储 JavaScript 前端开发
XSS攻击
XSS(跨站脚本攻击)是攻击者通过网站漏洞注入恶意脚本,用户访问时执行,窃取数据、Cookie或劫持会话。主要分反射型和存储型,危害大。防御措施包括输入转义、白名单过滤及CSP内容安全策略,有效防止脚本注入。
|
Oracle Java 关系型数据库
Windows11 系统中配置Java环境变量
Windows11 系统中配置Java环境变量
1384 0
|
6月前
|
机器学习/深度学习 自然语言处理 监控
23_Transformer架构详解:从原理到PyTorch实现
Transformer架构自2017年Google发表的论文《Attention Is All You Need》中提出以来,彻底改变了深度学习特别是自然语言处理领域的格局。在短短几年内,Transformer已成为几乎所有现代大型语言模型(LLM)的基础架构,包括BERT、GPT系列、T5等革命性模型。与传统的RNN和LSTM相比,Transformer通过自注意力机制实现了并行化训练,极大提高了模型的训练效率和性能。
1398 0
|
监控 网络协议 安全
|
SQL 开发框架 安全
Web安全-IIS短文件名泄露
Web安全-IIS短文件名泄露
1139 2
|
存储 JSON 前端开发
jQuery Get 请求参数转换为 JSON
【8月更文挑战第22天】
318 2
|
SQL 安全 关系型数据库
SQL自动化注茹-SQLmap入门操作(二)
SQL自动化注茹-SQLmap入门操作(二)

热门文章

最新文章

下一篇
开通oss服务