[论文阅读] (36)CS22 MPSAutodetect:基于自编码器的恶意Powershell脚本检测模型
《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期待与您前行,加油。
该文是贵大0624团队论文学习笔记,分享者姚迪同学,未来我们每周至少分享一篇论文笔记。前一篇博客介绍了TIFS’24 基于攻击表示学习的高效内存APT猎杀系统(MEGR-APT)。这篇文章将带来Computers & Security2022的MPSAutodetect,提出一种基于堆叠去噪自编码器的恶意Powershell脚本检测模型。本文首次结合SDA(自编码器)来提取PowerShell脚本的关键特征,并使用XGBoost进行分类。由于我们还在不断成长和学习中,写得不好的地方还请海涵。希望这篇文章对您有所帮助,这些大佬真值得我们学习。fighting!
- 欢迎关注作者新建的『网络攻防和AI安全之家』知识星球(文章末尾)
原文作者:Amal Alahmadi, Norah Alkhraan, Wojdan BinSaeedan
原文标题:MPS Autodetect: A Malicious Powershell Script Detection Model Based on Stacked Denoising Auto-Encoder
原文链接:https://www.sciencedirect.com/science/article/pii/S0167404822000578
发表会议:Computers & Security 2022
笔记作者:贵大0624团队 姚迪
一.摘要
PowerShell是一个用于自动化管理任务的重要工具。它是一个预安装在Windows机器上的开源工具,可以在许多其他操作系统上访问。管理员通常使用PowerShell来执行一系列典型的管理任务,例如添加和删除帐户、编辑组以及访问难以找到的用户信息。
然而,研究人员最近发现PowerShell被用来执行各种攻击。这些攻击利用PowerShell的大量属性来访问特权信息,获得对整个机器的控制或在组织中传播。由于这些恶意脚本的混淆性和复杂性,检测成本高昂且困难重重。
在这里,我们提出了恶意PowerShell脚本自动检测(MPSAutodetect),这是一种依靠机器学习技术检测恶意PowerShell脚本的检测模型。 我们的模型是通过使用堆叠去噪自编码器(sda)来提取有意义的特征而构建的。这些有价值的、容易获得的特征被输入到极端梯度增强(XGBoost)分类器中。收集了两个实质性的数据集(已标记和未标记),以监督和半监督的方式训练和测试MPSAutodetect。该数据集包含恶意和良性混淆脚本。实验结果表明,无论从SDA中提取的特征如何,监督方法都能获得更好的检测效果,其真阳性率显著达到98%,假阳性率低至0.6%。因此,对MPSAutodetect的分析表明,该模型在没有手动特征工程的麻烦过程中取得了令人满意的性能。
二.引言及前置知识
PowerShell是一种流行且功能强大的面向对象脚本语言和命令行shell,预安装在Windows机器上。它允许管理员和用户在操作系统上操纵和运行命令。最近,许多报告表明,网络犯罪分子已经利用PowerShell的能力来实施攻击。
与Power-Shell相关的最常见攻击是Livingoff The Land攻击(离地攻击)。这种攻击是指利用系统的本地工具来攻击自身,攻击者使用自动现成的工具反复混淆脚本,导致检测方案面临更大的挑战。此外,大多数PowerShell日志记录在默认情况下是禁用的。因此,恶意的脚本很容易传播。同时,PowerShell命令和文件不会写入磁盘。网络犯罪分子利用这一漏洞几乎没有留下任何活动痕迹供法医分析。
什么是PowerShell?
PowerShell 是一种跨平台的任务自动化解决方案,由命令行 shell、脚本语言和配置管理框架组成。
什么是autoencoder?
autoencoder是一种无监督的学习算法,主要用于数据的降维或者特征的抽取,在深度学习中,autoencoder可用于在训练阶段开始前,确定权重矩阵W的初始值。自动编码器是一种无监督的数据维度压缩和数据特征表达方法。在大部分提到自动编码器的场合,压缩和解压缩的函数是通过神经网络实现。
- 隐藏层从输入到隐藏层即为Encoder(编码器),从隐藏层到输出即为Decoder(解码器)。
powershell检测系统现有工作:
- 利用机器学习算法提出了一个字符级深度神经网络该网络的构建和训练是为了在字符级别检测恶意脚本。考虑使用统一长度的字符来构建字符级的one-hot编码表示脚本。这种向量表示被输入到许多卷积神经网络(CNN)配置以及传统的自然语言处理(NLP)检测器中
- 提出了一种使用混合特征检测恶意PowerShell脚本的方法。他们专注于可以从脚本中提取的特征类型,其中在使用FastText进行脚本嵌入的同时呈现了许多手动提取的特征。从恶意程度的角度分析了这些单个特征之间的差异。特征集合被输入到随机森林分类器中
现有方法的局限:
- 攻击复杂性与检测难度的增加,检测成本高昂且困难重重;
- 恶意脚本种类繁多,行为模式和特征差异很大,使得统一检测模型的泛化能力受到限制;
- 传统方法通常需要手动提取特征,这一过程复杂且耗时,难以应对不断变化的恶意脚本技术。
本文贡献可以总结如下:
- 提出恶意PowerShell脚本自动检测(MPSAutodetect),这是一个使用机器学习算法检测恶意PowerShell脚本的模型,同时消除了手动查找特征的过程。MPSAutodetect依赖于SdA从PowerShell脚本中提取有意义的特征。
- 整合了强大的XGBoost分类算法,利用从SdA结构中获得的特征。以两种方式实现MPSAutodetect,比较监督和半监督方法的效率。
- 通过定义四个具有不同恶意对良性脚本解释比率的数据集来验证模型的效率。用于训练和评估模型的数据集语料库包含混淆的脚本,本质上赋予MPSAutodetect识别PowerShell脚本的能力,即使它具有复杂的形式。
三.本文模型
1.总体架构
MPSAutodetect整体框架如下图所示:
- PowerShell预处理
- Auto-Encoder模型提取特征
- 梯度增强及分类预测
2.PowerShell预处理
PowerShell是一种面向对象的脚本语言,具有跨平台的命令行shell。它可以与net、COM、WMI和XML对象一起工作,这使PowerShell命令行与其他命令行区别开来PowerShell中的命令称为cmdlet,它具有动词-名词语法。
攻击者利用PowerShell的原因有很多,主要是因为它提供了对重要操作系统功能的访问。预处理算法如下:
3.Auto-Encoder
堆叠自编码器(Stacked denoising auto-encoder,SDA)结构如下所示:
- 构建单层自编码器
- 逐层堆叠训练
- 反向解码器构建
该结构以一种方式降低了维数, 即将x维的输入编码为h维表示,同时在对输入进行解码之前保持h < x。这个h维表示层被称为瓶颈层,将编码器与解码器结构分开。当SdA用于特征提取时,这一层非常有价值。在这种情况下,省略 了重建过程(解码器),并从这个瓶颈层中提取特征。
4.XGBoost
XGBoost全称为eXtreme Gradient Boosting,本文利用其进行识别恶意Powershell。
四.实验评估
1.数据集
PowerShellGallery
- 该数据集由5463个良性脚本和6609个恶意脚本和命令组成,这些脚本和命令是在MPSAutode-tect的训练和测试期间使用的。重要的是,该语料库包含来自恶意类和良性类的混淆脚本,允许MPSAutodetect对实际的脚本表示进行训练。该数据集的构建是为了以监督的方式训练和测试模型。
- https://www.powershellgallery.com
Github
- 提供的一些未标记脚本来构建半监督算法,这是通过实现无监督预训练和微调来实现的。未标记的数据集由40,765个脚本组成。
- https://www.github.com
2.实验结果分析
(1)在不同类型的噪声对MPSAutodetect效率的对比
当噪声因子为0.5时,高斯噪声的AUC值最高,为0.974;高斯噪声被证明比随机噪声产生更好的性能。
(2)在不同深度和单元尺寸对MPSAutodetect模型性能对比
1024个单位代表数据集的维度,产生了0. 990 AUC分数;单位大小的减小可能会导致维度过于模糊,导致模型表现不佳。
(3)在XGBoost分类器不同参数对比
参数调优是优化分类器性能的关键部分,它可以提高MPSAutodet ect的效率
XGBoost参数对模型性能有显著影响。综合调整这些参数,可显著优化模型的性能和鲁棒性。
- eta参数:控制学习率,较小值(如0.1)提高AUC分数,优化模型精度。
- colsample_bytree参数:控制特征采样比例,合适的值(如0.8)可提升分类器稳定性和AUC分数。
- alpha和lambda参数:正则化项防止过拟合,默认值1和0效果最佳
(4)在不同数据集上监督和半监督运行对比
监督和半监督两种方法的AUC值都很高,分别为0.991和0.980,但监督模型优于半监督模型。当数据集比率相对均匀时,半监督方法表现优异。
性能比较如下表所示:
五.总结及个人感受
本文提出并验证了 MPSAutodetect模型,来确定这些脚本的恶意性。
- 该模型利用SdA架构来提取分类所需的特征,实现特征提取方法以帮助简化检测过程的工作
- 该模型以监督和半监督的方式实现,旨在利用未标记脚本的可用性
- 有监督的MPSAutodetect模型显示出令人满意的结果,低0.6%的FPR和高98%的TPR
本文作者提出了未来该方向工作的重点:
- 收集更多的恶意样本,以确保该模型对攻击技术不断变化的行为保持有效
- 研究将这种方法扩展到用不同编程语言编写的攻击中
- 计划增加脚本恶意软件家族分类的特殊性,并评估是否可以检测到新恶意软件家族的引入
2024年4月28日是Eastmount的安全星球——『网络攻防和AI安全之家』正式创建和运营的日子,该星球目前主营业务为 安全零基础答疑、安全技术分享、AI安全技术分享、AI安全论文交流、威胁情报每日推送、网络攻防技术总结、系统安全技术实战、面试求职、安全考研考博、简历修改及润色、学术交流及答疑、人脉触达、认知提升等。下面是星球的新人券,欢迎新老博友和朋友加入,一起分享更多安全知识,比较良心的星球,非常适合初学者和换安全专业的读者学习。
目前收到了很多博友、朋友和老师的支持和点赞,尤其是一些看了我文章多年的老粉,购买来感谢,真的很感动,类目。未来,我将分享更多高质量文章,更多安全干货,真心帮助到大家。虽然起步晚,但贵在坚持,像十多年如一日的博客分享那样,脚踏实地,只争朝夕。继续加油,再次感谢!
(By:Eastmount 2025-01-20 周四夜于贵阳 http://blog.csdn.net/eastmount/ )
前文赏析:
- [论文阅读] (01)拿什么来拯救我的拖延症?初学者如何提升编程兴趣及LATEX入门详解
- [论文阅读] (02)SP2019-Neural Cleanse: Identifying and Mitigating Backdoor Attacks in DNN
- [论文阅读] (03)清华张超老师 - GreyOne: Discover Vulnerabilities with Data Flow Sensitive Fuzzing
- [论文阅读] (04)人工智能真的安全吗?浙大团队外滩大会分享AI对抗样本技术
- [论文阅读] (05)NLP知识总结及NLP论文撰写之道——Pvop老师
- [论文阅读] (06)万字详解什么是生成对抗网络GAN?经典论文及案例普及
- [论文阅读] (07)RAID2020 Cyber Threat Intelligence Modeling Based on Heterogeneous GCN
- [论文阅读] (08)NDSS2020 UNICORN: Runtime Provenance-Based Detector for Advanced Persistent Threats
- [论文阅读] (09)S&P2019 HOLMES Real-time APT Detection through Correlation of Suspicious Information Flow
- [论文阅读] (10)基于溯源图的APT攻击检测安全顶会总结
- [论文阅读] (11)ACE算法和暗通道先验图像去雾算法(Rizzi | 何恺明老师)
- [论文阅读] (12)英文论文引言introduction如何撰写及精句摘抄——以入侵检测系统(IDS)为例
- [论文阅读] (13)英文论文模型设计(Model Design)如何撰写及精句摘抄——以入侵检测系统(IDS)为例
- [论文阅读] (14)英文论文实验评估(Evaluation)如何撰写及精句摘抄(上)——以入侵检测系统(IDS)为例
- [论文阅读] (15)英文SCI论文审稿意见及应对策略学习笔记总结
- [论文阅读] (16)Powershell恶意代码检测论文总结及抽象语法树(AST)提取
- [论文阅读] (17)CCS2019 针对PowerShell脚本的轻量级去混淆和语义感知攻击检测
- [论文阅读] (18)英文论文Model Design和Overview如何撰写及精句摘抄——以系统AI安全顶会为例
- [论文阅读] (19)英文论文Evaluation(实验数据集、指标和环境)如何描述及精句摘抄——以系统AI安全顶会为例
- [论文阅读] (20)USENIXSec21 DeepReflect:通过二进制重构发现恶意功能(恶意代码ROI分析经典)
- [论文阅读] (21)S&P21 Survivalism: Systematic Analysis of Windows Malware Living-Off-The-Land (经典离地攻击)
- [论文阅读] (22)图神经网络及认知推理总结和普及-清华唐杰老师
- [论文阅读] (23)恶意代码作者溯源(去匿名化)经典论文阅读:二进制和源代码对比
- [论文阅读] (24)向量表征:从Word2vec和Doc2vec到Deepwalk和Graph2vec,再到Asm2vec和Log2vec(一)
- [论文阅读] (25)向量表征经典之DeepWalk:从Word2vec到DeepWalk,再到Asm2vec和Log2vec(二)
- [论文阅读] (26)基于Excel可视化分析的论文实验图表绘制总结——以电影市场为例
- [论文阅读] (27)AAAI20 Order Matters: 二进制代码相似性检测(腾讯科恩实验室)
- [论文阅读] (28)李沐老师视频学习——1.研究的艺术·跟读者建立联系
- [论文阅读] (29)李沐老师视频学习——2.研究的艺术·明白问题的重要性
- [论文阅读] (30)李沐老师视频学习——3.研究的艺术·讲好故事和论点
- [论文阅读] (31)李沐老师视频学习——4.研究的艺术·理由、论据和担保
- [论文阅读] (32)南洋理工大学刘杨教授——网络空间安全和AIGC整合之道学习笔记及强推(InForSec)
- [论文阅读] (33)NDSS2024 Summer系统安全和恶意代码分析方向相关论文汇总
- [论文阅读] (34)EWAS2024 基于SGDC的轻量级入侵检测系统
- [论文阅读] (35)TIFS24 MEGR-APT:基于攻击表示学习的高效内存APT猎杀系统
- [论文阅读] (36)C&S22 MPSAutodetect:基于自编码器的恶意Powershell脚本检测模型
相关文章:

[论文阅读] (36)CS22 MPSAutodetect:基于自编码器的恶意Powershell脚本检测模型
《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…...

【Maui】下拉框的实现,绑定键值对
文章目录 前言一、问题描述二、解决方案三、软件开发(源码)3.1 创建模型3.2 视图界面3.3 控制器逻辑层 四、项目展示 前言 .NET 多平台应用 UI (.NET MA…...

Oracle 深入学习 Part 14:Managing Password Security and Resources(管理密码安全性和资源)
Profiles Profile 是一个以名称标识的集合,用于管理 密码 和 资源限制。 每个用户都对应一个profiles,可以通过 CREATE USER 或 ALTER USER 命令分配给用户。 Profiles 可以启用或禁用。 Profiles 可以关联到默认的 DEFAULT Profile。 密码管理&…...

C语言:位段
位段的内存分配: 1. 位段的成员可以是 int unsigned int signed int 或者是char (属于整形家族)类型 2. 位段的空间上是按照需要以4个字节( 类型 int )或者1个字节( char )的方式来开辟的。 3. 位段涉及…...

MPLS VPN 原理与配置
一.简介 MPLS,称之为多协议标签交换,在九十年代中期被提出来,用于解决传统IP报文依赖查表转发而产生的瓶颈,现多用于VPN技术,MPLS报头封装在数据链路层之上,网络层之下。本文为结合了华为技术和新华三技术…...

稳定的通信桥梁,CCLINKIE转ModbusTCP网关实现AGV运输的光速效应
三菱PLC与AGV机器人搬运车通过稳联技术协议转换网关建立通信 一、现场情况概述 - 三菱PLC:使用CC-Link IE协议进行通信。 - AGV机器人搬运车:使用Modbus TCP协议进行通信。 - 协议转换网关:使用稳联技术的协议转换网关将PLC和AGV连接…...
Leetcode 3428. Maximum and Minimum Sums of at Most Size K Subsequences
Leetcode 3428. Maximum and Minimum Sums of at Most Size K Subsequences 1. 解题思路2. 代码实现 题目链接:3428. Maximum and Minimum Sums of at Most Size K Subsequences 1. 解题思路 这一题不需要连续性,因此我们就是考虑取得子串长度为别为1…...
第2章:Python TDD构建Dollar类基础
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...
【算法学习笔记】34:扩展欧几里得算法
裴蜀定理 描述 对于任意正整数 a a a、 b b b,一定存在整数系数 x x x, y y y,使得: a x b y g c d ( a , b ) ax by gcd(a, b) axbygcd(a,b) 并且 g c d ( a , b ) gcd(a, b) gcd(a,b)是对于任意的系数 x x x和 y y y放在…...
云原生周刊:K8s 生产环境架构设计及成本分析
开源项目推荐 KubeZoneNet KubeZoneNet 旨在帮助监控和优化 Kubernetes 集群中的跨可用区(Cross-Zone)网络流量。这个项目提供了一种简便的方式来跟踪和分析 Kubernetes 集群中跨不同可用区的通信,帮助用户优化集群的网络架构、提高资源利用…...

WGAN - 瓦萨斯坦生成对抗网络
1. 背景与问题 生成对抗网络(Generative Adversarial Networks, GANs)是由Ian Goodfellow等人于2014年提出的一种深度学习模型。它包括两个主要部分:生成器(Generator)和判别器(Discriminator)…...

海量数据的处理
一般来说都是针对数据量特别大,内存有限制的。 第一类:topk问题 比如,在海量数据中找前50大的数据怎么办? 方法一:使用小顶堆,用小顶堆维护这50个元素,当有新元素到来时,直接与堆…...
区块链的数学基础:核心原理与应用解析
引言 区块链技术作为分布式账本系统,成功地解决了传统中心化系统中的信任问题。其背后隐藏着复杂而精妙的数学原理,包括密码学、哈希函数、数字签名、椭圆曲线、零知识证明等。这些数学工具不仅为区块链提供了安全保障,也为智能合约和去中心…...
1.5 GPT 模型家族全解析:从 GPT-1 到 GPT-4 的演进与创新
GPT 模型家族全解析:从 GPT-1 到 GPT-4 的演进与创新 随着人工智能技术的飞速发展,GPT(Generative Pre-trained Transformer)模型家族已经成为了现代自然语言处理(NLP)领域的标杆。从初代的 GPT-1 到最新的 GPT-4,每一代模型的发布都标志着人工智能技术的一个飞跃,并推…...

自动驾驶之DriveMM: All-in-One Large Multimodal Model for Autonomous Driving
1. 写在前面 工作之后,主要从事于偏工程比较多的内容, 很少有机会读论文了,但2025年,由于之前有些算法的背景, 后面可能会接触一些多模态大模型相关的工作,所以又调头有点往算法的方向偏移, 而算法呢,很重要的一点就是阅读论文。2025年,再拾起论文这块的工作。 今天…...

Spring Boot 配置(官网文档解读)
目录 摘要 Spring Boot 配置加载顺序 配置文件加载顺序 Spring Boot 配置加载方式 Value Value 注解简单示例 ConfigurationProperties 启动 ConfigurationProperties ConfigurationProperties 验证 ConfigurationProperties 与 Value 对比 Autowired Autowired 自…...

SparkSQL数据源与数据存储
文章目录 1. 大数据分析流程2. Spark SQL数据源2.1 SparkSQL常见数据源2.2 SparkSQL支持的文本格式2.3 加载外部数据源步骤 3. 本地文件系统加载数据3.1 本地文件系统加载JSON格式数据3.1.1 概述3.1.2 案例演示 3.2 本地文件系统加载CSV格式数据3.2.1 概述3.2.2 案例演示 3.3 本…...

【BQ3568HM开发板】开箱测试
引言 很荣幸入选了“电子发烧友”的贝启科技BQ3568HM开源鸿蒙开发板评测活动,上周在出差,今天才有机会开箱一下开发板,简单测试一下。 开机测试 插上电源开机后,系统显示的是润和的DAYU的logo,看来厂商提供的软件包…...
3D 模型格式转换之 STP 转 STL 深度解析
在 3D 模型的多元世界中,格式如同语言,不同格式适用于不同场景。STP 和 STL 是两种常见格式,本文将深入剖析 STP 转 STL 的相关内容。 一、STP 与 STL 格式基础 (一)STP 格式剖析 STP,即标准交换格式&am…...

MySQL数据库的数据文件保存在哪?MySQL数据存在哪里
在安装好MySQL数据库使用一段时间后,会产生许多的数据库和数据。那这些数据库的数据文件存放在本地文件夹的什么位置呢 一、默认位置 一般来说MySQL数据库的数据文件都是存放在data文件夹之中,但是根据使用的存储引擎不同,产生的一些文件也…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
OpenLayers 可视化之热力图
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 热力图(Heatmap)又叫热点图,是一种通过特殊高亮显示事物密度分布、变化趋势的数据可视化技术。采用颜色的深浅来显示…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP
编辑-虚拟网络编辑器-更改设置 选择桥接模式,然后找到相应的网卡(可以查看自己本机的网络连接) windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置,选择刚才配置的桥接模式 静态ip设置: 我用的ubuntu24桌…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
uniapp 字符包含的相关方法
在uniapp中,如果你想检查一个字符串是否包含另一个子字符串,你可以使用JavaScript中的includes()方法或者indexOf()方法。这两种方法都可以达到目的,但它们在处理方式和返回值上有所不同。 使用includes()方法 includes()方法用于判断一个字…...