Web漏洞分析-SQL注入XXE注入(中上)

      随着互联网的不断普及和Web应用的广泛应用,网络安全问题愈发引起广泛关注。在网络安全领域中,SQL注入和XXE注入是两个备受关注的话题,也是导致许多安全漏洞的主要原因之一。本博客将深入研究这两种常见的Web漏洞,带您探寻背后的原理、攻击方式和防御策略。
       SQL注入是一种臭名昭著的攻击方式,通过在输入框中插入恶意SQL语句,黑客可以绕过身份验证,进而访问、篡改或删除数据库中的数据。我们将探讨SQL注入的不同形式,以及如何通过正确的输入验证和参数化查询等手段来有效预防这类攻击。
       另一方面,XXE注入则利用XML处理器解析XML输入时的弱点,使攻击者能够读取本地文件、发起远程请求等。我们将详细分析XXE注入的工作原理,并介绍如何使用安全的XML解析器配置来降低风险。通过了解这两种漏洞的内在机制,我们希望能够为开发者、安全从业者以及对网络安全感兴趣的人们提供关于Web应用安全的深度认识。在这个信息互联的时代,保护我们的Web应用免受SQL注入和XXE注入等威胁是至关重要的。

三、SQL盲注

1、SQL盲注概述

(1)、正确浏览器前端反应

(2)错误浏览器前端反应

如果数据库运行返回结果时只反馈对错不会返回数据库兰中的信息此时可以采用逻辑判断是否正确的盲注来获取信息

(3)、盲注是不能通过直接显示的途径来获取数据库数据的方法

在盲注中,攻击者根据其返回页面的不同来判断信息(可能是页面内容的不同,也可以是响应时间不同)。一般情况下,盲注可分为三类:

①、布尔盲注

②、时间盲注

③、报错型盲注

(4)、报错型盲注

①、正确时浏览器前端的反应

②、错误时浏览器前端的反应

(5)、布尔盲注

某些查询是不需要返回结果的,仅判断查询语句是否正确执行即可,所以其返回可以看做一个布尔值,正常显示为true,报错或是其他不正常显示为false。

①、查询语句

SELECT userid FROM member WHERE u_name=$Sname AND u_pass=$pass;

②、注入语句

name=-1' and (select mid(u name,1,1) from member where userid=1)='a'

name=-1' and (select mid(u_name,2,1) from member where userid=1)='d'

name=-1' and (select mid(u name,3,1) from member where userid=1)='m'

name=-1' and (select mid(u name.4,1) from member where userid=1)='i'

name=-1' and (select mid(u name5,1) from member where userid=1)='n'

(6)、时间盲注

某些查询是不需要返回结果的,仅判断查询语句是否正确执行即可,,但是由于某些限制,布尔盲注的关键字符带入不进去,这时候可以使用sleep来进行时间盲注,取页面执行时间(结束时间-开始时间)来判断sleep函数是否正常执行,所以其是否正常执行可以看做一个布尔值,正常显示为true,报错或是其他不正常显示为false

①、查询语句:

SELECT userid FROM member WHERE u name=$name AND u_pass=$pass;

②、注入语句

name=-1' and (select mid(u name,1,1) from member where userid=1)='a' and (select sleep(3))

name=-1' and (select mid(u name,2,1) from member where userid=1)='d' and (select sleep(3))

name=-1' and (select mid(u name,3,1) from member where userid=1)='m' and (select sleep(3)

name=-1' and (select mid(u name,4,1) from member where userid=1)-'i' and (select sleep(3))

name=-1' and (select mid(u name,5,1) from member where userid=1)='n' and (select sleep(3))

(7)、二分法SQL盲注示例

2、SQL盲注常用函数

(1)、使用条件语句

(2)、布尔型

left(a,b)从左侧截取 a 的前 b 位:left(database0,1)>'s'

substr(a,b,c)从 b 位置开始, 截取字符串 a的 c长度

Ascii()将某个字符转换为 ascii 值:ascii(substr(user),1,1]]=101#

mid(a,b,c)从位置 b 开始,截取 a字符串的 c位:

regexp正则表达式的用法,user()结果为 root, regexp 为匹配 root 的正则表达式:selectuser()

(3)、常见报错注入函数

①、floor(Mysql): and (select 1 from (select count(*),concat(version0,floor(rand(0)*2))x

from information schema.tables group by x)a);

②、Extractvalue(Mysql): and extractvalue(1, concat(0x5c, (select table name from information schema.tables limit 1)));

③、Updatexml(Mysql) :and 1=(updatexml(1,concat(0x3a,(select user())),1))

④、EXP: Exp(~(select * from (select user0)a))

⑤、UTL INADDR.get host address(Oracle): and 1=utl inaddr.get host address((select banner(from svs.v Sversion where rownume

(4)、函数

①、left(a,b)函数

(1)、LEFTO函数是一个字符串函数,它返回具有指定长度的字符串的左边部分。LEFT(str,length);

如果str或length参数为NULL,则返回NULL值。

(2)、str是要提取子字符串的字符串

(3)、length是一个正整数,指定将从左边返回的字符数

②、left () 函数

(1)、length为0或为负,则LEFT返回一个空字符串

(2)、length大于str字符串的长度,则LEFT返回整个str字符串

③、length ()函数

(1)、Length () 介绍

(2)、返回字符串str的长度,以字节为单位。一个多字节字符算作多字节

(3)、在mysql内置函数里面查看字符串长度的还有一个函数是char length,两个函数的区别是:length:一个汉字是算三个字符,一个数字或字母算一个字符。 char length: 不管汉字还是数字或者是字母都算是一个字符。

(4)、这意味着对于包含五个两字节字符的字符串LENGTH()返回10,而CHAR_LENGTHO返回5

④、substr ()或substring函数

(1)、SBUSTR(str,pos); 就是从pos开始的位置,一直截取到最后

  1. 、SUBSTR(str,pos,len);表示从pos开始的位置,截取len个字符(空白也算字符)

⑤、ord ()和mid ()函数

(1)、函数ord()函数返回字符串str的最左面字符的ASCII代码值。

(2)、函数mid()用于得到一个字符串的一部分。这个函数被MySOL支持,但不被MS SQL Server和Oracle支持。在SQLServer,Oracle 数据库中,我们可以使用 SQL SUBSTRING函数或者 SQLSUBSTR函数作为替代。

⑥、cast()和convert()函数

MySQL 的CAST()和CONVERT()函数可用来获取一个类型的值,并产生另一个类型的值。

⑦、ifnull ()函数

IFNULL(A,B)意义是当字段A是NULL时取B,不是NULL时取A的值

⑧、延时函数sleep ()或benchmark()

通过在MySQL中执行select sleep(N)可以让此语句运行N秒钟

前提条件:指定条件的记录存在时才会停止指定的秒数

例如:查询条件为name=’pig’,结果表明记录不存在,执行时间为0

基于时间的盲注在使用延迟函数上可以有两个选择:

BENCHMARK(count,expr)函数,

(2) sleep(time)函数

前者通过将 expr语句执行 count次来达到延迟的目的,后者是直接延迟 time时间。

benchmark是Mysql的一个内置函数,其作用是来测试一些函数的执行速度。benchmark()中带有两个参数,第一个是执行的次数,第二个是要执行的函数或者是表达式。

⑨、Xpath类型函数(MysglVersion >=5.1.5)

(1) updatexml ()函数功能:改变文档中符合条件的节点的值

UPDATEXML (XML document, XPath string, new_value);

第一个参数:XML document是String格式,为XML文档对象的名称

第二个参数: XPath_string (Xpath格式的字符串)

第三个参数: new_value,String格式,替换查找到的符合条件的数据

updatexml最多只能显示32位,超过长度可以配合substr()

⑩、Xpath类型函数

(1) extractvalue ()函数功能:对XML文档进行查询的函数,其实就是相当于HTML文件中用标签查找元素。

语法:extractvalue(目标xml文档,xml路径)

第二个参数 xml中的位置是可操作的地方,xml文档中查找字符位置是用 /xxx/xxx/xxx/...这种格式,如果写入其他格式,就会报错,并且会返回写入的非法格式内容,而这个非法的内容就是想要查询的内容。

、其他函数

Floor()+count()+group by

Exp()

Bigint (Mysql Version >=5.4.45)

、SQL盲注常用函数应用

实验:基于SQLI平台Less-5的报错盲注利用

3、SQL时间盲注利用

1)、时间盲注

SQL时间类型的盲注本质是利用插入的SQL语句执行造成时间延迟

(2)、MySQL时间盲注几种延时方法

(3)、MySQL时间盲注几种延时方法

①、get lock函数()需要使用 mysgl_pconnect函数来连接数据库在一个session中可以先锁定一个变量例如: select get_lock(do9gy,1)

②、然后通过另一个session 再次执行get_lock函数 select get_lock(‘do9gy’,5),此时会产生5 秒的延迟,其效果类似于sleep(5)。

(4)、MySQL时间盲注几种延时方法

①、笛卡尔积

笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尔积 (Cartesian product)又称直积,表示为XxY,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员。

(5)、SQL时间盲注利用

实验:基于SQLI平台Less-9的时间盲注利用

4、SQL布尔盲注利用

(1)、MySQL布尔盲注

Web的页面的仅仅会返回True和False。那么布尔盲注就是进行SQL注入之后然后根据页面返回的True或者是False来得到数据库中的相关信息。

(2)、SQL布尔盲注利用(实验关注获取)

实验:基于SQLI平台Less-8的布尔盲注利用

四、SQLmap

1、SQLMAP简介

(1)、SQLmap

SOLMAP是一个自动化的SOL注入工具,其主要功能是扫描,发现并利用给定的URL的SQL注入漏洞。

2、SQLMAP安装

(1)、SQLMAP安装

官网:

http://sqlmap.org

Github:

https://github.com/sqlmapproject/sqlmap

注意问题: 安装之前系统需要配置Python2.7环境

3、SQLMAP参数

(1)、验证方法

sqlmap.py -u www.test.com/index.php?id=1

(2)、验证过程

①、判断可注入的参数

②、判断可以用哪种SQL注入技术来注入

③、识别出所有存在的注入类型

④、尝试去判定数据库版本,开发语言,操作系统版本

(3)、获取目标的方式

①、参数 :-m 从文件中取出保存的url进行检测

②、参数: -r 从文本文件中获取http请求

③、参数:-g 测试注入Google的搜索结果的GET参数

④、参数: -l从Burp或者WebScarab代理中获取日志

⑤、参数: -u 直接输入目标URL

(4)、请求目标的相关方式

①、参数 :--data 把数据以POST方式提交

②、参数:--param-del GET或POST的数据用&以外的其他字符分割

③、参数:--cookie,--load-cookies,--drop-set-cookie 设置cookie

④、参数: --referer 伪造HTTP中的referer

⑤、参数:--headers 增加额外的http头

⑥、参数:--timeout 设置超时时间

⑦、参数: --retries 设置重试次数

(5)、注入测试相关参数

①、参数 :--level 探测等级。共有七个等级,默认为1

②、参数:--risk 风险等级,共4个

③、参数: -p,--skip手动用-p参数设置想要测试的参数,--skip设置跳过的参数

(6)、注入技术参数

①、参数 :--technique 指定sqlmap使用的探测技术

②、参数:--time-sec 设定延迟注入的时间

③、参数:--union-cols 设定UNION查询字段数

④、参数:--second-order 设置二次注入的url

7)、列数据相关参数

①、参数:--b,--banner 列出版本号

②、参数:--current-db 返当前使用的数据库

③、参数:--users 列出所有管理用户

④、参数:--passwords 列出并破解数据库用户的hash

⑤、参数:--privileges 列出数据库管理员权限

(8)、与操作系统权限获取相关的参数

(9)、探测WAF相关的参数

(10)、绕过WAF相关的参数

SQLMAP中有一个tamper目录,主要存放的是WAF绕过脚本,比如:

base64encode.pybetween.py、greatest.py等。

4、SQLMAP使用

(1)、SQLMAP的注入场景

①、基于布尔的盲注:即可以根据返回页面判断条件真假的注入

②、基于时间的盲注:即不能根据页面返回内容判断任何信息,用条件语句查看时间延迟语句是否执行(即页面返回时间是否增加) 来判断。

③、根据用户选择,读取哪些数据

④、基于报错的注入: 即页面会返回错误信息,或者把注入的语句的结果直接返回在页面中。

⑤、联合查询注入:可以使用union的情况下的注入

⑥、堆查询注入:可以同时执行多条语句的执行时的注入。

(2)、常见用法:

①、sqlmap -u http://192.168.0.110/page.php?id=10 --current -db //爆当前库

②、sqlmap -u http://192.168.0.110/page.php?id=10 -D数据库名 -tables //爆表段

③、sqlmap -u http://192.168.0.110/page.php?id=10 -D 数据库名 -T表名columns //爆字段

④、sqlmap -u http://192.168.0.110/page.php?id=10 -D 数据库名 -T表名 -C 字段名,字段名,字段名...(互相用逗号隔开) --dump 显示数据

(3)、爆当前库

sqlmap -u http://192.168.0.110/page.php?id=10 --current -db

(4)、爆表名

sqlmap -u http://192.168.0.110/page.php?id=10 -D数据库名 --tables

5)、爆字段

sqlmap -u http://192.168.0.110/page.php?id=10 -D 数据库名 T表名-coumns

5、SQLMAP实例

(1)、实验1:

 基于SQLI平台的Less-8 (布尔盲注) Less-9(时间盲注)Less-18 (文件头注入) 中的sqlmap注入 (tech参数)

(2)实验2:

 基于SQLI平台的Less-11 (POST型注入) (form参数)

6、SQLMAP的tamper功能

(1)、SQLMAP的tamper功能

①、SQLMAP中有一个tamper目录,主要存放的是WAF绕过脚本,比如:base64encode.py、between.py、greatest.py等。

②、tamper脚本是SQLMAP的中用于绕过WAF或应对网站过滤逻辑的脚本,SOLMAP的自带了一些tamper脚本,可以在SQLMAP的的tamper目录下查看他们。用户也可以根据已有的tamper脚本来编写自己的tamper脚本 (绕过逻辑)

主要存放的是WAF绕过脚本,比如: base64encode.py、between.py、greatest.py等

(2)、SQLMAP的插件的用法示例:

$ sqlmap.py -u "http://192.168.136.131/sqlmap/mysql/get int.php?id=1" --tampertamper/

betweenpy,tamper/randomcasepy, tamper/space2comment.py -v 3

多个tamper脚本之间用空格隔开

(3)、Tamper脚本编写

如图所示便是一个相对完整有效的tamper脚本

其作用是接过要执行的payload,进行相应的绕过逻辑后,返回修改后的payload

①、等号被过滤了----->[equaltolike.py]0------>like代替等号

Example:

*Input: SELECT*FROM users WHERE id=1

*Output: SELECT* FROM users WHERE id LIKE 1

②、替换字符和单引号被过滤---[apostrophenullencode.py]()

Example:

("1 AND 1'='1")

"1 AND %00%271%00%27=%00%271'

③、url编码转换------>[charencode.py]()

SELECT FIELD FROM%20TABLE编码后:

%53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45

(先把字符串转成ASCII编码,然后再转成十六进制)

比如“\”,它的ascii码是92,92的十六进制是5c,“\”的url编码就是%5c

④、字符串 unicode 编码绕过--->[charunicodeencode.py]()

SELECT%20FIELD%20FROM TABLE

编码后:

%u0053%u0045%u004cu0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%0044%u0020%u0046。。。。

Unicode编码的字符以%u为前缀,后面是这个字符的十六进制unicode的码点。

⑤、SQLMAP的tamper功能实验

实验1: sqlmap的tamper原理

实验2: sqlmap-tamper脚本编写

7、SQLMAP检测原理剖析

(1)、SQLMAP的漏洞检测过程,包括前置发包 (一系列探子请求) 、布尔盲注、错误注入、union注入、时间盲注这五个过程

两个基础检测算法 (响应相似度对比技术,高斯分布识别响应机制)

①、响应相似度对比技术在SQLMAP中大量使用;

②、高斯分布识别响应机制在unin注入 (selectnull列数探测技术和时间盲注过程中使用)

(2)、SQLMAP检测之前置发包

在SQLMAP检测SOL注入点的过程中,会有一系列前置发包,这些前置发包主要包括下述一些发包检测逻辑:

  • 网站连通性检测:目的为网站连通性检测
  • WAF探测:目的为检测网站是否受WAF保护
  • 网页稳定性检测:目的为检测网页是否稳定
  • 参数动态性检测:目的为检测参数是否具有动态性
  • 启发式注入检测:目的为探测该参数点是否是动态的、是否为可能的注入点。payload生成是由," ()六种字符随机组成的长度为10的字符串
  • 误报检测: 布尔盲注中使用响应相似度分析技术来确定是否存在注入点,时间盲注中使用高斯算法来确定是否存在注入点,这两种判断方式存在误报的可能,为了防止误报,SQLMAP引入误报检测机制。

(3)、响应相似度对比技术

①、在SQLMAP检测的整个过程中,会有一个原始响应的定义,指的是在网站连通性检测的过程中如果网站成功响应,则把该响应定义为原始响应(包括状态码、HTTP响应头、HTTP响应体)

②、SQLMAP中,原始响应作为对比过程中被对比的对象,一个请求成功响应后,与原始响应进行对比,得出对比结果。

③、算法输出为True表示当前响应与原始响应相似,算法输出为False表示当前响应与原始响应不相似

(4)、SQLMAP检测之union注入主要流程

虚线之上表示前置发包过程,虚线之下表示针对每个注入点都会进行循环发包的流程

union注入的流程可以分为两步走:

①、第一步为确定列数,以order by列数探测技术为主,selectnull列数探测技术为辅形成列数确定技术:

②、第二步为在确定列数的基础上,查找某一个字段是字符串字段,保证数据库信息可以从该字段注出。

(1)、order by列数探测技术

(2)、select null列数探测技术

(3)、select null字符串位置确定技术

(5)、SQLMAP检测之实践注入主要流程

虚线之上表示前置发包过程,虚线之下表示针对每个注入点都会进行循环发包的流程。

时间盲注过程中大量使用响应延迟判断技术,从流程图中可以看到,在针对每一个注入点循环发包时候,一共使用了三次响应延迟判断技术。

确定存在时间注入后,再进入误报检测流程

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C++基础 -38- 模板函数的局限性

模板函数无法对自定义数据类型进行操作(如类) 这个时候我们重载一个函数来匹配操作即可 #include "iostream"using namespace std;class base { public:base(int a) : a(a) {}int a; };template <class T, class T1> bool compare(T a, T1 b) {if (a > b…

蓝桥杯-03-蓝桥杯学习计划

蓝桥杯-03-蓝桥杯学习计划 参考资料 相关文献 报了蓝桥杯比赛&#xff0c;几乎零基础&#xff0c;如何准备&#xff0c;请大牛指导一下。谢谢&#xff1f; 蓝桥杯2022各组真题汇总(完整可评测) 基础学习 C语言网 ACM竞赛入门,蓝桥杯竞赛指南 廖雪峰的官方官网 算法题单 洛谷…

【JavaEE】单例模式

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

爬虫概念、基本使用及一个类型和六个方法(一)

目录 一、爬虫简介 1.什么是爬虫 2.爬虫的核心 3.爬虫的用途 4.爬虫的分类 5.反爬手段 二、Urllib基本使用 1.导入我们需要的包 2.定义一个url 3.模拟浏览器向服务器发送请求 4.获取响应中的页面的源码 5.打印数据 三、一个类型和六个方法 1.定义url&#xff0c;并…

C++初阶 | [七] string类(上)

摘要&#xff1a;标准库中的string类的常用函数 C语言中&#xff0c;字符串是以\0结尾的一些字符的集合&#xff0c;为了操作方便&#xff0c;C标准库中提供了一些str系列的库函数&#xff0c; 但是这些库函数与字符串是分离开的&#xff0c;不太符合OOP(面向对象)的思想&#…

【vue】vue-slick-carousel插件,实现横向滚动列表手动左右滚动(也可设置为自动滚动)

需求&#xff1a;图片列表横向滚动的时候&#xff0c;隐藏原始滚动条&#xff0c;通过左右箭头控制滚动条往左右按一定的步长移动。 el-carousel走马灯一滚动就是一屏&#xff0c;不适合我的需求 在npm官网搜vue-slick-carousel&#xff0c;查看更详细的配置 vue-slick-caro…

解决xshell连接诶树莓派中文乱码的问题

系统版本 解决办法 在根目录下找到 /etc/profile 修改profile文件,添加以下两行.以便重启之后也能生效: export LANGzh_CN.utf8 export LC_ALLzh_CN.utf8注意: /etc/profile的修改需要root权限才能修改! 在xshell的编码格式改为UTF-8

全志T527设置gpio口输出高电平实际输出低电平

前言 在调试T527的时候&#xff0c;主板另外添加了gpio口去控制usb口的电源开关&#xff0c;软件上面需要在内核运行的时候将gpio口设置输出高电平&#xff0c;usb口才可以正常使用。改好系统固件后&#xff0c;升级发现&#xff0c;机器开机动画过程中可以控制gpio口去打开us…

竞赛选题YOLOv7 目标检测网络解读

文章目录 0 前言1 yolov7的整体结构2 关键点 - backbone关键点 - head3 训练4 使用效果5 最后 0 前言 世界变化太快&#xff0c;YOLOv6还没用熟YOLOv7就来了&#xff0c;如果有同学的毕设项目想用上最新的技术&#xff0c;不妨看看学长的这篇文章&#xff0c;学长带大家简单的…

[C国演义] 第二十三章

第二十三章 两个字符串的最小ASCLL删除和最长重复子数组 两个字符串的最小ASCLL删除和 力扣链接 求 删除字符的ASCLL和的最小值 ⇒ 正难则反 ⇒ 求公共子序列的ASCLL和的最大值 两个数组的dp问题 ⇒ 分区间讨论 ⇒ dp[i][j] -- nums1数组的[0, i] 区间 和 nums2数组的[0, j] …

《opencv实用探索·九》中值滤波简单理解

1、引言 均值滤波、方框滤波、高斯滤波&#xff0c;都是线性滤波方式。由于线性滤波的结果是所有像素值的线性组合&#xff0c;因此含有噪声的像素也会被考虑进去&#xff0c;噪声不会被消除&#xff0c;而是以更柔和的方式存在。这时使用非线性滤波效果可能会更好。中值滤波是…

手搓图片滑动验证码_JavaScript进阶

手搓图片滑动验证码 背景代码效果图展示网站 背景 在做前端项目开发的时候&#xff0c;少不了登录注册部分&#xff0c;既然有登录注册就少不了机器人验证&#xff0c;验证的方法有很多种&#xff0c;比如短信验证码、邮箱验证码、图片滑动、图片验证码等。 由于鄙人在开发中…

“团团活力圈”—“玩转柔力球 青春展风采”青少年柔力球体验活动

柔力球项目是中华优秀传统文化创造性转化、创新性发展的成功典范&#xff0c;它融合了传统太极运动方式与现代竞技双重特征于一体&#xff0c;强调内外双修&#xff0c;是一项集健身性、竞技性、表演性为一体的极富中华民族特色的体育运动。 为进一步促进柔力球运动在青少年人…

RK3588 Yolov5 部署进行目标识别

一、环境说明&#xff1a; 1、上位机 主机配置&#xff1a;win10&#xff08;强制要求win 10&#xff09;OS专业版 22H2 虚拟化软件&#xff1a;VMware pro 17.0.2&#xff1b; 虚拟机系统&#xff1a;Ubuntu20.04.1&#xff08;要求>18.0&#xff09;&#xff1b;x86-64位…

【软考S01计算机系统知识】E01 中央处理单元

E01 中央处理单元 计算机系统硬件基本组成中央处理单元组成功能 多核 CPU 计算机系统硬件基本组成 计算机系统由硬件和软件组成&#xff0c;基本硬件系统由 运算器、控制器、存储器、输入设备 和 输出设备 5大部件组成&#xff1b; 中央处理单元&#xff1a; 运算器、控制器等…

低代码简化开发流程,强大的开发利器

目录 一、与传统IT开发相比&#xff0c;低代码开发的优势 二、低代码是时代发展的产物 三、善用低代码 四、总结 软件开发已经成为企业发展不可或缺的一环。然而&#xff0c;传统的软件开发模式常常面临着繁琐冗长的工作流程、高昂的开发成本以及难以跟进快速变化的市场需求的挑…

微服务调用组件Feign

JAVA 项目中如何实现接口调用&#xff1f; 1&#xff09;Httpclient HttpClient 是 Apache Jakarta Common 下的子项目&#xff0c;用来提供高效的、最新的、功能丰富 的支持 Http 协议的客户端编程工具包&#xff0c;并且它支持 HTTP 协议最新版本和建议。HttpClient 相比传…

Spring Boot 3 整合 Spring Cache 与 Redis 缓存实战

&#x1f680; 作者主页&#xff1a; 有来技术 &#x1f525; 开源项目&#xff1a; youlai-mall &#x1f343; vue3-element-admin &#x1f343; youlai-boot &#x1f33a; 仓库主页&#xff1a; Gitee &#x1f4ab; Github &#x1f4ab; GitCode &#x1f496; 欢迎点赞…

服务器托管与服务器租用的详细比较

​  在当今数字化时代&#xff0c;服务器托管和服务器租用成为了许多企业和个人选择的两种常见方式。它们都提供了一种将服务器放置在专业机房中的解决方案&#xff0c;但在具体实施和使用过程中存在一些差异。下面将详细比较这两种方式的优势和劣势。 1. 服务器托管 服务器托…

Wnmp本地搭建结合内网穿透实现远程访问本地Wnmp服务

文章目录 前言1.Wnmp下载安装2.Wnmp设置3.安装cpolar内网穿透3.1 注册账号3.2 下载cpolar客户端3.3 登录cpolar web ui管理界面3.4 创建公网地址 4.固定公网地址访问 正文开始前给大家推荐个网站&#xff0c;前些天发现了一个巨牛的 人工智能学习网站&#xff0c; 通俗易懂&a…
最新文章