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

XSS 攻击(详细)

目录

引言

一、XSS 攻击简介

二、XSS 攻击类型

1.反射型 XSS

2.存储型 XSS

3.基于 DOM 的 XSS

4.Self - XSS

三、XSS 攻击技巧

1.基本变形

2.事件处理程序

3.JS 伪协议

4.编码绕过

5.绕过长度限制

6.使用标签

四、XSS 攻击工具与平台

1.XSS 攻击平台

2.BEEF

五、XSS 相关案例 - XSS 蠕虫

六、XSS 防御方法

1.输入输出过滤

2.HttpOnly Cookie

3.内容安全策略(CSP)

4.验证输入数据类型和格式

5.JavaScript 框架与 XSS

5.1-jQuery

5.2-Vue.js

5.3-AngularJS

6.富文本与安全问题

6.1-富文本的风险

6.2-处理方法

7.旧版浏览器的安全隐患

小结


引言

在当今数字化时代,网络应用与人们的生活、工作深度融合,Web安全的重要性愈发凸显。XSS攻击,作为Web安全领域中极为常见且危害巨大的漏洞类型,正悄然威胁着每一位网络用户和网站运营者。你是否曾想过,当你在浏览网页、登录账户、输入信息时,背后可能隐藏着怎样的风险?看似平常的操作,或许正被恶意攻击者利用XSS漏洞窥探隐私、窃取数据。从电商平台用户账号被盗刷,到社交网站个人信息泄露,XSS攻击的阴影无处不在。本文将带你深入了解XSS攻击的方方面面,从攻击类型、技巧,到实际案例和防御方法,为你揭开这一网络安全威胁的神秘面纱,帮助你筑牢网络安全防线。

一、XSS 攻击简介

XSS,即跨站脚本攻击,是 Web 安全领域中十分常见的漏洞类型。攻击者通过在 Web 页面中注入恶意脚本,当用户浏览该页面时,恶意脚本便会在用户的浏览器中执行。借助这种攻击方式,攻击者能够窃取用户的敏感信息,如登录凭证、个人隐私数据等;劫持用户会话,以用户身份进行各种操作;甚至篡改网站内容,严重损害网站的声誉和用户信任。举例来说,某电商网站若存在 XSS 漏洞,攻击者可通过注入恶意脚本,窃取用户的账号密码,进而盗刷用户的账户资金,给用户带来直接的经济损失。

二、XSS 攻击类型

1.反射型 XSS

反射型 XSS 攻击的脚本通常存在于 URL 中,服务器在接收到请求后,会直接将包含恶意脚本的内容返回给浏览器执行。这种攻击属于非持久性攻击,一般是攻击者通过诱骗用户点击包含恶意脚本的链接来实施攻击。例如,攻击者构造链接 “http://example.com/search?query=alert('XSS')”,当用户点击该链接时,服务器将恶意脚本反射回浏览器,进而执行弹窗操作。下面是一个简单的 Python Flask 示例,展示反射型 XSS 漏洞:

from flask import Flask, requestapp = Flask(__name__)@app.route('/search')def search():query = request.args.get('query')return f'<html><body>{query}</body></html>'if __name__ == '__main__':app.run(debug=True)

2.存储型 XSS

存储型 XSS 攻击会将恶意脚本存储在服务器端,比如数据库中。当其他用户访问包含该恶意脚本的页面时,脚本就会被加载并执行,这是一种持久性攻击,危害较大。以留言板功能为例,攻击者在留言内容中插入恶意脚本,如 “alert('Stored XSS')”,后续访问留言板的用户都会触发该脚本。以下是 PHP 实现的存在存储型 XSS 漏洞的留言板代码:

<?php$conn = mysqli_connect("localhost", "root", "", "testdb");if (isset($_POST['message'])) {$message = $_POST['message'];$sql = "INSERT INTO messages (content) VALUES ('$message')";mysqli_query($conn, $sql);}$sql = "SELECT * FROM messages";$result = mysqli_query($conn, $sql);while ($row = mysqli_fetch_assoc($result)) {echo $row['content'];}mysqli_close($conn);?>

3.基于 DOM 的 XSS

基于 DOM 的 XSS 攻击通过修改页面的 DOM 结构来注入恶意脚本,它是从客户端的 JavaScript 代码中执行的,与服务器交互数据没有直接关联。攻击者利用 JavaScript 中对 DOM 对象操作的函数,当这些函数的参数受用户输入影响且未经过严格安全处理时,就可能引发漏洞。比如,当页面中有代码 “document.getElementById ('target').innerHTML = userInput;”,若 userInput 被攻击者控制并输入恶意脚本 “alert('XSS')”,页面在执行这段代码时就会弹出警告框,实现 XSS 攻击。下面是一个 HTML 和 JavaScript 示例:

<!DOCTYPE html><html><head><title>DOM - XSS Example</title></head><body><input type="text" id="input" /><button onclick="updateContent()">Submit</button><div id="target"></div><script>function updateContent() {var input = document.getElementById('input').value;document.getElementById('target').innerHTML = input;}</script></body></html>

4.Self - XSS

Self - XSS 是指用户自己将恶意脚本输入到应用程序中,通常是由于用户自身安全意识不足导致的,并非攻击者直接注入。例如,用户为了实现某些特定效果,在应用允许的输入框中输入恶意脚本,从而触发 XSS 攻击。

三、XSS 攻击技巧

1.基本变形

攻击者会对恶意脚本进行编码变形,如使用 Unicode 编码或特殊字符,以绕过安全过滤机制。例如,将 “alert('XSS')” 编码为 “<script>alert ('XSS')</script>”,部分仅检测明文恶意代码的过滤系统可能无法识别。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>基本变形 XSS 示例</title>
</head><body><!-- 正常的恶意脚本 --><script>alert('XSS')</script><!-- 经过 Unicode 编码变形后的脚本 --><script>// 将 Unicode 编码的脚本进行解码并执行const encodedScript = '\u003c\u0073\u0063\u0072\u0069\u0070\u0074\u003e\u0061\u006c\u0065\u0072\u0074\u0028\u0027\u0058\u0053\u0053\u0027\u0029\u003c\u002f\u0073\u0063\u0072\u0069\u0070\u0074\u003e';const decodedScript = unescape(encodedScript.replace(/\\u/g, '%u'));const scriptElement = document.createElement('script');scriptElement.innerHTML = decodedScript;document.body.appendChild(scriptElement);</script>
</body></html>

2.事件处理程序

利用 HTML 元素的 onclick、onmouseover 等事件属性,当用户触发相应事件时,执行恶意代码。例如,在 “” 中,当图片无法加载时,就会触发 onerror 事件,执行恶意脚本。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>事件处理程序 XSS 示例</title>
</head><body><!-- 当图片无法加载时,触发 onerror 事件执行恶意脚本 --><img src="nonexistent.jpg" onerror="alert('XSS')"><!-- 鼠标悬停时触发 onmouseover 事件执行恶意脚本 --><div onmouseover="alert('XSS')">鼠标悬停此处</div>
</body></html>

3.JS 伪协议

通过 “javascript:” 伪协议在 URL 中嵌入 JavaScript 代码,当用户点击链接时,恶意脚本就会执行。例如,链接 “Click me”,用户点击后会弹出警告框。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>JS 伪协议 XSS 示例</title>
</head><body><!-- 点击链接执行 JavaScript 代码 --><a href="javascript:alert('XSS')">Click me</a>
</body></html>

4.编码绕过

将恶意脚本进行 Unicode 编码、HTML 实体编码等,绕过只检测明文恶意代码的过滤系统,在浏览器解析时还原执行。如将 “<” 编码为 “<”,“>” 编码为 “>”。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>编码绕过 XSS 示例</title>
</head><body><!-- 经过 HTML 实体编码的脚本 --><script>const encoded = '&lt;script&gt;alert(\'XSS\')&lt;/script&gt;';const decoded = document.createElement('div');decoded.innerHTML = encoded;const script = decoded.firstChild;document.body.appendChild(script);</script>
</body></html>

5.绕过长度限制

攻击者会把长 Payload 分割成短片段,在页面中进行拼接;或者利用 window.name 属性跨页面传递长 Payload。例如,将恶意脚本拆分成多个部分,通过多个 JavaScript 变量存储,再进行拼接执行。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>绕过长度限制 XSS 示例</title>
</head><body><script>// 长 Payload 分割成短片段const part1 = 'alert(';const part2 = '\'XSS\'';const part3 = ');';const fullPayload = part1 + part2 + part3;const scriptElement = document.createElement('script');scriptElement.innerHTML = fullPayload;document.body.appendChild(scriptElement);// 利用 window.name 属性跨页面传递长 Payload// 页面 1:设置 window.name// window.name = 'alert(\'XSS from window.name\');';// 页面 2:获取并执行 window.name 中的 Payloadconst payloadFromWindowName = window.name;const scriptFromWindowName = document.createElement('script');scriptFromWindowName.innerHTML = payloadFromWindowName;document.body.appendChild(scriptFromWindowName);</script>
</body></html>

6.使用标签

在 XSS 攻击中,攻击者常常巧妙利用各种 HTML 标签来达成恶意目的。许多 HTML 标签本身具备特殊功能,若被攻击者利用,就能注入恶意脚本,进而在用户浏览器中执行。

<iframe>标签可用于在当前页面嵌入其他网页内容。攻击者会精心构造恶意链接,当用户点击后,页面会嵌入包含恶意脚本的网页。比如:

<iframe src="http://恶意网站.com/恶意脚本页面.html"></iframe>

在此示例里,恶意网站的页面可能含有窃取用户信息的脚本,一旦用户加载了包含此<iframe>的页面,恶意脚本便会在用户浏览器中执行。

<object>标签主要用于在 HTML 页面中嵌入外部对象,像 Flash 文件、PDF 文件等。攻击者会制作带有恶意脚本的特殊文件,借助<object>标签嵌入到目标页面。例如:

<object data="恶意文件.swf" type="application/x-shockwave-flash"></object>

倘若这个恶意文件.swf文件中藏有恶意脚本,当用户访问包含该<object>标签的页面时,恶意脚本就会被触发执行。

<embed>标签同样能嵌入外部内容,常被用于嵌入多媒体文件、插件等。攻击者会利用它来嵌入恶意的多媒体文件,这些文件可能在播放或加载过程中执行恶意脚本。示例如下:

<embed src="恶意音频.mp3" type="audio/mpeg">

尽管 MP3 音频文件通常用于音频播放,但如果攻击者对其进行特殊处理,在文件中隐藏恶意脚本代码,当用户的浏览器尝试加载并解析这个音频文件时,恶意脚本就可能会被执行。

通过利用这些标签,攻击者增加了 XSS 攻击的多样性和隐蔽性,使得检测和防范工作变得更加困难。因此,开发者在处理用户输入和嵌入外部内容时,必须格外谨慎,进行严格的输入验证和安全检查,以防止被此类攻击手段利用。

四、XSS 攻击工具与平台

1.XSS 攻击平台

研究人员将多种功能封装到 XSS 攻击平台中,这些平台具备获取浏览器和计算机信息、钓鱼攻击等功能。攻击者可以通过这些平台更高效地实施 XSS 攻击,并收集攻击成果。

2.BEEF

BEEF 是一款强大的 XSS 攻击辅助平台,它能够与浏览器进行交互,注入脚本获取敏感数据,控制浏览器操作。BEEF 内置 Web 界面,方便攻击者进行操作和管理。

五、XSS 相关案例 - XSS 蠕虫

以 Samy 蠕虫为例,其利用 MySpace 网站的 XSS 漏洞进行传播,在短时间内造成了广泛的影响。Samy 蠕虫通过在用户的个人资料页面中注入恶意脚本,当其他用户访问该页面时,脚本会自动将蠕虫代码复制到他们的个人资料页面,从而实现快速传播。

六、XSS 防御方法

1.输入输出过滤

对用户输入数据进行严格过滤,转义或去除特殊字符,防止恶意脚本注入。同时,对输出数据也进行检查和转义,确保不会在页面中执行恶意脚本。在 Python 中,可以使用正则表达式过滤恶意脚本,示例如下:

import redef filter_xss(input_str):return re.sub(r'<script.*?>.*?</script>', '', input_str, flags=re.DOTALL)

2.HttpOnly Cookie

设置 Cookie 的 HttpOnly 属性,使 JavaScript 无法访问该 Cookie,防止 Cookie 被窃取,降低会话劫持的风险。在 PHP 中,可以使用 setcookie 函数设置 HttpOnly 属性:

setcookie("session_id", "123456", time() + 3600, "/", "example.com", false, true);

3.内容安全策略(CSP)

配置 CSP 策略限制页面加载资源的来源,阻止恶意脚本的执行。可以通过 HTTP 响应头 “Content-Security-Policy” 或 HTML 的 “” 标签来设置。例如,设置 “Content-Security-Policy: script-src'self'”,表示只允许从当前域名加载脚本。

4.验证输入数据类型和格式

确保用户输入的数据符合预期的类型和格式,防止攻击者利用非预期的数据格式进行攻击。例如,对于一个要求输入数字的字段,使用 JavaScript 进行验证:

function validateNumber(input) {return!isNaN(parseFloat(input)) && isFinite(input);}

5.JavaScript 框架与 XSS

5.1-jQuery

jQuery 是广泛使用的 JavaScript 框架,本身设计较为安全。但在实际应用中,若开发人员使用不当,如在使用 html ()、text () 等方法将用户输入内容插入到 DOM 中时,未对输入进行安全过滤,就可能引入 XSS 漏洞。例如:

$(document).ready(function() {$('.element').html(userInput);});
5.2-Vue.js

Vue.js 通过数据绑定和组件化开发提高了开发效率。但在数据绑定过程中,如果不对用户输入的数据进行安全处理,也可能导致 XSS。例如,在模板中直接使用未过滤的用户数据:

<template><div>{{ userData }}</div></template>
5.3-AngularJS

AngularJS 以强大的双向数据绑定和依赖注入等功能著称。但在处理用户输入和动态生成 HTML 内容时,如果缺乏安全验证,容易产生 XSS 漏洞。例如,在使用 ng-bind-html 指令绑定 HTML 内容时:

<div ng-bind-html="htmlContent"></div>

6.富文本与安全问题

6.1-富文本的风险

富文本内容通常包含 HTML 标签和可能的 JavaScript 代码,具有较高的安全风险。如果对富文本内容处理不当,攻击者可以在其中插入恶意脚本,当其他用户浏览这些内容时,脚本就会被执行,从而导致 XSS 攻击。

6.2-处理方法

可以使用安全的富文本编辑器,这些编辑器会对用户输入的内容进行过滤和净化,只允许特定的、安全的 HTML 标签和属性存在,去除可能包含恶意脚本的代码。另外,对富文本内容进行输出转义也是必要的,确保在展示时不会执行潜在的恶意脚本。

7.旧版浏览器的安全隐患

旧版本的 IE 浏览器存在一些安全缺陷,例如在处理 “Content-Type” 头信息时可能出现误判,将本应作为普通文本处理的内容错误地解析为脚本并执行,这就为 XSS 攻击提供了可乘之机。此外,旧版浏览器对一些安全特性的支持不完善,相比新版本浏览器,更容易受到 XSS 等攻击的影响。因此,建议用户及时升级浏览器版本,开发者在开发过程中,若需要支持旧版浏览器,要格外注意采取额外的安全防护措施。

小结

跨站脚本攻击(XSS)严重威胁着 Web 应用的安全,攻击者借助多种类型的 XSS 攻击和丰富的攻击技巧,试图窃取用户信息、劫持会话,对用户和网站造成极大危害。为了有效防范 XSS 攻击,我们需要从多个层面入手。

编码阶段,对用户输入和输出进行严格的过滤和转义,验证数据类型和格式;在部署阶段,合理配置 HttpOnly Cookie 和内容安全策略(CSP),借助 XSS Filter 等工具进行防护;在使用 JavaScript 框架时,遵循安全规范,防止因框架使用不当引入漏洞;对于富文本内容,采用安全的编辑器并进行输出转义。同时,要关注浏览器的版本更新,及时升级以避免旧版浏览器的安全隐患。只有构建全方位、多层次的安全防护体系,持续提升安全意识,才能有效抵御 XSS 攻击,营造安全可靠的网络环境。

喜欢就点点赞和关注评论一起进步呗

相关文章:

XSS 攻击(详细)

目录 引言 一、XSS 攻击简介 二、XSS 攻击类型 1.反射型 XSS 2.存储型 XSS 3.基于 DOM 的 XSS 4.Self - XSS 三、XSS 攻击技巧 1.基本变形 2.事件处理程序 3.JS 伪协议 4.编码绕过 5.绕过长度限制 6.使用标签 四、XSS 攻击工具与平台 1.XSS 攻击平台 2.BEEF 五…...

K8s负载均衡全解析:从入门到实战的完整指南

Kubernetes(K8s)作为容器编排的标准,其负载均衡机制是构建高可用、高弹性应用的关键。本文将全面介绍K8s负载均衡的核心概念、实现方式及最佳实践,帮助开发者和运维人员构建稳定高效的云原生应用。 一、K8s负载均衡的基础概念 在Kubernetes生态系统中,负载均衡是指将工作负…...

《ZooKeeper Zab协议深度剖析:构建高可用分布式系统的基石》

《ZooKeeper Zab协议深度剖析:构建高可用分布式系统的基石》 一、分布式协调的挑战与ZooKeeper的解决方案 1.1 分布式系统一致性难题 #mermaid-svg-iigak7YlgEw7o6lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-sv…...

OpenCV 图形API(6)将一个矩阵(或图像)与一个标量值相加的函数addC()

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 addC 函数将给定的标量值加到给定矩阵的每个元素上。该功能可以用矩阵表达式替换&#xff1a; dst src1 c \texttt{dst} \texttt{src1} \te…...

同步SVPWM调制策略的初步学习记录

最近项目需要用到一些同步调制SVPWM相关的内容&#xff08;现在的我基本都是项目驱动了&#xff09;&#xff0c;因此对该内容进行一定的学习。 1 同步SVPWM调制的背景 我们熟知的一些知识是&#xff1a;SVPWM&#xff08;空间矢量脉宽调制&#xff09;是一种用于逆变器的调制…...

六十天Linux从0到项目搭建(第十五天)(程序替换、exec流程示意图、核心特性)

1 为什么要有程序替换&#xff1f; 程序替换&#xff08;Process Replacement&#xff09;是操作系统中一个关键机制&#xff0c;它的核心目的是&#xff1a;让一个正在运行的进程&#xff08;通常是子进程&#xff09;停止执行当前代码&#xff0c;转而加载并执行一个全新的程…...

排序算法3-交换排序

目录 1.常见排序算法 2.排序算法的预定函数 2.1交换函数 2.2测试算法运行时间的函数 2.3已经实现过的排序算法 3.交换排序的实现 3.1冒泡排序 3.2快速排序 3.2.1递归的快速排序 3.2.1.1hoare版本的排序 3.2.1.2挖坑法 3.2.1.3lomuto前后指针法 3.2.2非递归版本的快…...

【Qt】数据库管理

数据库查询工具开发学习笔记 一、项目背景与目标 背景&#xff1a;频繁编写数据库查询语句&#xff0c;希望通过工具简化操作&#xff0c;提升效率。 二、总体设计思路 1. 架构设计 MVC模式&#xff1a;通过Qt控件实现视图&#xff08;UI&#xff09;&#xff0c;业务逻辑…...

Ant Design Vue 中的table表格高度塌陷,造成行与行不齐的问题

前言&#xff1a; Ant Design Vue: 1.7.2 Vue2 less 问题描述&#xff1a; 在通过下拉框选择之后&#xff0c;在获取接口数据&#xff0c;第一列使用了fixed:left&#xff0c;就碰到了高度塌陷&#xff0c;查看元素的样式结果高度不一致&#xff0c;如&#x…...

面经-项目

项目 项目(重点)问题1:描述在网页中题目点击提交后到题目结果出现的一系列后台反应【1】如何获取到用户提交的代码的?【2】_1. 题目细节都有哪些?【2】_2. 题目信息怎么存储的?【3】负载均衡算法的实现?【4】oj_server怎么连接对应的compile_server(编译主机)的?【5】oj_…...

Win10安装Linux的三种方法

通过 Windows 子系统 for Linux&#xff08;WSL&#xff09;安装 启用 “适用于 Linux 的 Windows 子系统” 可选功能&#xff1a; 图形界面方式&#xff1a;在【设置 -> 更新与安全 -> 开发者选项】中开启【开发人员模式】&#xff1b;在【程序和功能 -> 启用或关闭…...

【qt】文件类(QFile)

很高兴你能看到这篇文章&#xff0c;同时我的语雀文档也更新了许多嵌入式系列的学习笔记希望能帮到你 &#xff1a; https://www.yuque.com/alive-m4b9n 目录 QFile 主要功能QFile 操作步骤QFile 其他常用函数案例分析及实现功能一实现&#xff1a;打开文件并显示功能二实现:另…...

力扣hot100——最长连续序列(哈希unordered_set)

题目链接&#xff1a;最长连续序列 1、错解&#xff1a;数组做哈希表&#xff08;内存超出限制&#xff09; int longestConsecutive(vector<int>& nums) {vector<bool> hash(20000000010, false);for(int i0; i<nums.size();i){hash[1000000000nums[i]]t…...

3. 实战(一):Spring AI Trae ,助力开发微信小程序

1、前言 前面介绍了Spring boot快速集成Spring AI实现简单的Chat聊天模式。今天立马来实战一番&#xff0c;通过Trae这个火爆全网的工具&#xff0c;来写一个微信小程序。照理说&#xff0c;我们只是极少量的编码应该就可以完成这项工作。开撸~ 2、需求描述 微信小程序实现一…...

MySQL高级语句深度解析与应用实践

一、窗口函数&#xff1a;数据分析的利器 1. 窗口函数基础概念 窗口函数(Window Function)是MySQL 8.0引入的强大特性&#xff0c;它可以在不减少行数的情况下对数据进行聚合计算和分析 SELECT employee_name,department,salary,RANK() OVER (PARTITION BY department ORDER…...

SSE服务器主动推送至浏览器客户端,让你不再需要websocket

Server-Sent Events&#xff08;SSE&#xff09;是一种服务器向客户端推送实时更新的技术&#xff0c;基于HTTP协议。客户端通过EventSource API来接收事件流&#xff0c;而服务器则保持一个长连接&#xff0c;持续发送数据。这与传统的请求-响应模式不同&#xff0c;允许服务器…...

UE5新材质系统效果Demo展示

1、玉质材质&#xff0c;透明玻璃材质&#xff0c;不同透射和散射。 2、浅水地面&#xff0c;地面层&#xff0c;水层&#xff0c;地面湿度&#xff0c;水面高度&#xff0c;水下扰动&#xff0c;水下浇洒&#xff0c;水下折射 Substrate-Water Substrate-Water-CodeV2...

wps 怎么显示隐藏文字

wps 怎么显示隐藏文字 》文件》选项》视图》勾选“隐藏文字” wps怎么设置隐藏文字 wps怎么设置隐藏文字...

解决 macOS (M1 Pro) 上使用 Vite 进行 Build 打包时 Node 进程内存溢出的问题

解决 macOS (M1 Pro) 上使用 Vite 进行 Build 打包时 Node 进程内存溢出的问题 在搭载 M1 Pro 芯片的 macOS 系统上&#xff0c;使用 Vite 进行项目构建&#xff08;build&#xff09;时&#xff0c;您可能会遇到 Node 进程内存溢出的错误。特别是在使用较新版本的 Node.js&am…...

页面重构过程中如何保证良好的跨浏览器一致性?

在页面重构的过程中&#xff0c;为了确保网页能够在不同的浏览器中呈现一致的效果&#xff0c;我们需要采取一系列措施来提高跨浏览器的一致性。以下是几个关键步骤和技术要点&#xff1a; 使用标准化的HTML和CSS&#xff1a;始终遵循最新的Web标准编写代码&#xff0c;例如采用…...

CXL UIO Direct P2P学习

前言&#xff1a; 在CXL协议中&#xff0c;UIO&#xff08;Unordered Input/Output&#xff09; 是一种支持设备间直接通信&#xff08;Peer-to-Peer, P2P&#xff09;的机制&#xff0c;旨在绕过主机CPU或内存的干预&#xff0c;降低延迟并提升效率。以下是UIO的核心概念及UI…...

leetcode138.随即链表的复制

思路源于 【力扣hot100】【LeetCode 138】随机链表的复制&#xff5c;哈希表 采用一个哈希表&#xff0c;键值对为<原链表的结点&#xff0c;新链表的结点>&#xff0c;第一次遍历原链表结点时只创建新链表的结点&#xff0c;第二次遍历原链表结点时&#xff0c;通过键拿…...

03_MySQL工具介绍

文章目录 一、Navicat for MySQL1.1、安装 二、SQLyog2.1、安装 多数时候使用SQL语句对数据库进行操作不是很方便&#xff0c;特别是在查询操作时&#xff0c;显示的内容不够直观&#xff0c;此时我们需要借助图形化工具对数据库进行操作。 操作MySQL常用的图形工具如下&#x…...

《网络管理》实践环节01:OpenEuler22.03sp4安装zabbix6.2

兰生幽谷&#xff0c;不为莫服而不芳&#xff1b; 君子行义&#xff0c;不为莫知而止休。 1 环境 openEuler 22.03 LTSsp4PHP 8.0Apache 2Mysql 8.0zabbix6.2.4 表1-1 Zabbix网络规划&#xff08;用你们自己的特征网段规划&#xff09; 主机名 IP 功能 备注 zbx6svr 19…...

Qt Creator 中文 “error: C2001: 常量中有换行符“ 问题解决方法

Qt Creator 编译时出现‌中文 error: C2001: 常量中有换行符‌的问题&#xff0c;通常由文件编码与编译器字符集不兼容导致。 一、修改文件编码格式 ‌添加 UTF-8 BOM 签名‌ 在 Qt Creator 中设置&#xff1a;工具 -> 选项 -> 文本编辑器 -> 行为 -> UTF-8 BOM&a…...

Charles 抓包配置保姆教程(PC、IOS、Android)

抓包工具基础配置与使用指南 大家好&#xff0c;我是十一&#xff01;今天给大家分享一篇关于抓包工具的基础配置与使用指南。无论是开发、测试还是安全分析&#xff0c;抓包工具都是不可或缺的利器。本文将详细介绍如何配置和使用抓包工具&#xff0c;并特别推荐一款功能强大…...

洛谷题单1-P1001 A+B Problem-python-流程图重构

题目描述 输入两个整数 a,b&#xff0c;输出它们的和&#xff08;∣a∣,∣b∣≤109&#xff09;。 输入格式 两个以空格分开的整数。 输出格式 一个整数。 输入输出样例 输入 20 30输出 50方式-print class Solution:staticmethoddef oi_input():"""从…...

el-table 动态给每行增加class属性

el-table 动态给每行增加class属性 html代码 row-class-name属性&#xff0c;绑定方法 :row-class-name“tableRowClassName”, <el-table :data"tableData" border :row-class-name"tableRowClassName"> </el-table>js代码 tableRowClassNam…...

Opencv计算机视觉编程攻略-第四节 图直方图统计像素

Opencv计算机视觉编程攻略-第四节 图直方图统计像素 1.计算图像直方图2.基于查找表修改图像3.直方图均衡化4.直方图反向投影进行内容查找5.用均值平移法查找目标6.比较直方图搜索相似图像7.用积分图统计图像 1.计算图像直方图 图像统计直方图的概念 图像统计直方图是一种用于描…...

深度学习处理时间序列(5)

Keras中的循环层 上面的NumPy简单实现对应一个实际的Keras层—SimpleRNN层。不过&#xff0c;二者有一点小区别&#xff1a;SimpleRNN层能够像其他Keras层一样处理序列批量&#xff0c;而不是像NumPy示例中的那样只能处理单个序列。也就是说&#xff0c;它接收形状为(batch_si…...