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

安全测试|SSRF请求伪造

前言

SSRF漏洞是一种在未能获取服务器权限时,利用服务器漏洞,由攻击者构造请求,服务器端发起请求的安全漏洞,攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。

很多Web应用都提供了从其他的服务器上获取数据的功能,根据用户指定的URL,Web应用可以获取图片、下载文件、读取文件内容等。这种功能如果被恶意使用,将导致存在缺陷的Web应用被作为代理通道去攻击本地或远程服务器,这种形式的攻击被称为服务端请求伪造攻击。

一般情况下,SSRF攻击的目标是外网无法访问的内部系统。

本文主要分享以下技术,内容不断更新,欢迎关注!

一、漏洞原理

二、SSRF挖掘技巧

三、常见的SSRF攻击

3.1、针对服务器本身的SSRF攻击

3.2、针对其他后端系统的SSRF攻击

3.3、端口扫描

3.4、对内网web应用进行指纹识别及攻击其中存在漏洞的应用

3.5、文件读取和命令执行

四、绕过SSRF的常见防御

4.1、绕过利用黑名单防御

4.2、绕过利用白名单的防御

4.3、通过开放重定向绕过SSRF过滤器

五、SSRF防御

图片

01漏洞原理

SSRF的形成大多是由于服务端提供了从其他服务器获取数据的功能,但是没有对目标地址进行过滤和限制。

主要攻击方式:

1.对外网、服务器所在内网、本地进行端口扫描,获取一些服务的banner信息。

2.攻击运行在内网或者本地的应用程序。

3.对内网的web应用进行指纹识别(通过请求默认文件得到特定的指纹),对资产信息进行识别。

4.利用file协议读取本地文件。

5.攻击内外网的web应用,主要是使用HTTP GET请求就可以实现的攻击等。

比如,一个正常的Web应用本应该从指定URL获取网页文本内容或加载指定地址的图片,而攻击者利用漏洞伪造服务器端发起请求,从而突破了客户端获取不到数据的限制,如内网资源、服务器本地资源等。

如下代码:

<?php  $url=$_GET['url'];  echo file_get_contents($url);?> 

这段代码使用file_get_contents函数从用户指定的URL获取图片并展示给用户。此时如果攻击者提交如下payload,就可以获取到内网主机HTTP服务8000端口的开放情况

http://example.com/ssrf.php?url=http:192.168.209.134:8000

02SSRF挖掘技巧

目前常见的漏洞挖掘方式有两种:

1、从web功能上挖掘

①分享:通过url地址分享网页内容

②转码服务

③在线翻译

④图片的下载与加载

⑤图片、文章收藏功能

⑥未公开的API实现及调用URL的功能

2、从URL关键字挖掘

Share、wap、url、link、src、source、target、u、3g、display、sourceURL、imageURL、domain……

03常见的SSRF攻击

SSRF攻击通常利用信任关系来进行攻击并执行未经授权的操作。这些信任关系可能与服务器本身有关,也可能与同一系统内的其他后端系统有关。

3.1 针对服务器本身的SSRF攻击

在针对服务器本身的SSRF攻击中,攻击者诱使应用程序通过其环回网络接口向承载应用程序的服务器发出HTTP请求。通常,这将涉及为URL提供一个主机名,例如127.0.0.1(指向回送适配器的保留IP地址)或localhost(同一适配器的常用名称)。

例如:一个购物应用程序,该应用程序使用户可以查看特定商店中某商品是否有库存。为了提供库存信息,应用程序必须根据所涉及的产品和商店查询各种后端REST API。该功能是通过将URL通过前端HTTP请求传递到相关的后端API端点来实现的。因此,当用户查看某件商品的库存状态时,他们的浏览器会发出如下请求:

他们的浏览器会发出如下请求:​​​​​​​

POST /product/stock HTTP/1.0Content-Type: application/x-www-form-urlencodedContent-Length: 118stockApi=http://stock.weliketoshop.net:8080/product/stock/check%3FproductId%3D6%26storeId%3D1

服务器向指定的URL发出请求,检索库存状态,然后将其返回给用户。

在这种情况下,攻击者可以修改请求以指定服务器本身本地的URL。

例如:​​​​​​​

POST /product/stock HTTP/1.0Content-Type: application/x-www-form-urlencodedContent-Length: 118
stockApi=http://localhost/admin

在这里,服务器将获取/admin的内容并将其返回给用户。

现在攻击者可以直接访问/admin;但是,通常只有适当的经过身份验证的用户才能访问管理功能。因此,直接访问URL时将不会看到任何有价值的内容。但是,当对/admin的请求来自本地计算机时,将绕过常规的访问控制,该应用程序授予对管理功能的完全访问权限,因为该请求来自受信任的位置。

为什么应用程序会以这种方式运行,并且隐式信任来自本地计算机的请求?发生这种情况可能有多种原因:

1、该访问控制检查可能会在应用服务器的前面,利用一个不同的组件来实现,与服务器本身建立连接后,将绕过检查。

2、为了灾难恢复的目的,该应用程序可能允许无需登录即可对本地计算机上的任何用户进行管理访问,这为管理员提供了一种在丢失凭据的情况下恢复系统的方法。这里假设是来自服务器本身的用户才能完全受信任。

3、管理界面可能正在侦听的端口号与主应用程序不同,因此用户可能无法直接访问。

在这种信任关系中,由于来自本地计算机的请求与普通请求的处理方式不同,这些信任关系会使SSRF成为严重漏洞。

3.2 针对其他后端系统的SSRF攻击

SSRF引起的另一种信任关系是:服务器能够与用户无法直接访问的其他后端系统进行交互,这些系统通常具有不可路由的专用IP地址。由于后端系统通常受网络拓扑保护,因此它们的安全状态较弱。在许多情况下,内部后端系统包含敏感功能,能够与该系统进行交互的任何人都可以在不进行身份验证的情况下对其进行访问。

在前面的示例中,假设在后端URL处有一个管理界面 https://192.168.0.68/admin

在这里,攻击者可以通过提交以下请求来利用SSRF漏洞来访问管理界面:​​​​​​​

POST /product/stock HTTP/1.0Content-Type: application/x-www-form-urlencodedContent-Length: 118
stockApi=http://192.168.0.68/admin

3.3 端口扫描​​​​​​​

http://example.com/ssrf.php?url=http:ip:21/http://example.com/ssrf.php?url=http:ip:443/http://example.com/ssrf.php?url=http:ip:80/http://example.com/ssrf.php?url=http:ip:3306/等

我们可以通过响应时间、返回的错误信息、返回的服务Banner信息、响应时间等来对端口开放情况进行给判断。

3.4 对内网web应用进行指纹识别及攻击其中存在漏洞的应用

大多数web应用都有一些独特的文件和目录,通过这些文件可以识别出应用的类型,甚至详细的版本。基于此特点可利用SSRF漏洞对内网Web应用进行指纹识别,如下Payload可以识别主机是否安装了WordPress:

http://example.com/ssrf.php?url=https%3A%2F%2F127.0.0.1%3A443%2Fwp-content%2Fthemes%2Fdefault%2Fimages%2Faudio.jpg

得到指纹后,便能有针对性地对其存在的漏洞进行利用,如下payload展示了如何利用SSRF漏洞攻击内网的JBOSS应用:

http://example.com/ssrf.php?url=http%3A%2F%2F127.0.0.1%3A8080%2Fjmx-console%2FHtmlAdaptor%3Faction%3DinvokeOp%26name%

3.5 文件读取和命令执行

1、文件读取

如果攻击者指定了file协议,则可通过file协议来读取服务器上的文件内容,如下:

http://example.com/ssrf.php?url=file:///etc/passwd

2、命令执行

例如PHP环境下,利用expect协议执行系统命令,如下:

http://example.com/ssrf.php?url=expect://id

04绕过SSRF的常见防御

4.1 绕过利用黑名单防御

一些应用程序阻止包含主机名(如127.0.0.1和localhost)或敏感URL(如/admin)的输入/admin。在这种情况下,绕过方法如下:

1、替代IP127.0.0.1,例如2130706433、017700000001、127.1

2、注册您自己的域名,该域名解析为127.0.0.1

您可以spoofed.burpcollaborator.net用于此目的

3、使用URL编码或大小写变化对阻塞的字符串进行混淆

4.2 绕过利用白名单的防御

某些应用程序仅允许输入匹配,以允许值开头或包含允许值的白名单的输入。在这种情况下,您有时可以利用URL解析中的不一致来绕过过滤器。

URL规范包含许多功能,在实现URL的临时分析和验证时可能会被忽略:

1、使用@字符在主机名之前的URL中嵌入凭据。例如:https://expected-host@evil-host

2、使用该#字符来指示URL片段。例如:https://evil-host#expected-host

3、利用DNS命名层次结构将所需的输入放入DNS名称中。例如:https://expected-host.evil-host

4、使用URL编码字符来混淆URL解析代码,如果实现过滤器的代码与执行后端HTTP请求的代码以不同的方式处理URL编码的字符,则特别有用

5、这些技术可以组合在一起使用

4.3 通过开放重定向绕过SSRF过滤器

通过利用开放重定向漏洞,有时可以绕过任何基于过滤器的防御。

假设严格验证了用户提交的URL,以防止恶意利用SSRF行为,但是,允许使用URL的应用程序包含一个打开的重定向漏洞。提供用于使后端HTTP请求支持重定向的API,可以构造一个满足过滤条件的URL,并导致将请求重定向到所需的后端目标。

例如,假设应用程序包含一个开放重定向漏洞,其中包含以下URL:

/product/nextProduct?currentProductId=6&path=http://evil-user.net

返回重定向到:

http://evil-user.net

以利用开放重定向漏洞绕过,并按如下方式利用SSRF漏洞:​​​​​​​

POST /product/stock HTTP/1.0Content-Type: application/x-www-form-urlencodedContent-Length: 118
stockApi=http://weliketoshop.net/product/nextProduct?currentProductId=6&path=http://192.168.0.68/admin

这种SSRF漏洞之所以有效,是因为应用程序首先验证了提供的stockAPIURL是否在允许的域上,然后,应用程序提供的URL,触发重定向,并向攻击者选择的内部URL发出请求。

05SSRF防御

SSRF漏洞的防御主要是保证用户请求的合法性、服务器行为的合规性两个方面。

1、限制请求端口只能为web端口,只允许访问HTTP和HTTPS的请求;

2、过滤返回的信息;

3、禁止不常使用的端口;

4、限制不能访问内网的IP,防止对内网进行攻击;

5、对于DNS重绑定,使用DNS缓存或者Host白名单

相关文章:

安全测试|SSRF请求伪造

前言 SSRF漏洞是一种在未能获取服务器权限时&#xff0c;利用服务器漏洞&#xff0c;由攻击者构造请求&#xff0c;服务器端发起请求的安全漏洞&#xff0c;攻击者可以利用该漏洞诱使服务器端应用程序向攻击者选择的任意域发出HTTP请求。 很多Web应用都提供了从其他的服务器上…...

Redisson介绍和入门使用

一、什么是Redisson&#xff1f; Redisson是一个在Redis的基础上实现的Java驻内存数据网格&#xff08;In-Memory Data Grid&#xff09;。它不仅提供了一系列的分布式的Java常用对象&#xff0c;还提供了许多分布式服务&#xff0c;其中就包含了各种分布式锁的实现。 官网地址…...

TUSB422 MCU 软件用户指南

文章目录 TUSB422 MCU 软件用户指南 目录表格图表1. 介绍2. 配置2.1 通用配置2.2 USB-PD 3.0 支持2.3 VDM 支持 3. 代码 ROM/RAM 大小优化4. 通过 UART 调试4. 移植到其他微控制器 TUSB422 MCU 软件用户指南 摘要 本文档是 TUSB422 微控制器基于 Type-C 端口控制&#xff08;…...

归并排序 和 七大算法的总结图

目录 什么是递归排序&#xff1a; 图解&#xff1a; 递归方法&#xff1a; 代码实现&#xff1a; 思路分析&#xff1a; 非递归方法&#xff1a; 思路&#xff1a; 代码实现&#xff1a; 思路分析&#xff1a; 什么是递归排序&#xff1a; 先将数据分解成诺干个序列&#xff0…...

MySQL调用存储过程和存储函数

【图书推荐】《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;》-CSDN博客 《MySQL 9从入门到性能优化&#xff08;视频教学版&#xff09;&#xff08;数据库技术丛书&#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com) MySQL9数据库技术_夏天又到了…...

类与对象(OOP)

类(Class) 类是对象的模板或蓝图&#xff0c;用来描述对象的属性和行为。 动态与静态是同一张图像&#xff0c;最终效果也是相同 类的组成分别由&#xff1a; 属性(成员变量)&#xff1a;描述对象的状态。 方法(成员方法):描述对象的行为。 构造函数&#xff1a;用于创建对象…...

接入 SSL 认证配置:满足等保最佳实践

前言 随着信息安全形势的日益严峻&#xff0c;等保&#xff08;信息安全等级保护&#xff09;要求成为各行业信息系统必须遵守的标准。在数据库领域&#xff0c;OpenGauss作为一款高性能、安全、可靠的开源关系型数据库&#xff0c;也需要满足等保要求&#xff0c;确保数据的安…...

PyTorch Lightning多GPU分布式日志介绍

分布式日志是指在分布式系统中,多个节点(如多台机器或多个 GPU)协同工作时,对系统运行状态、错误信息、性能指标等进行记录的过程。在 多 GPU/分布式训练 环境下,多个进程会同时运行,普通的 print() 或 logging 可能会在所有 GPU 上重复输出,导致日志混乱。PyTorch Ligh…...

LCR 160. 数据流中的中位数

文章目录 1.题目[LCR 160. 数据流中的中位数](https://leetcode.cn/problems/shu-ju-liu-zhong-de-zhong-wei-shu-lcof/solutions/477593/zi-jie-ti-ku-jian-41-kun-nan-shu-ju-liu-zhong-de-z/)2.思路3.代码 1.题目 LCR 160. 数据流中的中位数 **中位数 **是有序整数列表中的…...

post、get、delete、put请求

一、配置axios拦截器 // src/utils/request.js import axios from axios;// 创建 axios 实例 const instance axios.create({baseURL: https://api.example.com, // 你的 API 基础 URL//timeout: 10000, // 请求超时时间 });// 请求拦截器 instance.interceptors.request.use…...

css: 针对属性left/right/top/bottom为啥设置transition动画不起作用

如题&#xff1a; 在css的position中 left/right/top/bottom 这类位置属性值如果考虑使用transition来添加动画&#xff0c;transition它会优先考虑left/top属性&#xff0c;而此时transition触发需要的是数值型属性&#xff0c;如果设置为auto则系统会默认不考虑将位置属性添加…...

计算机网络(1)基础篇

目录 1.TCP/IP 网络模型 2.键入网址--->网页显示 2.1 生成HTTP数据包 2.2 DNS服务器进行域名与IP转换 2.3 建立TCP连接 2.4 生成IP头部和MAC头部 2.5 网卡、交换机、路由器 3 Linux系统收发网络包 1.TCP/IP 网络模型 首先&#xff0c;为什么要有 TCP/IP 网络模型&a…...

机器学习所需要的数学知识【01】

总览 导数 行列式 偏导数 概理论 凸优化-梯度下降 kkt条件...

ArcGISPro AA表O_Name字段 内容 复制到BB表BB字段里

import arcpy# 设置工作空间和要处理的表路径 resource_shape_table r"AA表.shp" # 源表路径 resource_assets_table r"BB表.shp" # 目标表路径# 使用 SearchCursor 读取源表中的 O_Name 字段 with arcpy.da.SearchCursor(resource_shape_table, [O_Na…...

2023-arXiv-CoT Prompt 思维链提示提升大型语言模型的推理能力

arXiv | https://arxiv.org/abs/2201.11903 摘要&#xff1a; 我们探讨了如何生成思维链&#xff08;一系列中间推理步骤&#xff09;显著提高大型语言模型执行复杂推理的能力。在三个大型语言模型上的实验表明&#xff0c;思维链提示提高了一系列算术、常识和符号推理任务的性…...

机器学习数学基础:21.特征值与特征向量

一、引言 在现代科学与工程的众多领域中&#xff0c;线性代数扮演着举足轻重的角色。其中&#xff0c;特征值、特征向量以及相似对角化的概念和方法&#xff0c;不仅是线性代数理论体系的核心部分&#xff0c;更是解决实际问题的有力工具。无论是在物理学中描述系统的振动模式…...

逻辑分析仪的使用-以STM32C8T6控制SG90舵机为例

STM32C8T6控制SG90舵机 1.逻辑分析仪作用 逻辑分析仪在嵌入式开发中的作用非常重要&#xff0c;它是开发、调试和排错过程中的一个不可或缺的工具。具体来说&#xff0c;逻辑分析仪的作用包括以下几个方面&#xff1a; 1.信号捕获和分析&#xff1a; 逻辑分析仪能够实时捕获多个…...

QCustomplot库运用

最近需要用到这个库显示数据&#xff0c;需要在一个曲线图4个Y轴共用一个X轴&#xff0c;并且做游标&#xff0c;跟随鼠标移动&#xff0c;并且实时反馈数据到表格中。记录一下程序。 customPlot new QCustomPlot(this); customPlot->setBackground(QBrush(QColor(204,204,…...

数据中心网络监控

数据中心是全球协作的特定设备网络&#xff0c;用来在internet网络基础设施上传递、加速、展示、计算、存储数据信息。 对于任何利用IT基础设施的企业来说&#xff0c;数据中心都是运营的核心&#xff0c;它本质上为整个业务网络托管业务应用程序和存储空间。数据中心可以是任…...

定义+类比

定义:间接量表是备选问题或者是备选语句或者是语句中选择合适的语句表达其态度&#xff0c;最后选择是一个合适的语句 A给具体的表打分&#xff0c;是直接上数字&#xff0c;而不是选择合适的语句表达其态度 B给排序&#xff0c;也是通过数字来表达其态度&#xff0c;也不是选择…...

深度学习框架探秘|PyTorch:AI 开发的灵动画笔

前一篇文章我们学习了深度学习框架——TensorFlow&#xff08;深度学习框架探秘&#xff5c;TensorFlow&#xff1a;AI 世界的万能钥匙&#xff09;。在人工智能领域&#xff0c;还有一个深度学习框架——PyTorch&#xff0c;以其独特的魅力吸引着众多开发者和研究者。它就像一…...

NAT模式 vs DR模式:LVS 负载均衡技术的优劣与适用场景

1. NAT 模式&#xff08;Network Address Translation&#xff09; 工作原理 请求路径&#xff1a;客户端请求发送到虚拟 IP&#xff08;VIP&#xff09;&#xff0c;负载均衡器&#xff08;Director&#xff09;通过 DNAT&#xff08;目标地址转换&#xff09;将请求转发到真…...

八大排序——归并排序

目录 1.基本思想 2.动态图 3.分解的时候我们可以使用递归的方式进行 代码解释 1. main 方法 2. mergeSort 方法 3. merge 方法 示例运行过程 初始数组 每轮排序后的数组 代码总结 合并两个有序序列 1.基本思想 归并排序就是递归得将原始数组递归对半分隔&#xff0c…...

YOLO算法模型检测利用手机IP摄像头

1.yolo算法训练模型 yolov5训练网络数据集_yolo数据集 csdn-CSDN博客 2.模型检测 检测文件参数&#xff1a;yolov5的detect.py中基础参数分析-CSDN博客 3.进行IP摄像头检测 3.1下载IP摄像头 3.2打开与使用IP摄像头&#xff08;确保手机与电脑在同一WiFi&#xff08;局域网…...

前端职业规划

前端开发的职业规划可以根据个人兴趣、技术深度和职业目标来制定。以下是一个典型的前端开发者职业发展路径&#xff0c;涵盖了从初级到高级的不同阶段&#xff0c;以及未来的发展方向&#xff1a; 1. 初级阶段&#xff08;0-2 年&#xff09; 目标&#xff1a;掌握基础技能&a…...

百度舆情优化:百度下拉框中的负面如何清除?

百度的下拉词、相关搜索、大家还在搜有负面词条&#xff0c;一直是企业公关经理头疼的问题&#xff0c;小马识途营销顾问深耕网络营销领域十几年&#xff0c;对百度SEO优化、百度下拉框、百度相关搜索、自媒体营销、短视频营销等等技巧方面积累了一定的方法和技巧。 对于百度下…...

Java中如何高效地合并多个对象的List数据:方法与案例解析!

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。运营社区&#xff1a;C站/掘金/腾讯云/阿里云/华为云/51CTO&#xff1b;欢迎大家常来逛逛 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互…...

【Vue】打包vue3+vite项目发布到github page的完整过程

文章目录 第一步&#xff1a;打包第二步&#xff1a;github仓库设置第三步&#xff1a;安装插件gh-pages第四步&#xff1a;两个配置第五步&#xff1a;上传github其他问题1. 路由2.待补充 参考文章&#xff1a; 环境&#xff1a; vue3vite windows11&#xff08;使用终端即可&…...

编译和链接【四】链接详解

文章目录 编译和链接【四】链接详解前言系列文章入口符号表和重定位表链接过程分段组装符号决议重定位 编译和链接【四】链接详解 前言 在我大一的时候&#xff0c; 我使用VC6.0对C语言程序进行编译链接和运行 &#xff0c; 然后我接触了VS&#xff0c; Qt creator等众多IDE&…...

C语言进阶——4自定义类型(2)— 位段/枚举/联合体

目录 2. 位段2.1 什么是位段2.2 位段的内存分配2.3 位段的跨平台问题2.4 位段的应用 3. 枚举3.1 枚举类型的定义3.2 枚举的优点3.3 枚举的使用 4. 联合&#xff08;共用体&#xff09;4.1 联合类型的定义4.2 联合的特点4.3 联合大小的计算 2. 位段 2.1 什么是位段 位段的声明…...

企业级高可用 Kubernetes 实践:基于青云 LB 搭建容灾与负载均衡集群全攻略

一、前言 在企业生产环境,k8s高可用是一个必不可少的特性,其中最通用的场景就是如何在 k8s 集群宕机一个节点的情况下保障服务依旧可用。部署高可用k8s集群对于企业级云平台来说是一个根本性的原则,容错、服务可用和数据安全是高可用基础设施的关键。本文是在青云上利用青云…...

250213-异常exception

1. 概念 异常的抛出&#xff08;throw&#xff09;&#xff1a;若在方法运行中出现错误&#xff0c;则方法会生成代表该异常的一个对象&#xff0c;并把它交给运行时系统&#xff0c;这个过程叫做抛出。 异常的捕获&#xff08;catch&#xff09;&#xff1a;运行时系统接收到…...

MySQL - 索引 - 介绍

索引(Index)是帮助数据库高效获取数据的数据结构. 结构 语法 创建索引 creat [unique] index 索引名 on 表名 (字段名, ...); //创建唯一索引时加上unique, 多个字段用逗号隔开 查看索引 show index from 表名; 删除索引 drop index 索引名 on 表名;...

每日一题——90. 子集 II

题目链接&#xff1a;90. 子集 II - 力扣&#xff08;LeetCode&#xff09; 代码&#xff1a; class Solution { private:vector<vector<int>> result;vector<int> path;void traversal(vector<int>& nums,int startindex,vector<bool> …...

Mysql进阶篇(mysqlcheck - 表维护程序)

mysqlcheck的作用 mysqlcheck客户端用于执行表维护&#xff0c;可以对表进行&#xff1a;分析、检查、优化或修复操作。 &#xff08;1&#xff09;分析的作用是查看表的关键字分布&#xff0c;能够让 sql 生成正确的执行计划&#xff08;支持 InnoDB&#xff0c;MyISAM&#x…...

ChartDB:一个基于Web的可视化数据库设计工具

这次给大家介绍一个可视化的数据库设计工具&#xff1a;ChartDB。 ChartDB 是一个免费开源的数据库可视化设计工具&#xff0c;支持的数据库包括 MySQL、MariaDB、PostgreSQL、Microsoft SQL Server、SQLite、ClickHouse 等。 对于已有的数据库&#xff0c;ChartDB 提供了一键…...

Java NIO基础与实战:如何提升IO操作性能

Java NIO 概述 Java NIO&#xff08;新 I/O&#xff09;是 Java 提供的一个更为高效的 I/O 处理框架。Java NIO&#xff08;New I/O&#xff09;是对传统 I/O&#xff08;java.io&#xff09;模型的改进&#xff0c;它引入了非阻塞 I/O 操作和面向缓冲区的数据读写方式&#x…...

Elasticsearch:同义词在 RAG 中重要吗?

作者&#xff1a;来自 Elastic Jeffrey Rengifo 及 Toms Mura 探索 RAG 应用程序中 Elasticsearch 同义词的功能。 同义词允许我们使用具有相同含义的不同词语在文档中搜索&#xff0c;以确保用户无论使用什么确切的词语都能找到他们所寻找的内容。你可能会认为&#xff0c;由于…...

Python - Python正则表达式

正则表达式&#xff08;Regular Expression&#xff09;&#xff0c;又称规则表达式。正则表达式&#xff08;Regular Expression&#xff09;是一组由字母和符号组成的特殊文本&#xff0c;用于从文本中找出满足特定格式的句子。正则表达式通常被用来检索、替换那些符合某个模…...

DeepSeek 指导手册(入门到精通)

第⼀章&#xff1a;准备篇&#xff08;三分钟上手&#xff09;1.1 三分钟创建你的 AI 伙伴1.2 认识你的 AI 控制台 第二章&#xff1a;基础对话篇&#xff08;像交朋友⼀样学交流&#xff09;2.1 有效提问的五个黄金法则2.2 新手必学魔法指令 第三章&#xff1a;效率飞跃篇&…...

Android adb测试常用命令大全

目录 一、查看最上层成activity名字: 二、查看Activity的任务栈&#xff1a; 三、获取安装包信息 四、性能相关 1、显示CPU信息 : 2、查看CPU使用信息 3、内存信息&#xff08;meminfo package_name or pid 使用程序的包名或者进程id显示内存信息&#xff09; 4、电量信…...

【python语言应用】最新全流程Python编程、机器学习与深度学习实践技术应用(帮助你快速了解和入门 Python)

近年来&#xff0c;人工智能领域的飞速发展极大地改变了各个行业的面貌。当前最新的技术动态&#xff0c;如大型语言模型和深度学习技术的发展&#xff0c;展示了深度学习和机器学习技术的强大潜力&#xff0c;成为推动创新和提升竞争力的关键。特别是PyTorch&#xff0c;凭借其…...

在不知道进程的情况下怎么关闭

在不知道具体进程ID&#xff08;PID&#xff09;或者进程可能会变动的情况下&#xff0c;关闭MinIO服务器的方法通常依赖于你如何启动MinIO以及你的操作系统环境。以下是一些建议的步骤&#xff1a; 1. 使用系统服务管理工具 如果你将MinIO配置为系统服务&#xff08;例如在L…...

算力平台 驱动云的使用

驱动云的使用 1 进入官网注册2 上传数据3 上传模型4 创建项目5 开发环境6 停止使用 1 进入官网注册 点击这个进入 可以看到注册之后送十个算力点 如果不训练&#xff0c;仅仅上传数据和模型&#xff0c;那么也是要收费的&#xff0c;因为存储数据要占用驱动云的空间。 2 上…...

高校LabVIEW开发调试中的常见问题

在高校进行LabVIEW开发调试时&#xff0c;常常面临硬件选型不当、方案设计不合理、布线不专业以及人员流动性强等问题。这些问题可能影响项目的进展和质量。本文将总结这些问题&#xff0c;并给出具体的解决方案&#xff0c;帮助学生和团队更高效地开展开发工作。 ​ 1. 硬件选…...

数据结构——结构体位域、typedef类型重定义、宏、共用体union、枚举、虚拟内存划分

一、结构体位域 1.1 结构体位域的基础 结构体位域&#xff1a;把结构体字节大小扣到极致的一个类型&#xff0c;以bit单位 格式&#xff1a;struct 位域体名{数据类型 位域名:位域大小;数据类型 位域名:位域大小;...};解析&#xff1a;位域体名&#xff1a;可有可无&#xff…...

git bash删除库中的分支与文件

一、 在 GitHub 上删除非 main 分支的步骤可以分为两部分&#xff1a;首先在本地删除该分支&#xff0c;然后在 GitHub 上删除远程分支。以下是详细的步骤&#xff1a; 1. 删除远程分支&#xff08;在 GitHub 上删除&#xff09; 打开 GitHub 仓库页面&#xff0c;进入你的仓…...

连锁收银系统的核心架构与技术选型

在连锁门店的日常运营里&#xff0c;连锁收银系统扮演着极为重要的角色&#xff0c;它不仅承担着交易结算的基础任务&#xff0c;还关联着库存管理、会员服务、数据分析等多个关键环节。一套设计精良的核心架构与合理的技术选型&#xff0c;是保障收银系统高效、稳定运行的基础…...

称呼计算器:智能科技,简化您的计算生活

一款手机应用程序&#xff0c;安卓设备上使用。这款计算器应用以其简洁的界面、实用的功能和良好的用户体验而受到用户的喜爱。 计算器的主要特点包括&#xff1a; 基本计算功能&#xff1a;支持加、减、乘、除等基本运算。 科学计算器模式&#xff1a;提供更高级的数学运算功…...

qt的QMainWindow保存窗口和恢复窗口状态

保存窗口状态 QSettings settings("MyCompany", "MyApp"); // 指定存储的应用信息 settings.setValue("mainWindowState", saveState());saveState() 返回一个 QByteArray&#xff0c;包含 所有停靠窗口和工具栏的状态。QSettings 用于存储数据…...