未授权和敏感文件泄露

news2024/11/15 15:48:22

目前存在未授权访问漏洞的服务主要 包括:NFS、Samba、LDAP、Rsync、FTP、GitLab、Jenkins、 MongoDB、Redis、ZooKeeper、ElasticSearch、Memcache、CouchDB、 Docker、Solr、Hadoop等。

redis未授权

通过手工进行未授权访问验证,在安装Redis服务的Kali系统中输 入redis-cli-h IP,如果目标系统存在未授权访问漏洞,则可以成功 进行连接。输入info命令,可以查看Redis服务的版本号、配置文件目 录、进程ID号等。

常见的敏感文件泄漏总结:

敏感文件通常指携带敏感信息的文件,最为常见的就是数据库的配置文件、网站源码备份、数据库备份等,管理员为了方便下载,将源码备份放置在 web 目录,然后下载至本地备份,下载完之后忘记删除,从而导致漏洞的出现。

配置文件泄漏

最为典型的就是 spring 框架的配置文件泄漏,常见路径:

"/env"/actuator/env"

泄漏信息如图:

这类漏洞通常需要日常收集常见系统的配置文件默认路径,如果存在未授权访问的情况,就会存在文件泄漏的问题。

除了这类常见框架、系统的配置文件泄漏外,还有因为管理员修改配置文件时,为了防止无法恢复,而创建的备份文件,比如 config.php.bak、config.php.20230101 等,这类文件是可以下载的,从而泄漏配置信息。

修复方案

1、对于备份文件,为在系统中使用的,可以删除处置,或者备份到其他无法直接通过浏览器访问的目录 

2、在使用的无法删除的文件,需要设置权限,仅限本地访问

网站备份泄漏

网站源码备份是网站管理员经常要做的操作,有的管理员会自动备份到备份服务器,而有些管理员为了简单方便,将服务器上到源码打包压缩后放置在 web 目录,然后从服务器再下载到本地,进行本地备份,下载完成之后是应该删除的,但是由于未做这个操作,导致整站源码泄漏。

备份的文件名通常为 wwwroot、www、子域名等,压缩包后缀通常为 zip、tar.gz 等,通过组合常用备份名称和后缀,可以进行目录扫描,来发现这类备份文件。

下面是某工具的配置文件,收集整理了常见的备份文件组合方式:


#  format:  /path  {tag="text  string  to  find"}  {status=HTTP_STATUS}  {type="content-type  should  contain  this  string"}  {type_no="content-type  should  not  contain  this  string"}
#  each  item  must  starts  with  right  slash  "/"


/core  {status=200}  {tag="ELF"}

/../{hostname_or_folder}.old  {status=301}  {type="html"}
/../{hostname_or_folder}.backup  {status=301}  {type="html"}
/../{hostname_or_folder}.bak  {status=301}  {type="html"}

/{sub}.zip  {status=206}  {type="application/octet-stream"}
/{sub}.rar  {status=206}  {type="application/octet-stream"}
/{sub}.tar.gz  {status=206}  {type="application/octet-stream"}
/{sub}.tar.bz2  {status=206}  {type="application/octet-stream"}
/{sub}.tgz  {status=206}  {type="application/octet-stream"}
/{sub}.7z  {status=206}  {type="application/octet-stream"}

/old.zip  {status=206}  {type="application/octet-stream"}
/old.rar  {status=206}  {type="application/octet-stream"}
/old.tar.gz  {status=206}  {type="application/octet-stream"}
/old.tar.bz2  {status=206}  {type="application/octet-stream"}
/old.tgz  {status=206}  {type="application/octet-stream"}
/old.7z  {status=206}  {type="application/octet-stream"}

/{hostname_or_folder}.zip  {status=206}  {type="application/octet-stream"}
/{hostname_or_folder}.rar  {status=206}  {type="application/octet-stream"}
/{hostname_or_folder}.tar.gz  {status=206}  {type="application/octet-stream"}
/{hostname_or_folder}.tar.bz2  {status=206}  {type="application/octet-stream"}
/{hostname_or_folder}.tgz  {status=206}  {type="application/octet-stream"}
/{hostname_or_folder}.7z  {status=206}  {type="application/octet-stream"}

/../{hostname_or_folder}.zip  {status=206}  {type="application/octet-stream"}
/../{hostname_or_folder}.rar  {status=206}  {type="application/octet-stream"}
/../{hostname_or_folder}.tar.gz  {status=206}  {type="application/octet-stream"}
/../{hostname_or_folder}.tar.bz2  {status=206}  {type="application/octet-stream"}
/../{hostname_or_folder}.tgz  {status=206}  {type="application/octet-stream"}
/../{hostname_or_folder}.7z  {status=206}  {type="application/octet-stream"}
/../{hostname_or_folder}.log  {status=206}  {type="application/octet-stream"}
/../{hostname_or_folder}.sh  {status=206}  {type="application/octet-stream"}

/temp.zip  {status=206}  {type="application/octet-stream"}
/temp.rar  {status=206}  {type="application/octet-stream"}
/temp.tar.gz  {status=206}  {type="application/octet-stream"}
/temp.tgz  {status=206}  {type="application/octet-stream"}
/temp.tar.bz2  {status=206}  {type="application/octet-stream"}

/package.zip  {status=206}  {type="application/octet-stream"}
/package.rar  {status=206}  {type="application/octet-stream"}
/package.tar.gz  {status=206}  {type="application/octet-stream"}
/package.tgz  {status=206}  {type="application/octet-stream"}
/package.tar.bz2  {status=206}  {type="application/octet-stream"}

/tmp.zip  {status=206}  {type="application/octet-stream"}
/tmp.rar  {status=206}  {type="application/octet-stream"}
/tmp.tar.gz  {status=206}  {type="application/octet-stream"}
/tmp.tgz  {status=206}  {type="application/octet-stream"}
/tmp.tar.bz2  {status=206}  {type="application/octet-stream"}

/test.zip  {status=206}  {type="application/octet-stream"}
/test.rar  {status=206}  {type="application/octet-stream"}
/test.tar.gz  {status=206}  {type="application/octet-stream"}
/test.tgz  {status=206}  {type="application/octet-stream"}
/test.tar.bz2  {status=206}  {type="application/octet-stream"}

/backup.zip  {status=206}  {type="application/octet-stream"}
/backup.rar  {status=206}  {type="application/octet-stream"}
/backup.tar.gz  {status=206}  {type="application/octet-stream"}
/backup.tgz  {status=206}  {type="application/octet-stream"}
/back.tar.bz2  {status=206}  {type="application/octet-stream"}

/db.zip  {status=206}  {type="application/octet-stream"}
/db.rar  {status=206}  {type="application/octet-stream"}
/db.tar.gz  {status=206}  {type="application/octet-stream"}
/db.tgz  {status=206}  {type="application/octet-stream"}
/db.tar.bz2  {status=206}  {type="application/octet-stream"}
/db.log  {status=206}  {type="application/octet-stream"}
/db.inc  {status=200}  {type_no="html"}
/db.sqlite  {status=206}  {type="application/octet-stream"}

/db.sql.gz  {status=206}  {type="application/octet-stream"}
/dump.sql.gz  {status=206}  {type="application/octet-stream"}
/database.sql.gz  {status=206}  {type="application/octet-stream"}
/backup.sql.gz  {status=206}  {type="application/octet-stream"}

/data.zip  {status=206}  {type="application/octet-stream"}
/data.rar  {status=206}  {type="application/octet-stream"}
/data.tar.gz  {status=206}  {type="application/octet-stream"}
/data.tgz  {status=206}  {type="application/octet-stream"}
/data.tar.bz2  {status=206}  {type="application/octet-stream"}

/database.zip  {status=206}  {type="application/octet-stream"}
/database.rar  {status=206}  {type="application/octet-stream"}
/database.tar.gz  {status=206}  {type="application/octet-stream"}
/database.tgz  {status=206}  {type="application/octet-stream"}
/database.tar.bz2  {status=206}  {type="application/octet-stream"}

/ftp.zip  {status=206}  {type="application/octet-stream"}
/ftp.rar  {status=206}  {type="application/octet-stream"}
/ftp.tar.gz  {status=206}  {type="application/octet-stream"}
/ftp.tgz  {status=206}  {type="application/octet-stream"}
/ftp.tar.bz2  {status=206}  {type="application/octet-stream"}

/log.txt  {status=200}  {type="text/plain"}
/log.tar.gz  {status=206}  {type="application/octet-stream"}
/log.rar  {status=206}  {type="application/octet-stream"}
/log.zip  {status=206}  {type="application/octet-stream"}
/log.tgz  {status=206}  {type="application/octet-stream"}
/log.tar.bz2  {status=206}  {type="application/octet-stream"}
/log.7z  {status=206}  {type="application/octet-stream"}

/logs.txt  {status=200}  {type="text/plain"}
/logs.tar.gz  {status=206}  {type="application/octet-stream"}
/logs.rar  {status=206}  {type="application/octet-stream"}
/logs.zip  {status=206}  {type="application/octet-stream"}
/logs.tgz  {status=206}  {type="application/octet-stream"}
/logs.tar.bz2  {status=206}  {type="application/octet-stream"}
/logs.7z  {status=206}  {type="application/octet-stream"}

/web.zip  {status=206}  {type="application/octet-stream"}
/web.rar  {status=206}  {type="application/octet-stream"}
/web.tar.gz  {status=206}  {type="application/octet-stream"}
/web.tgz  {status=206}  {type="application/octet-stream"}
/web.tar.bz2  {status=206}  {type="application/octet-stream"}

/www.log  {status=206}  {type="application/octet-stream"}
/www.zip  {status=206}  {type="application/octet-stream"}
/www.rar  {status=206}  {type="application/octet-stream"}
/www.tar.gz  {status=206}  {type="application/octet-stream"}
/www.tgz  {status=206}  {type="application/octet-stream"}
/www.tar.bz2  {status=206}  {type="application/octet-stream"}

/wwwroot.zip  {status=206}  {type="application/octet-stream"}
/wwwroot.rar  {status=206}  {type="application/octet-stream"}
/wwwroot.tar.gz  {status=206}  {type="application/octet-stream"}
/wwwroot.tgz  {status=206}  {type="application/octet-stream"}
/wwwroot.tar.bz2  {status=206}  {type="application/octet-stream"}


/output.zip  {status=206}  {type="application/octet-stream"}
/output.rar  {status=206}  {type="application/octet-stream"}
/output.tar.gz  {status=206}  {type="application/octet-stream"}
/output.tgz  {status=206}  {type="application/octet-stream"}
/output.tar.bz2  {status=206}  {type="application/octet-stream"}

/admin.zip  {status=206}  {type="application/octet-stream"}
/admin.rar  {status=206}  {type="application/octet-stream"}
/admin.tar.gz  {status=206}  {type="application/octet-stream"}
/admin.tgz  {status=206}  {type="application/octet-stream"}
/admin.tar.bz2  {status=206}  {type="application/octet-stream"}

/upload.zip  {status=206}  {type="application/octet-stream"}
/upload.rar  {status=206}  {type="application/octet-stream"}
/upload.tar.gz  {status=206}  {type="application/octet-stream"}
/upload.tgz  {status=206}  {type="application/octet-stream"}
/upload.tar.bz2  {status=206}  {type="application/octet-stream"}

/website.zip  {status=206}  {type="application/octet-stream"}
/website.rar  {status=206}  {type="application/octet-stream"}
/website.tar.gz  {status=206}  {type="application/octet-stream"}
/website.tgz  {status=206}  {type="application/octet-stream"}
/website.tar.bz2  {status=206}  {type="application/octet-stream"}

/package.zip  {status=206}  {type="application/octet-stream"}
/package.rar  {status=206}  {type="application/octet-stream"}
/package.tar.gz  {status=206}  {type="application/octet-stream"}
/package.tgz  {status=206}  {type="application/octet-stream"}
/package.tar.bz2  {status=206}  {type="application/octet-stream"}

/sql.log  {status=206}  {type="application/octet-stream"}
/sql.zip  {status=206}  {type="application/octet-stream"}
/sql.rar  {status=206}  {type="application/octet-stream"}
/sql.tar.gz  {status=206}  {type="application/octet-stream"}
/sql.tgz  {status=206}  {type="application/octet-stream"}
/sql.tar.bz2  {status=206}  {type="application/octet-stream"}
/sql.7z  {status=206}  {type="application/octet-stream"}
/sql.inc  {status=200}  {type_no="html"}

/data.sql  {status=206}  {type="application/octet-stream"}  {tag="CREATE  TABLE"}
/qq.sql  {status=206}  {type="application/octet-stream"}  {tag="CREATE  TABLE"}
/tencent.sql  {status=206}  {type="application/octet-stream"}  {tag="CREATE  TABLE"}
/database.sql  {status=206}  {type="application/octet-stream"}  {tag="CREATE  TABLE"}
/db.sql  {status=206}  {type="application/octet-stream"}  {tag="CREATE  TABLE"}
/test.sql  {status=206}  {type="application/octet-stream"}  {tag="CREATE  TABLE"}
/admin.sql  {status=206}  {type="application/octet-stream"}  {tag="CREATE  TABLE"}
/backup.sql  {status=206}  {type="application/octet-stream"}  {tag="CREATE  TABLE"}
/user.sql  {status=206}  {type="application/octet-stream"}  {tag="CREATE  TABLE"}
/sql.sql  {status=206}  {type="application/octet-stream"}  {tag="CREATE  TABLE"}

/index.zip  {status=206}  {type="application/octet-stream"}
/index.7z  {status=206}  {type="application/octet-stream"}
/index.bak  {status=206}  {type="application/octet-stream"}
/index.rar  {status=206}  {type="application/octet-stream"}
/index.tar.tz  {status=206}  {type="application/octet-stream"}
/index.tar.bz2  {status=206}  {type="application/octet-stream"}
/index.tar.gz  {status=206}  {type="application/octet-stream"}

/{hostname_or_folder}.log  {status=206}  {type="application/octet-stream"}
/logs/{hostname_or_folder}.log  {status=206}  {type="application/octet-stream"}

/dump.sql  {status=206}  {type="application/octet-stream"}  {tag="CREATE  TABLE"}
/{sub}.sql  {status=206}  {type="application/octet-stream"}  {tag="CREATE  TABLE"}

/old.zip  {status=206}  {type="application/octet-stream"}
/old.rar  {status=206}  {type="application/octet-stream"}
/old.tar.gz  {status=206}  {type="application/octet-stream"}
/old.tar.bz2  {status=206}  {type="application/octet-stream"}
/old.tgz  {status=206}  {type="application/octet-stream"}
/old.7z  {status=206}  {type="application/octet-stream"}

/1.tar.gz  {status=206}  {type="application/octet-stream"}
/a.tar.gz  {status=206}  {type="application/octet-stream"}
/x.tar.gz  {status=206}  {type="application/octet-stream"}
/o.tar.gz  {status=206}  {type="application/octet-stream"}

/conf/conf.zip  {status=206}  {type="application/octet-stream"}

/conf.tar.gz  {status=206}  {type="application/octet-stream"}

/qq.pac  {status=206}  {type="application/octet-stream"}
/tencent.pac  {status=206}  {type="application/octet-stream"}

/server.cfg  {status=206}  {type="application/octet-stream"}

/deploy.tar.gz  {status=206}  {type="application/octet-stream"}
/build.tar.gz  {status=206}  {type="application/octet-stream"}
/install.tar.gz  {status=206}  {type="application/octet-stream"}

/secu-tcs-agent-mon-safe.sh  {status=206}
/password.tar.gz  {status=206}  {type="application/octet-stream"}
/site.tar.gz  {status=206}  {type="application/octet-stream"}
/tenpay.tar.gz  {status=206}  {type="application/octet-stream"}

/rsync_log.sh  {status=206}  {type="application/octet-stream"}
/rsync.sh  {status=206}  {type="application/octet-stream"}

/webroot.zip  {status=206}  {type="application/octet-stream"}

/tools.tar.gz  {status=206}  {type="application/octet-stream"}

/users.tar.gz  {status=206}  {type="application/octet-stream"}

/webserver.tar.gz  {status=206}  {type="application/octet-stream"}

/htdocs.tar.gz  {status=206}  {type="application/octet-stream"}
 

推荐工具 

https://github.com/maurosoria/dirsearch

修复方案

删除备份文件即可

隐藏目录泄漏

常见的隐藏目录泄漏有三种 svn、git 以及 DS_Store,svn 和 git 是代码管理系统,在上线代码时,同步代码的过程中会把因此目录 .git 和 .svn 给同步上去,导致通过远程即可访问该目录下的内容,而 DS_Store 是 mac 系统下自动生成的文件,每个目录下都有,记录了目录下文件变动的历史。

svn

Subversion,简称 SVN,是一个开放源代码的版本控制系统,相对于的 RCS、CVS,采用了分支管理系统,它的设计目标就是取代 CVS。互联网上越来越多的控制服务从 CVS 转移到 Subversion。

svn 更新至 1.7+ .svn/entries 目录就不包含文件目录列表了。检测方法为探测网站目录下是否有 .svn/entries 这个文件,内容如图:

工具推荐

https://github.com/admintony/svnExploit

修复方案

1、上线前删除该目录 

2、在服务器上配置禁止该目录访问,常见配置如下:

Apache:

    <Directory ~ "\.svn">    Order allow,deny    Deny from all    </Directory>

Nginx:​​​​​​​

location ~ ^(.*)\/\.svn\/ {    return 404;    }

git

在运行 git init 初始化代码库的时候,会在当前目录下面产生一个 .git 的隐藏目录,用来记录代码的变更记录等等。在发布代码的时候,而 .git 这个目录没有删除,直接发布了。使用这个文件,可以用来恢复源代码。

攻击者利用该漏洞下载 .git 文件夹中的所有内容。如果文件夹中存在敏感信息(数据库账号密码、源码等),通过白盒的审计等方式就可能直接获得控制服务器的权限和机会!

漏洞发现

1、可以先观察一下站点是否有醒目地指出 Git,如果有的话,那就说明站点很大可能是存在这个问题的

2、如果站点没有醒目的提示的话,可以利用 dirsearch 这类扫描工具,如果存在 ./git 泄露的问题的话,会被扫描出来的

3、最直观的方式,就是直接通过网页访问 .git 目录,如果能访问就说明存在

当确认存在这个漏洞之后,就可以通过工具来下载 git 泄露的全部源码

工具推荐

https://github.com/0xHJK/dumpall

.DS_Store

.DS_Store 是 Mac 下 Finder 用来保存如何展示 文件/文件夹 的数据文件,每个文件夹下对应一个。和 windows 相比,等同于 desktop.ini 和 Thumbs.db 两个文件。

如果开发/设计人员将 .DS_Store 上传部署到线上环境,可能造成文件目录结构泄漏,特别是备份文件、源代码文件。

比如我本地系统:

 尝试用工具解析:

能看到我本地目录下的一些目录信息。

工具推荐

https://github.com/gehaxelt/Python-dsstore

https://github.com/lijiejie/ds_store_exp

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MATLAB 线性整数规划

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…

oracle官网下载指定版本的jdk

文章目录前言下载JDK环境变量前言 oracle官网下载jdk&#xff0c;如果是想下载指定版本的&#xff0c;总是提示需要你登录。如何解决呢&#xff1f; 下载JDK oracle官网 https://www.oracle.com 或者直达此页 https://www.oracle.com/java/technologies/downloads/archive…

springboot相关

2023.2.3 springboot的示例sagan涉及到很多软件技术&#xff0c;运行这个示例在Windows 7下遇到问题。将Windows 7重装为Windows 10专业版。下载了node-v18.14.0-x64.msi&#xff0c;安装node时可以选择安装相关的软件&#xff0c;例如python 3.11.0。下载python 3.11.0太慢了…

07、微服务组件Seata

1、事务简介 事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中&#xff0c;一个事务由一组SQL语句组成。事务应该具有4个属性&#xff1a;原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性&#xff08;ato…

正则表达式记录

正则用途:分割 查找 匹配 替换 1 * ?的区别 *代表匹配任意次, 包括0,1,多次代表匹配最少一次, 1或者多次?代表匹配最多1次,0,1次 2 单次边界(\b和\B) 2.1 定义 首先说一下零宽: 只匹配位置, 不匹配字符, 然后我们再来谈单词边界: 何谓单词? 在JS中, 单词的定义就是\w也…

Python中的字典

1. 前言 字典&#xff0c;是Python中唯一实现了映射关系的内置类型。 2.映射关系 摩斯密码就是通过映射关系来实现的。 这里的字母 A 和 .- 就是其中的一对映射关系&#xff0c;字母 U 和 …- 又是另一对映射关系&#xff0c;那么有了这张表&#xff0c;破解莫斯密码就不再…

矩阵相关的性质

矩阵相关的计算性质1.矩阵的某一行*一个常数2.矩阵的一行加(减)另一行3.交换矩阵的两行两个未知数两个方程线程方程组解的结构以几何的角度查看矩阵的方式初等矩阵采用初等变换的方式在矩阵的元素中进行操作 相关的性能的变化采用点阵的乘法&#xff0c;在矩阵的维度进行处理将…

DeepLabV3+:ASPP加强特征提取网络的搭建

目录 ASPP结构介绍 ASPP在代码中的构建 参考资料 ASPP结构介绍 ASPP&#xff1a;Atrous Spatial Pyramid Pooling&#xff0c;空洞空间卷积池化金字塔。 简单理解就是个至尊版池化层&#xff0c;其目的与普通的池化层一致&#xff0c;尽可能地去提取特征。 利用主干特征提取…

低代码开发——创新赋能企业办公模式转变

近年来&#xff0c;国内云计算高速发展、SAAS 软件模式快速普及、企业数字 化的需求增长等方面促进了低代码平台开发与应用的高速发展&#xff0c;使之成为继 RPA之后企业数字化转型的明星工具。如果说RPA 将线上流程自动化&#xff0c;那么低代码解决了更基础的问题&#xff…

微信小程序 java Springboot大学生心理健康测试职位推荐系统

心理测试学生端要求在系统的安卓手机上可以运行&#xff0c;主要实现了线上考试测试等相关信息的查看&#xff0c;并且根据需求进行对管理端&#xff1b;首页、个人中心、学生管理、职业职位管理、职位申请管理、活动类型管理、活动项目管理、活动报名管理、试卷管理、试题管理…

Python算术运算符

Python算术运算符以下假设变量&#xff1a; a10&#xff0c;b20&#xff1a;运算符描述实例加 - 两个对象相加a b 输出结果 30-减 - 得到负数或是一个数减去另一个数a - b 输出结果 -10*乘 - 两个数相乘或是返回一个被重复若干次的字符串a * b 输出结果 200/除 - x除以yb / a …

C++内联函数:那时我还太年轻,并不知道使用inline带来的效率,早已在暗中标好了价格

&#x1f451;专栏内容&#xff1a;C学习笔记⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;日拱一卒&#xff0c;功不唐捐 文章目录一、前言二、内联函数1、起源2、概念三、与宏的区别1、宏的缺点2、两者区别四、内联函数的代价代价一&#xff1a;可执…

1.DjangoRestFramework【前后端分离项目搭建】

1.使用cmd创建项目 在你需要创建项目的文件夹中打开cmd,进入对应的Django的虚拟环境中输入下面语句: django-admin startproject drfproject然后使用pycharm打开项目 2.创建子apps 在tirminal中输入: python manage.py startapp user python manage.py startapp shop3.注册…

博途1200PLC/1500PLCMODBUS从站通信应用(MB_SLAVE指令)

博途PLC作为MODBUS主站通信请参看下面的文章链接: 博途PLC 1200/1500PLC MODBUS-RTU通讯优化(状态机编程)_博途plc modbus-rtu通信优化_RXXW_Dor的博客-CSDN博客博途PLC 1200/1500PLC MODBUS-RTU通讯_RXXW_Dor的博客-CSDN博客_博图modbus通讯1、1200PLC的modbus通讯,可以参看…

3.3 接口

文章目录1.接口的概念2.接口格式3.接口的特点3.1 练习-1:创建接口3.2 练习-2:创建接口实现类3.3 练习-3:创建接口测试类4.接口的用法5.接口的多继承多实现6.接口总结6.1 类与类的关系6.2 类与接口的关系6.3 接口与接口的关系6.4 抽象类与接口的区别1.接口的概念 与之前学习过的…

webpackEslint插件使用

webpackEslint插件使用 首先安装eslint-webpack-plugin npm i eslint-webpack-plugin -S 注意&#xff1a;如果未安装eslint>7,还需要先安装eslint npm i eslint -S 然后把插件添加到你的webpack配置&#xff0c;例如 const ESLintPluginreuqire(eslint-webpack-plugin) mo…

Android开发常谈—【热启动冷启动】

冷启动概述 app冷启动&#xff1a; 当应用启动时&#xff0c;后台没有该应用的进程&#xff0c;这时系统会重新创建一个新的进程分配给该应用&#xff0c; 这个启动方式就叫做冷启动&#xff08;后台不存在该应用进程&#xff09;。冷启动因为系统会重新创建一个新的进程分配给…

【坤坤讲师--图】KM算法

KM算法 KM算法是通过给每个顶点一个标号(叫做顶标)来把求最大权匹配的问题转化为求完备匹配的问题的。设顶点Xi的顶标为A[i],顶点Yj的顶标为B[j],顶点Xi与Yj之间的边权为w[i,j]。在算法执行过程中的任一时刻,对于任一条边(i,j),A[i]+B[j]>=w[i,j]始终成立。KM算法的正…

Python语言零基础入门教程(一)

Python 基础语法 Python 语言与 Perl&#xff0c;C 和 Java 等语言有许多相似之处。但是&#xff0c;也存在一些差异。 在本章中我们将来学习 Python 的基础语法&#xff0c;让你快速学会 Python 编程。 第一个 Python 程序 交互式编程 交互式编程不需要创建脚本文件&#…

【算法竞赛模板】单调队列与单调栈

【算法竞赛模板】单调队列与单调栈一、概念解析二、单调栈三、单调队列一、概念解析 单调栈&#xff1a;具有单调&#xff08;递增或递减&#xff09;性质和栈性质的数据结构     时间复杂度为 O(n)单调队列&#xff1a;具有单调&#xff08;递增或递减&#xff09;性质和…