进行 XSS 攻击 和 如何防御

news2024/10/7 8:21:41

跨站脚本攻击(XSS 攻击)是 Web 开发中最危险的攻击之一。以下是它们的工作原理以及防御方法。

XSS 攻击

跨站脚本攻击就是在另一个用户的计算机上运行带有恶意的 JS 代码。假如我们的程序没有对这些恶意的脚本进行防御的话,他们就会由我们的页面注入到我们的服务器数据库中,从而其他用户在访问我们的网站是就会收到这些脚本的攻击。接下来我们来看看这些恶意代码是何时注入的。

XSS 攻击的例子

首先我们先看一下如下的代码:

<section id="user-input">
  <form>
    <div class="form-control">
      <label for="user-message">Your Message</label>
      <textarea id="user-message" name="user-message"></textarea>
    </div>
    <div class="form-control">
      <label for="message-image">Message Image</label>
      <input type="text" id="message-image" name="message-image" />
    </div>
    <button type="submit">Send Message</button>
  </form>
</section>
<section id="user-messages">
  <ul></ul>
</section>
// 提交表单数据后渲染对应的数据
function renderMessages() {
  let messageItems = "";
  for (const message of userMessages) {
    messageItems = `
      ${messageItems}
      <li class="message-item">
        <div class="message-image">
          <img src="${message.image}" alt="${message.text}">
        </div>
        <p>${message.text}</p>
      </li>
    `;
  }

  userMessagesList.innerHTML = messageItems;
}

上述例子中我们只是采用了静态页面来呈现XSS攻击,即没有服务器的支持,所以我们只能自己攻击自己。

上述的例子中我们可以看到用户当表单添加消息后最终使用innerHtml进行页面元素的渲染。这样我们的页面最后渲染出的<li></li>元素里面会包含图片和其他一些文本数据。

现在我们设想一下,假如我们在textarea中输入如下的代码:

在这里插入图片描述
并且提交表单数据后,我们提交表单数据后,我们可以查看一下页面的列表元素:
在这里插入图片描述

我们可以看到页面没有报错和任何任何报警,所以注入的脚本代码实际上并没有执行。因为现代浏览器可以保护您免受这种非常基本形式的 XSS 攻击。通过 innerHTML“注入”的<script>元素不会被浏览器执行!

所以上述的注入攻击只是针对于低版本的浏览器。

我们还可以滥用 <img>src属性设置为某些用户输入的注入攻击。因为上述的图片渲染是通过简单的字符串进行渲染的。

<img src="${message.image}" alt="${message.text}">

如果我们操纵 message.image 使其实际上完全改变要渲染的元素会怎么样?不仅仅是它的 src。

用户可以在表单(图像 URL)中输入以下内容来实现此目的:
在这里插入图片描述

这可能看起来很奇怪,但这最终导致该字符串通过innerHTML输出的值如下:
在这里插入图片描述

这样当表单提交后,我们的注入代码被运行啦,因为整个<img />被称作啦。攻击者将图像 src 设置为无效 URL,这将导致加载失败!通过设置 onerror<img> 的有效属性!),我们可以定义在图像加载失败时执行的 JavaScript 代码。因此,我们强制图像加载失败,并通过为恶意代码设置 onerror 来提供“补救措施”。

通过上述的例子可以看到,我们只是在本地进行攻击,因为数据库没有提交到服务器中,所以我们模拟的只是攻击自己。假如我们把上述的数据提交到服务器的话,就会形成跨站攻击。并且注入的 JavaScript 代码可以执行任何操作,例如窃取身份验证令牌。

如何保护我们的应用程序

预防跨站攻击,我们有一条简单但重要的原则:在存储和提供用户生成的内容之前始终对齐进行清理。

“清理内容”意味着您想要删除用户生成的内容中可能存在的所有恶意部分。清理不仅有助于防止 XSS,还有助于防止 SQL 和 NoSQL 注入。

我们应该只将清理过的内容存储在数据库中。通过这样做,您将确保只向用户提供安全内容。

此外,您还可以研究客户端 JavaScript 代码中的转义内容。 这意味着除了后端的清理步骤之外,您还需要在前端进行清理步骤。现代的框架(Angular、React、Vue)都带有转义功能。

**说明:**客户端转义只是一个额外的好处 - 您实际上应该只在数据库中存储安全内容!

跨站攻击的另一个来源

跨站攻击的另一个来源就是第三方库。因为在现代客户端应用程序中,我们通常会使用大量第三方库。从 Angular 这样的框架到 lodash 这样的实用程序库。这些库中包含的代码也作为客户端代码的一部分运行。假如这些苦收到第三方恶意攻击或者删除核心代,可能都会导致我们的应用程序存在很多风险。

所以我们尽量少使用第三方库或者挑选一些更大、更流行且维护良好的库。

完整实例代码下载

完整实例代码下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1041041.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【刷题笔记9.25】LeetCode:相交链表

LeetCode&#xff1a;相交链表 一、题目描述 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点&#xff0c;返回 null 。 二、分析及代码 方法一&#xff1a;使用哈希Set集合 &#xff08;注意…

安装ipfs-swarm-key-gen

安装ipfs-swarm-key-gen Linux安装go解释器安装ipfs-swarm-key-gen Linux安装go解释器 https://blog.csdn.net/omaidb/article/details/133180749 安装ipfs-swarm-key-gen # 编译ipfs-swarm-key-gen二进制文件 go get -u github.com/Kubuxu/go-ipfs-swarm-key-gen/ipfs-swarm…

机器学习(19)---神经网络详解

神经网络 一、神经网络概述1.1 神经元模型1.2 激活函数 二、感知机2.1 概述2.2 实现逻辑运算2.3 多层感知机 三、神经网络3.1 工作原理3.2 前向传播3.3 Tensorflow实战演示3.3.1 导入数据集查看3.3.2 数据预处理3.3.3 建立模型3.3.4 评估模型 四、反向传播五、例题5.1 题15.2 题…

Qt/C++音视频开发56-udp推流和拉流/组播和单播推流

一、前言 之前已经实现了rtsp/rtmp推流&#xff0c;rtsp/rtmp/hls/flv/ws-flv/webrtc等拉流&#xff0c;这种一般都需要依赖一个独立的流媒体服务程序&#xff0c;有没有一种更便捷的方式不需要这种依赖&#xff0c;然后又能实现推拉流呢&#xff0c;当然有的那就是udpp推流&a…

Linux DataEase数据可视化分析工具结合cpolar实现远程访问

文章目录 前言1. 安装DataEase2. 本地访问测试3. 安装 cpolar内网穿透软件4. 配置DataEase公网访问地址5. 公网远程访问Data Ease6. 固定Data Ease公网地址 前言 DataEase 是开源的数据可视化分析工具&#xff0c;帮助用户快速分析数据并洞察业务趋势&#xff0c;从而实现业务…

2023-油猴(Tampermonkey)脚本推荐

2023-油猴&#xff08;Tampermonkey&#xff09;脚本推荐 知乎增强 链接 https://github.com/XIU2/UserScript https://greasyfork.org/zh-CN/scripts/419081 介绍 移除登录弹窗、屏蔽首页视频、默认收起回答、快捷收起回答/评论&#xff08;左键两侧&#xff09;、快捷回…

HTML+CSS综合案例二:CSS简介

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title> CSS简介</title><style>h1{color: #33…

Linux安装Mysql主从集群(图文解说详细版)

MySQL主从集群是一种数据库架构模式&#xff0c;由一个主数据库&#xff08;Master&#xff09;和多个从数据库&#xff08;Slave&#xff09;组成。在主从集群中&#xff0c;主数据库负责处理写操作&#xff08;如插入、更新、删除&#xff09;&#xff0c;而从数据库则用于读…

蓝桥杯每日一题2023.9.23

4961. 整数删除 - AcWing题库 题目描述 分析 注&#xff1a;如果要进行大量的删除操作可以使用链表 动态求最小值使用堆&#xff0c;每次从堆中取出最小值的下标然后在链表中删除 注意long long 代码解释&#xff1a; while(k --){auto t q.top();q.pop();res t.first;i…

【二分图染色】ARC 165 C

C - Social Distance on Graph 题意&#xff1a; 思路&#xff1a; 首先考虑一条链的情况&#xff0c;注意到如果两条相邻的边加起来 < x&#xff0c;一定不行 这个结论推广到图也是一样的 同时注意到 x 具有单调性&#xff0c;考虑对 x 二分 在check时进行二分图染色 …

Linux知识点 -- 网络基础 -- 传输层

Linux知识点 – 网络基础 – 传输层 文章目录 Linux知识点 -- 网络基础 -- 传输层一、传输层协议1.端口号2.网络相关bash命令 二、UDP协议1.UDP报文的解包与交付2.理解UDP报文3.UDP协议的特点4.UDP应用层IO类接口5.UDP的缓冲区6.UDP使用注意事项7.基于UDP的应用层协议 三、TCP协…

SpringMVC 学习(二)Hello SpringMVC

3. Hello SpringMVC (1) 新建 maven 模块 springmvc-02-hellomvc (2) 确认依赖的导入 (3) 配置 web.xml <!--web/WEB-INF/web.xml--> <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee…

简述信息论与采样定理

信息论 香农信息论发表于1948/1949年&#xff0c;它由三部分组成&#xff1a;信号采样、信源编码、信道编码&#xff1b; 信号采样&#xff1a;采样理论研究在何种条件下对连续信号进行采样&#xff0c;从而得到的离散型号可以可逆地恢复出采样前的连续信号。采样得到的离散实…

网络安全--防火墙旁挂部署方式和高可靠性技术

目录 一、防火墙 二、防火墙旁挂部署方式 使用策略路由实现 第一步、IP地址配置 第二步、配置路由 第三步、在防火墙上做策略 第四步、在R2上使用策略路由引流 三、防火墙高可靠性技术--HRP 拓扑图 第一步、配置SW1、SW2、FW1、FW2 第二步、进入防火墙Web页面进行配…

分布式网络在移动医疗场景中的应用

随着医疗信息化建设实践的深入&#xff0c;越来越多的医疗机构开始借助网络信息技术改善其运营及管理模式&#xff0c;为患者提供更高质量、更高效率、更加安全体贴的医疗服务。移动医疗便是在此背景下产生的新业务需求。 常见的移动医疗场景 住院部&#xff1a;移动查房、智…

【好文推荐】openGauss 5.0.0 数据库安全——全密态探究

前言 写此文章的目的&#xff0c;主要是验证&#xff1a; openGauss 5.0.0 数据库能够实现哪种加密方式的全密态全密态数据库的特点 一、全密态介绍 全密态数据库意在解决数据全生命周期的隐私保护问题&#xff0c;使得系统无论在何种业务场景和环境下&#xff0c;数据在传…

Spring面试题23:Spring支持哪些事务管理类型?Spring框架的事务管理有哪些优点?你更倾向用哪种事务管理类型?

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:Spring支持哪些事务管理类型? Spring 支持以下几种事务管理类型: 编程式事务管理:通过在代码中显式地使用事务管理 API(如 TransactionTempla…

AMEYA360:瑞萨电子整合Reality AI工具与e² studio IDE,扩大其在AIoT领域的卓越地位

全球半导体解决方案供应商瑞萨电21日宣布已在其Reality AI Tools?和e2 studio集成开发环境间建立接口&#xff0c;使设计人员能够在两个程序间无缝共享数据、项目及AI代码模块。实时数据处理模块已集成至瑞萨MCU软件开发工具套件&#xff08;注&#xff09;&#xff0c;以方便…

腾讯mini项目-【指标监控服务重构】2023-08-26

今日已办 Venus 的 Trace 无感化 定义 handler 函数 fiber.Handler 的主要处理逻辑返回处理中出现的 error返回处理中响应 json 的函数 // handler // Description: // Author xzx 2023-08-26 18:00:03 // Param c // Return error // Return func() error : function for …

【Redis】记录一次K8S存储故障导致Redis集群拓扑异常的修复过程

文章目录 背景处理新节点遗忘旧节点 背景 集群部署在K8S环境内&#xff0c;存储使用的localpv&#xff0c;有一台K8S主机节点磁盘故障&#xff0c;导致在该节点上的redis节点均出现故障&#xff0c;主要表现为持久化失败、集群拓扑异常&#xff0c;持久化失败可以临时关闭RDB和…