浅谈前端安全领域的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 攻击有个基本的了解,在日常的开发工作中,也可以试试哪些地方可以注入脚本,进行测试,看看是否会攻击成功。

目录
相关文章
|
Oracle Java 关系型数据库
Windows11 系统中配置Java环境变量
Windows11 系统中配置Java环境变量
1208 0
|
5月前
|
人工智能 监控 安全
员工使用第三方AI办公的风险与解决方案:从三星案例看AI的数据防泄漏
生成式AI提升办公效率,也带来数据泄露风险。三星、迪士尼案例揭示敏感信息外泄隐患。AI-FOCUS团队建议构建“流式网关+DLP”防护体系,实现分级管控、全程审计,平衡安全与创新。
|
3月前
|
消息中间件 Java Kafka
kafka入门+代码初步实现--小白必看
kafka入门+代码初步实现--小白必看
337 5
|
3月前
|
存储 JavaScript 前端开发
XSS攻击
XSS(跨站脚本攻击)是攻击者通过网站漏洞注入恶意脚本,用户访问时执行,窃取数据、Cookie或劫持会话。主要分反射型和存储型,危害大。防御措施包括输入转义、白名单过滤及CSP内容安全策略,有效防止脚本注入。
|
5月前
|
缓存 运维 监控
【产品发布动态】Zabbix7.4新特征发布
"Zabbix 7.4带来革命性升级:嵌套自动发现实现多层级监控,主机向导简化配置流程,动态拓扑图与仪表板让数据一目了然,7*24原厂技术支持护航企业运维。"
340 10
|
5月前
|
机器学习/深度学习 自然语言处理 监控
23_Transformer架构详解:从原理到PyTorch实现
Transformer架构自2017年Google发表的论文《Attention Is All You Need》中提出以来,彻底改变了深度学习特别是自然语言处理领域的格局。在短短几年内,Transformer已成为几乎所有现代大型语言模型(LLM)的基础架构,包括BERT、GPT系列、T5等革命性模型。与传统的RNN和LSTM相比,Transformer通过自注意力机制实现了并行化训练,极大提高了模型的训练效率和性能。
|
SQL 开发框架 安全
Web安全-IIS短文件名泄露
Web安全-IIS短文件名泄露
996 2
|
存储 JSON 前端开发
jQuery Get 请求参数转换为 JSON
【8月更文挑战第22天】
283 2
|
SQL 安全 关系型数据库
SQL自动化注茹-SQLmap入门操作(二)
SQL自动化注茹-SQLmap入门操作(二)
交易平台---架构设计第一步拆分模块,拆分为7个模块
交易平台---架构设计第一步拆分模块,拆分为7个模块

热门文章

最新文章