#漏洞挖掘# 一文了解什么是Jenkins未授权访问!!!
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。
目录
一、什么是Jenkins
Jenkins 的定义
主要功能
工作原理
安装和配置
应用场景
二、什么是Jenkins未授权访问
漏洞原因
漏洞复现
修复方法
三、Jenkins安全配置最佳实践
1. 配置全局安全性
2. 启用跨站请求伪造(CSRF)保护
3. 防范主节点上的安全隐患
4. 定期备份JENKINS_HOME目录
5. 使用文件指纹管理依赖关系
6. 为每个分支设置独立作业
7. 避免并行作业的冲突
8. 启用强用户认证机制
9. 保持Jenkins及插件更新
10. 启用审计日志功能
四、Jenkins身份验证机制详解
1. 身份验证概述
2. 身份验证方法详解
2.1 委托给Servlet容器
2.2 Jenkins用户数据库
2.3 LDAP
2.4 Unix用户/组数据库
3. 授权配置
4. 安全领域和授权策略插件
五、如何检测Jenkins漏洞
1. 更新Jenkins和插件
2. 使用自动化扫描工具
3. 手动检查
4. 使用漏洞数据库
5. 渗透测试
6. 监控和日志分析
7. 参考最新的安全公告
示例:使用OWASP Dependency-Check
六、Jenkins授权策略的实际案例
案例1:基于角色的授权策略(Role-Based Authorization Strategy)
场景
步骤
结果
案例2:矩阵授权策略(Matrix-Based Authorization Strategy)
场景
步骤
结果
案例3:LDAP身份验证结合角色授权
场景
步骤
结果
一、什么是Jenkins
Jenkins 是一个开源的持续集成(Continuous Integration, CI)和持续交付(Continuous Delivery, CD)工具。它的主要目的是通过自动化构建、测试和部署流程,提高软件开发的效率和质量。以下是关于 Jenkins 的详细信息:
Jenkins 的定义
Jenkins 是一个可扩展的持续集成引擎,旨在提供一个开放易用的软件平台,使软件的持续集成变得可能。它通过自动化重复性任务,如构建、测试和部署,来减少开发人员的工作负担,从而提高开发效率。
主要功能
- 持续构建和测试:Jenkins 可以自动执行代码的构建和测试,确保每次代码提交都不会破坏现有功能。
- 监控任务执行:Jenkins 可以监控各种定时任务的执行情况,并提供详细的执行报告。
- 项目源代码修改检测:Jenkins 能够从版本控制系统(如 Subversion 或 Git)中检测到最新的代码修改,并自动生成修改列表。
- 分布式构建:Jenkins 支持在多台机器上并行构建,充分利用硬件资源,节省构建时间。
- 插件支持:Jenkins 拥有丰富的插件生态系统,用户可以根据需要安装各种插件,扩展 Jenkins 的功能。
工作原理
Jenkins 的工作原理可以概括为以下几个步骤:
- 代码提交:开发人员将代码提交到版本控制系统。
- 触发构建:Jenkins 监控版本控制系统的变化,一旦检测到新的代码提交,就会自动触发构建过程。
- 执行构建:Jenkins 执行一系列预定义的构建步骤,如编译代码、运行单元测试等。
- 生成报告:构建完成后,Jenkins 会生成详细的构建报告,包括构建状态、测试结果等。
- 通知结果:Jenkins 可以通过邮件、即时消息等方式通知相关人员构建结果。
安装和配置
Jenkins 的安装和配置相对简单:
- 下载 Jenkins:可以从 Jenkins 官方网站下载 Jenkins 的安装包。
- 安装 Jenkins:将 Jenkins 安装包部署到 Servlet 容器(如 Tomcat)中,或者直接运行 Jenkins WAR 包。
- 配置 Jenkins:通过 Jenkins 提供的 Web 界面进行配置,包括设置构建任务、配置插件等。
应用场景
Jenkins 广泛应用于各种软件开发项目中,特别是在敏捷开发和 DevOps 实践中。它可以帮助团队实现持续集成和持续交付,提高软件发布的频率和质量。
二、什么是Jenkins未授权访问
Jenkins未授权访问是指在Jenkins系统中,由于缺乏适当的身份验证和访问控制,攻击者能够在没有合法凭证的情况下访问Jenkins的管理界面或执行敏感操作。这种安全漏洞可能导致严重的后果,包括但不限于:
- 执行任意命令:攻击者可以通过Jenkins的“脚本命令行”功能执行任意系统命令,从而完全控制服务器。
- 修改配置:攻击者可以修改Jenkins的配置,包括添加恶意插件、更改构建任务等。
- 窃取敏感信息:攻击者可以访问Jenkins存储的敏感信息,如凭据、构建日志等。
- 创建后门:攻击者可以在Jenkins中创建后门,以便在未来随时访问系统。
漏洞原因
Jenkins未授权访问漏洞通常由以下原因引起:
- 默认配置不安全:早期版本的Jenkins默认配置允许任何用户访问管理界面,而不需要身份验证。
- 弱口令:即使启用了身份验证,使用弱口令也可能导致账户被暴力破解。
- 暴露在公网:将Jenkins直接暴露在公网而没有适当的防火墙规则和安全配置,也会增加被攻击的风险。
漏洞复现
漏洞复现通常包括以下步骤:
- 访问管理页面:通过URL直接访问Jenkins的管理页面,如
http://<ip>/manage
。- 进入脚本命令行:在管理页面中找到并进入“脚本命令行”功能。
- 执行命令:在脚本命令行中执行任意系统命令,如查看文件列表、创建文件等。
修复方法
为了防止Jenkins未授权访问漏洞,可以采取以下措施:
- 升级版本:使用最新版本的Jenkins,因为新版本通常会修复已知的安全漏洞。
- 配置身份验证:启用并配置强身份验证机制,确保只有授权用户才能访问Jenkins。
- 限制公网访问:避免将Jenkins直接暴露在公网,使用防火墙规则限制访问。
- 定期审计:定期检查Jenkins的配置和日志,确保没有异常活动。
通过以上措施,可以有效防止Jenkins未授权访问漏洞,保护系统的安全。
三、Jenkins安全配置最佳实践
Jenkins作为一款广泛使用的持续集成/持续部署(CI/CD)工具,其安全性配置对于保障软件开发流程的安全和高效至关重要。以下是Jenkins安全配置的一些最佳实践:
1. 配置全局安全性
Jenkins在默认配置下不执行任何安全检查,这意味着任何访问者几乎可以在Jenkins主数据库中执行任意代码。为了保障Jenkins的安全性,需要配置全局安全性,主要包括两个方面:安全领域(身份验证)和授权。
- 安全领域(身份验证):从Jenkins V2.214和Jenkins LTS V2.222.1开始,Jenkins自己的用户数据库被用作了默认的安全选项。对于旧版本,应选中启用安全复选框,以便用户使用凭据登录。
- 授权:通过授权设置,可以定义哪些用户和(或)组可以访问Jenkins的哪些方面,以及他们的权限。应避免使用任何人都可以做任何事的设置,因为这会让匿名用户也能完全控制Jenkins。基于矩阵的安全性是一个灵活的授权方案,它允许精确控制用户和组在Jenkins环境中的操作权限。
2. 启用跨站请求伪造(CSRF)保护
从Jenkins 2.0开始,CSRF保护被默认启用,以防止对运行在防火墙内的Jenkins进行远程攻击。然而,对于早期版本或特定配置,可能需要手动启用CSRF保护。这可以通过管理Jenkins配置全局安全性CSRF保护进行设置。
3. 防范主节点上的安全隐患
在主节点上运行的构建可以读取或修改
JENKINS_HOME
中的任何文件,包括敏感数据如用户密码、证书等。为了降低这一风险,可以将构建任务配置在构建代理上执行,并确保管理Jenkins的人员与配置作业或提交项目的人员角色分离。此外,可以使用作业限制插件来过滤哪些作业可以在主节点上运行。4. 定期备份
JENKINS_HOME
目录
JENKINS_HOME
目录包含了作业配置、构建日志、插件配置等关键数据。定期备份这些数据对于防止数据丢失和快速恢复系统至关重要。此外,还可以将备份数据存储在云端,如Google Cloud Storage,以进一步保障数据安全。5. 使用文件指纹管理依赖关系
在Jenkins中,项目之间的依赖关系可能会导致版本混淆。使用文件指纹功能可以帮助我们记录每个项目及其依赖项的jar文件指纹,从而简化依赖关系管理。
6. 为每个分支设置独立作业
利用Jenkins的多分支管道功能,可以为源代码存储库中的每个分支自动创建一个独立的管道。这有助于在单独的环境中构建和测试每个分支的代码,从而尽早发现问题并降低风险。当多个开发人员在不同的分支上工作时,这一功能尤为有用。
7. 避免并行作业的冲突
并行作业可以提高构建效率,但也可能因资源冲突而导致构建失败。因此,需要合理规划并行作业,确保每个项目都能获得足够的资源,从而顺利完成构建任务。
8. 启用强用户认证机制
为了防止未经授权的访问,应启用强用户认证机制。除了基本的用户名和密码认证外,还可以考虑使用双因素认证(2FA)等高级认证方式。这些措施可以大大增加系统的安全性,降低被恶意攻击的风险。
9. 保持Jenkins及插件更新
Jenkins团队会不断修复安全漏洞并改进功能。因此,定期检查并更新Jenkins核心程序以及已安装的插件是保障系统安全的重要措施。通过关注Jenkins官方的安全公告和更新通知,可以及时了解可能影响系统安全的问题,并采取相应的措施进行修复。
10. 启用审计日志功能
启用Jenkins的审计日志功能,记录系统中的重要操作和事件,以便在出现异常时进行追溯和分析。这有助于及时发现潜在的安全威胁并采取相应措施。
四、Jenkins身份验证机制详解
Jenkins的身份验证机制是其安全体系的重要组成部分,旨在确保只有经过授权的用户才能访问和操作Jenkins系统。以下是Jenkins身份验证机制的详细解析:
1. 身份验证概述
Jenkins提供了多种身份验证方法,以适应不同的安全需求和环境。这些方法包括但不限于:
- 委托给Servlet容器:依赖于运行Jenkins服务的Servlet容器(如Jetty)进行身份验证。
- Jenkins用户数据库:使用Jenkins内置的用户数据存储进行身份验证。
- LDAP:将身份验证委托给已配置的LDAP服务器。
- Unix用户/组数据库:将身份验证委托给Jenkins主服务器上的Unix操作系统级别的用户数据库。
2. 身份验证方法详解
2.1 委托给Servlet容器
这种方法依赖于运行Jenkins服务的Servlet容器进行身份验证。如果选择这种方式,需要查阅Servlet容器的身份验证文档以了解具体配置步骤。
2.2 Jenkins用户数据库
使用Jenkins内置的用户数据存储进行身份验证。这种方式不需要依赖外部系统,适合小型团队或测试环境。管理员可以在Jenkins Web UI中创建和管理用户账户。
2.3 LDAP
将身份验证委托给已配置的LDAP服务器。这种方式适合已经配置了外部身份提供程序(如LDAP)的组织。通过LDAP,可以实现用户和组的集中管理,简化用户权限配置。
2.4 Unix用户/组数据库
将身份验证委托给Jenkins主服务器上的Unix操作系统级别的用户数据库。这种方式允许重新使用Unix组进行授权,例如,可以将Jenkins配置为开发人员组中的每个人都具有管理员访问权限。
3. 授权配置
授权配置定义了Jenkins中哪些用户和用户组可以访问哪些方面以及访问的程度。Jenkins提供了多种授权策略,包括:
- 任何用户可做任何事:任何用户都可以完全控制Jenkins,包括尚未登录的匿名用户。这种设置不推荐用于生产环境。
- 旧版模式:如用户具有admin角色,则授予用户对系统的完全控制权,否则(包括匿名用户)将仅具有读取访问权限。
- 登录用户可以做任何事情:每个登录用户都可以完全控制Jenkins。根据高级选项的设置,匿名用户可获得对Jenkins的读取访问权限,或没有任何访问权限。
- 基于矩阵的安全性:上表中的每一行代表一个用户或组(也称为角色),包括名为匿名(anonymous)和已认证(authenticated)的条目。匿名条目表示授予访问Jenkins中的所有未经身份验证的用户的权限,而已认证可用于向访问该环境的所有已认证用户授予权限。
- 基于项目的矩阵授权策略:允许仅授予特定用户或组访问指定项目的权限,而不授予Jenkins中所有项目的访问权限。
4. 安全领域和授权策略插件
Jenkins还提供了多种插件来增强其身份验证和授权功能。例如,矩阵授权策略插件提供了基于矩阵的安全性和基于项目的矩阵授权策略,而RoleStrategy插件则添加了基于角色的授权机制,以实现更细粒度的用户权限管理。
五、如何检测Jenkins漏洞
检测Jenkins漏洞是确保Jenkins实例安全的重要步骤。以下是一些常见的方法和工具,可以帮助你识别和修复Jenkins中的潜在漏洞。
1. 更新Jenkins和插件
保持Jenkins核心和所有插件的更新是防止漏洞的最基本也是最重要的措施之一。Jenkins官方会定期发布安全补丁,及时应用这些补丁可以避免已知漏洞被利用。
2. 使用自动化扫描工具
有多种自动化工具可以帮助检测Jenkins中的漏洞。这些工具通常会扫描已知的漏洞签名,并报告潜在的安全问题。
- OWASP Dependency-Check: 这个工具可以检查项目依赖项中的已知漏洞。虽然它主要用于应用程序依赖项的检查,但也可以用于检查Jenkins及其插件。
- Snyk: Snyk是一个安全平台,可以扫描和修复开源依赖项中的漏洞。它可以集成到Jenkins流水线中,自动检测和修复漏洞。
- SonarQube: SonarQube是一个代码质量平台,可以检测代码中的安全漏洞、代码异味和错误。虽然它主要用于源代码分析,但也可以用于检查Jenkins配置文件。
3. 手动检查
手动检查Jenkins配置和插件版本也是一种有效的漏洞检测方法。以下是一些手动检查的步骤:
- 检查Jenkins版本: 登录Jenkins管理界面,检查当前Jenkins核心版本是否为最新版本。
- 检查插件版本: 在Jenkins管理界面中,检查所有已安装插件的版本,并确保它们都是最新的。
- 审查安全配置: 检查Jenkins的安全配置,确保启用了适当的身份验证和授权策略。例如,确保匿名用户没有过多的权限,启用CSRF保护等。
4. 使用漏洞数据库
利用公共漏洞数据库(如NVD、CVE)来检查Jenkins及其插件是否存在已知漏洞。这些数据库通常会列出漏洞的详细信息和修复建议。
5. 渗透测试
渗透测试是一种模拟攻击的方法,可以帮助识别Jenkins中的潜在漏洞。可以聘请专业的渗透测试团队,或者使用开源工具(如Metasploit)进行自我测试。
6. 监控和日志分析
定期监控Jenkins的日志文件,可以帮助发现异常行为和潜在的安全事件。使用日志分析工具(如ELK Stack)可以更高效地分析和可视化日志数据。
7. 参考最新的安全公告
关注Jenkins官方发布的安全公告和漏洞修复信息。这些公告通常会提供详细的漏洞描述和修复建议。
示例:使用OWASP Dependency-Check
以下是如何使用OWASP Dependency-Check来扫描Jenkins漏洞的示例步骤:
- 下载并安装OWASP Dependency-Check。
- 配置Dependency-Check以扫描Jenkins安装目录。
- 运行扫描命令:
dependency-check.sh -s /path/to/jenkins -o /path/to/output
4.分析生成的报告,查看是否有已知漏洞。
六、Jenkins授权策略的实际案例
Jenkins授权策略的实际案例可以帮助你更好地理解和应用Jenkins的安全配置。以下是一些具体的案例,展示了如何使用不同的授权策略来管理Jenkins的权限。
案例1:基于角色的授权策略(Role-Based Authorization Strategy)
场景
一家公司希望对Jenkins的权限进行细粒度控制,使得不同部门的开发人员只能访问和管理自己部门的项目。
步骤
- 安装Role-Based Authorization Strategy插件
- 登录Jenkins管理界面。
- 导航到
Manage Jenkins
>Manage Plugins
。- 在
Available
标签页中搜索Role-Based Authorization Strategy
插件并安装。- 配置全局安全设置
- 导航到
Manage Jenkins
>Configure Global Security
。- 在
Authorization
部分,选择Role-Based Strategy
。- 创建角色
- 导航到
Manage Jenkins
>Manage and Assign Roles
。- 选择
Manage Roles
,创建全局角色(如admin
、developer
)、项目角色(如dev-team-1
、dev-team-2
)和节点角色(如build-node
)。- 分配角色
- 选择
Assign Roles
,将用户或用户组分配到相应的角色。- 例如,将
dev-team-1
角色分配给开发团队1的成员,将admin
角色分配给系统管理员。结果
通过基于角色的授权策略,公司可以确保每个用户只能访问和管理自己部门的项目,从而提高了系统的安全性。
案例2:矩阵授权策略(Matrix-Based Authorization Strategy)
场景
一家公司希望对Jenkins的权限进行更加灵活的控制,允许不同用户对同一项目具有不同的权限。
步骤
- 配置全局安全设置
- 导航到
Manage Jenkins
>Configure Global Security
。- 在
Authorization
部分,选择Matrix-based security
。- 创建用户和用户组
- 导航到
Manage Jenkins
>Manage Users
,创建用户或用户组。- 例如,创建用户
alice
和bob
,并将他们加入用户组developers
。- 配置项目权限
- 导航到具体项目的配置页面。
- 在
Authorization
部分,选择Matrix-based security
。- 为每个用户或用户组分配具体的权限,如
Read
、Build
、Cancel
等。- 例如,赋予
alice
对项目的Read
和Build
权限,赋予bob
对项目的Read
、Build
和Cancel
权限。结果
通过矩阵授权策略,公司可以为不同用户分配不同的权限,从而实现更加精细的权限控制。
案例3:LDAP身份验证结合角色授权
场景
一家公司希望使用LDAP进行身份验证,并结合基于角色的授权策略来管理Jenkins的权限。
步骤
- 配置LDAP身份验证
- 导航到
Manage Jenkins
>Configure Global Security
。- 在
Security Realm
部分,选择LDAP
。- 配置LDAP服务器的连接信息,如服务器URL、用户DN模式等。
- 安装Role-Based Authorization Strategy插件
- 导航到
Manage Jenkins
>Manage Plugins
。- 在
Available
标签页中搜索Role-Based Authorization Strategy
插件并安装。- 配置全局安全设置
- 导航到
Manage Jenkins
>Configure Global Security
。- 在
Authorization
部分,选择Role-Based Strategy
。- 创建角色并分配用户
- 导航到
Manage Jenkins
>Manage and Assign Roles
。- 创建全局角色、项目角色和节点角色。
- 将LDAP用户或用户组分配到相应的角色。
结果
通过LDAP身份验证结合基于角色的授权策略,公司可以实现统一的身份验证和细粒度的权限管理,从而提高系统的安全性和管理效率。
相关文章:
#漏洞挖掘# 一文了解什么是Jenkins未授权访问!!!
免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停…...
1.21学习记录
misc 2023isctf 你说爱我尊嘟假嘟 这题有点脑洞,需要把你说爱我换成Ook.将尊嘟换为Ook!假嘟换成Ook?(根据语气进行猜测吧)用在线工具解密最后用base64解密即可 2023isctf 杰伦可是流量明星 解压后是一个MP3文件&am…...
【Pandas】pandas Series groupby
Pandas2.2 Series Function application, GroupBy & window 方法描述Series.apply()用于将一个函数应用到 Series 的每个元素或整个 SeriesSeries.agg()用于对 Series 数据进行聚合操作Series.aggregate()用于对 Series 数据进行聚合操作Series.transform()用于对 Series…...
Text2SQL 智能报表方案介绍
0 背景 Text2SQL智能报表方案旨在通过自然语言处理(NLP)技术,使用户能够以自然语言的形式提出问题,并自动生成相应的SQL查询,从而获取所需的数据报表,用户可根据得到结果展示分析从而为结论提供支撑&#…...
51c~SLAM~合集1
我自己的原文哦~ https://blog.51cto.com/whaosoft/12327374 #GSLAM 自动驾驶相关~~~ 一个通用的SLAM架构和基准 GSLAM:A General SLAM Framework and Benchmark 开源代码:https://github.com/zdzhaoyong/GSLAM SLAM技术最近取得了许多成功&am…...
服务器安装ESXI7.0系统及通过离线包方式升级到ESXI8.0
新到了一台物理服务器需要安装系统,项目不急用,先拿来做些实验。 本次实验目标: 1、在物理服务器上安装ESXI7.0系统; 2、通过离线包升级方式将ESXI7.0升级为ESXI8.0。 实验环境准备: 物理服务器1台,型号…...
计算机网络 (52)秘钥分配
一、重要性 在计算机网络中,密钥分配是密钥管理中的一个核心问题。由于密码算法通常是公开的,因此网络的安全性主要依赖于密钥的安全保护。密钥分配的目的是确保密钥在传输过程中不被窃取或篡改,同时确保只有合法的用户才能获得密钥。 二、方…...
xctf-comment(Intruder,git恢复,SQL注入,Hex解码)
这题是2018年网鼎杯真题,考察 Burp Suite 的 Intruder 模块去找用户密码,使用 githacker 恢复代码(githack不行),代码审计发现SQL二次注入,尝试SQL注入读取文件内容,读取的是/home/www/.bash_hi…...
Docker Compose创建镜像服务
什么是Docker Compose 使用Docker Compose,可以使用YAML配置文件(称为Compose文件)来配置应用程序的服务,然后使用Compose CLI从配置中创建并启动所有服务 。 Compose文件的默认路径是compose.yaml(首选)…...
kafka学习笔记5 PLAIN认证——筑梦之路
在Kafka中,SASL(Simple Authentication and Security Layer)机制包括三种常见的身份验证方式: SASL/PLAIN认证:含义是简单身份验证和授权层应用程序接口,PLAIN认证是其中一种最简单的用户名、密码认证方式&…...
Walrus Learn to Earn计划正式启动!探索去中心化存储的无限可能
本期 Learn to Earn 活动将带领开发者和区块链爱好者深入探索 Walrus 的技术核心与实际应用,解锁分布式存储的无限可能。参与者不仅能提升技能,还能通过完成任务赢取丰厚奖励!🌊 什么是 Walrus? 数据主权如今正成为越…...
Linux学习笔记
1、什么是Linux Linux,一般指GNU/Linux(单独的Linux内核并不可直接使用,一般搭配GUN套件,故得此称呼),是一种免费使用和自由传播的类UNIX操作系统。它主要受到Minix和Unix思想的启发,是一个基于POSIX的多用…...
解锁电商设计新速度:StartAI插件制作产品图实操教程
在电商设计这片竞争激烈的战场上,每一位设计师都在追求高效与创意的完美融合。繁琐的背景抠图、单一的设计模板、紧迫的时间周期,常常让我们力不从心。但现在,StartAI插件的问世,为我们的设计之路带来了革命性的改变。下面&#x…...
AutoPrompt框架和实操:如何用AutoPrompt完成电影评论和聊天审核任务?
1. AutoPrompt框架概述 1.1 框架定义与目标 AutoPrompt是一个旨在提升和完善用户提示以适应现实世界用例的提示优化框架。该框架通过迭代生成具有挑战性的边缘案例数据集,并相应地优化提示,从而自动生成针对用户意图量身定制的高质量、详细的提示。其核心目标是利用大型语言…...
修复 Kubernetes Deployment 修改后未生效的问题
在 Kubernetes 集群中,当尝试修改某些 Deployment 资源(如 calico-kube-controllers)的 image 配置时,发现修改总是未生效,并恢复到原样。这种问题通常是因为 Deployment 资源受到其他控制器(如 Operator&a…...
Excel 技巧17 - 如何计算倒计时,并添加该倒计时的数据条(★)
本文讲如何计算倒计时,并添加该倒计时的数据条。 1,如何计算倒计时 这里也要用公式 D3 - TODAY() 显示为下面这个样子的 然后右键该单元格,选 设置单元格格式 然后点 常规 这样就能显示出还书倒计时的日数了。 下拉适用到其他单元格。 2&a…...
Golang Gin系列-5:数据模型和数据库
在这篇Gin教程的博客中,我们将探索如何将模型和数据库与Gin框架无缝集成,使你能够构建健壮且可扩展的web应用程序。通过利用流行的库并遵循最佳实践,你将学习如何定义模型、建立数据库连接、执行CRUD操作以及确保基于gin的项目中的数据完整性…...
Android系统开发(十九):无缝拉伸的艺术——9-Patch 可绘制对象详解
引言 在移动开发中,背景、标题以及其他界面元素的设计质量直接影响用户体验。然而,如何让图片适应不同分辨率设备,成为开发者常常头疼的问题。这时,9-Patch 闪亮登场!它不仅可以无缝拉伸,还能保持视觉效果…...
物联网网关Web服务器--CGI开发实例BMI计算
本例子通一个计算体重指数的程序来演示Web服务器CGI开发。 硬件环境:飞腾派开发板(国产E2000处理器) 软件环境:飞腾派OS(Phytium Pi OS) 硬件平台参考另一篇博客:国产化ARM平台-飞腾派开发板…...
计算机网络 (51)鉴别
前言 计算机网络鉴别是信息安全领域中的一项关键技术,主要用于验证用户或信息的真实性,以及确保信息的完整性和来源的可靠性。 一、目的与重要性 鉴别的目的是验明用户或信息的正身,对实体声称的身份进行唯一识别,以便验证其访问请…...
Mellanox ConnectX 系列网卡的双驱动架构:以太网与 InfiniBand 的协同设计
在现代数据中心和高性能计算(HPC)环境中,网络硬件的性能和功能至关重要。Mellanox ConnectX 系列网卡以其卓越的性能和多功能性而闻名,支持从传统的以太网到高性能的 InfiniBand 网络协议。这种多功能性使得 Mellanox 网卡能够满足不同应用场景的需求,从常规的数据中心网络…...
【Java】阿里环球Antom支付对接
阿里环球Antom支付对接 线上文档地址: GitHub:https://github.com/alipay/global-open-sdk-java 文档:https://global.alipay.com/docs/ac/ams_zh-cn/session_cashier maven: <!--阿里国际支付--><dependency><g…...
【vim】vim编辑器如何设置行号
vim编辑器如何设置行号 一、**临时设置行号**二、永久设置行号2.1. **用户配置文件方式(针对当前用户)**2.2. **全局配置文件方式(谨慎使用,会影响所有用户)** 在Vim中设置行号有以下两种常见的方法: 一、…...
爬虫基础之爬取某站视频
目标网址:为了1/4螺口买小米SU7,开了一个月,它值吗?_哔哩哔哩_bilibili 本案例所使用到的模块 requests (发送HTTP请求)subprocess(执行系统命令)re (正则表达式操作)json (处理JSON数据) 需求分析: 视频的名称 F12 打开开发者工具 or 右击…...
2024嵌入式系统的未来发展与技术洞察分享
时间如白驹过隙,不知不觉又是一年,这一年收获满满。接下来,将本年度对技术的感悟和洞察分析如下,希望对大家有所帮助。 在过去几十年里,嵌入式系统技术迅速发展,成为现代电子设备和智能硬件的核心组成部分。…...
[微服务]注册中心优化
环境隔离 企业实际开发中,往往会搭建多个运行环境,例如: 开发环境测试环境预发布环境生产环境 这些不同环境之间的服务和数据之间需要隔离。 还有的企业中,会开发多个项目,共享nacos集群。此时,这些项目…...
Leetcode 3426. Manhattan Distances of All Arrangements of Pieces
Leetcode 3426. Manhattan Distances of All Arrangements of Pieces 1. 解题思路2. 代码实现 题目链接:3426. Manhattan Distances of All Arrangements of Pieces 1. 解题思路 这道题很惭愧,一开始没有搞定,后来看了答案想了想ÿ…...
【重庆市乡镇界】面图层shp格式arcgis数据乡镇名称和编码wgs84坐标无偏移内容测评
标题中的“最新重庆市乡镇界面图层shp格式arcgis数据乡镇名称和编码wgs84坐标无偏移最新”指的是一个地理信息系统(GIS)的数据集,特别设计用于ArcGIS软件。这个数据集包含了重庆市所有乡镇的边界信息,以Shapefile(.shp…...
基于ChatGPT的论文写作辅助工具研究
**基于ChatGPT的论文写作辅助工具研究** **摘要**: 随着人工智能技术的飞速发展,自然语言处理(NLP)领域取得了显著进步。ChatGPT作为OpenAI最新推出的生成式预训练Transformer模型,在文本生成、对话系统等方面展现出…...
定时器setTimeout和setInterval
setTimeOut()异步 setInterval()异步...
PCL 部分点云视点问题【2025最新版】
目录 一、问题概述二、解决方案1、软件实现2、代码实现三、调整之后博客长期更新,本文最近更新时间为:2025年1月18日。 一、问题概述 针对CloudCompare软件处理过的pcd格式点云,在使用PCL进行特征点提取、配准等实验中最终显示结果出现点云位置偏差较大的问题,本博客给出解…...
Cursor 与常见集成开发环境(IDE)的优势对比
Cursor与常见集成开发环境(IDE)的优势对比 一、AI 辅助编程能力 强大的代码生成功能: Cursor: 以其内置的强大 AI 辅助编程功能为核心优势。用户可以通过输入自然语言描述,快速生成各种编程语言的代码。例如…...
TDengine 做为 FLINK 数据源技术参考手册
Apache Flink 是一款由 Apache 软件基金会支持的开源分布式流批一体化处理框架,可用于流处理、批处理、复杂事件处理、实时数据仓库构建及为机器学习提供实时数据支持等诸多大数据处理场景。与此同时,Flink 拥有丰富的连接器与各类工具,可对接…...
不重启JVM,替换掉已经加载的类
不重启JVM,替换掉已经加载的类 直接操作字节码 使用ASM框架直接操作class文件,在类中修改代码,然后retransform就可以了 下边是BTrace官方提供的一个简单例子: package com.sun.btrace.samples;import com.sun.btrace.annotati…...
axios的使用总结
一、Axios 简介 Axios 是一个基于 Promise 的 HTTP 客户端,用于浏览器和 Node.js。在 Vue 项目中,它主要用于发送 HTTP 请求来获取数据(如从 API 获取数据)或者提交数据(如用户登录、注册等表单数据)。 二…...
使用 F12 查看 Network 及数据格式
在浏览器中,F12 开发者工具的 “Network” 面板是用于查看网页在加载过程中发起的所有网络请求,包括 API 请求,以及查看这些请求的详细信息和响应数据的。以下以常见的 Chrome 浏览器为例,介绍如何使用 F12 控制台查看 Network 里…...
HTML<img>标签
例子 如何插入图片: <img src"img_girl.jpg" alt"Girl in a jacket" width"500" height"600"> 下面有更多“自己尝试”的示例。 定义和用法 该<img>标签用于在 HTML 页面中嵌入图像。 从技术上讲&#x…...
Android系统开发(六):从Linux到Android:模块化开发,GKI内核的硬核科普
引言: 今天我们聊聊Android生态中最“硬核”的话题:通用内核镜像(GKI)与内核模块接口(KMI)。这是内核碎片化终结者的秘密武器,解决了内核和供应商模块之间无尽的兼容性问题。为什么重要&#x…...
每日一刷——1.20——准备蓝桥杯
链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目一 请统计某个给定范围[L, R]的所有整数中,数字2出现的次数。 比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次&a…...
知行合一:解决有心无力的问题,解决知易行难的问题,知行合一并不意味着事事都要合一,而是....
问题是什么? 想学习的时候,有手机阻碍我们。想戒掉手机短视频,卸载后,几天的时间,又下载了回来。制定了减肥计划,但就是不执行。明知道这样做是不对的,但依然行动不起来。 沉溺于各种各样的享…...
C++ Qt练习项目 日期时间数据 未完待续
个人学习笔记 新建项目 设计UI 实现组件功能 参考资料 4.7日期时间数据_哔哩哔哩_bilibili...
Golang学习笔记_28——工厂方法模式(实例)
Golang学习笔记_26——通道 Golang学习笔记_27——单例模式 Golang学习笔记_28——工厂方法模式 工厂方法模式(实例) package factory_method_demoimport "fmt"// Order 接口,定义订单的基本操作 type Order interface {Calculate…...
linux下springboot项目nohup日志或tomcat日志切割处理方案
目录 1. 配置流程 2. 配置说明 其他配置选项: 3. 测试执行 4. 手动执行 https://juejin.cn/post/7081890486453010469 通常情况下,我们的springboot项目部署到linux服务器中,通过nohup java -jar xxx.jar &指令来进行后台运行我们…...
SentencePiece和 WordPiece tokenization 的含义和区别
SentencePiece和 WordPiece tokenization 的含义和区别 SentencePiece 和 WordPiece 都是常用的分词(tokenization)技术,主要用于自然语言处理(NLP)中的文本预处理,尤其是在处理大规模文本数据时。它们都基于子词(subword)单元,能够将未登录词(out-of-vocabulary, O…...
视频修复最强算法 部署笔记2025
目录 模型下载: 模型: 原版保存的视频,vs code不播放: 模型下载: Release ProPainter V0.1.0 Release sczhou/ProPainter GitHub huggingface-cli download --resume-download lixiaowen/diffuEraser --local-dir /mnt/pfs/models/huggingface/models--lixiaowen--d…...
Java数据结构——优先队列
目录 引言1. 优先队列2. 优先队列的实现2.1 堆的概念2.2 堆的创建2.2.1 堆的向下调整2.3 堆的插入2.4 堆的删除 3. 总结 引言 前面一篇文章讲了二叉树,本篇将讲述数据结构中的优先队列,优先队列则需要用到完全二叉树来实现。 1. 优先队列 队列&#x…...
红外热成像之无人机载荷
电力巡检 相较于传统的人工电力巡线方式,无人机巡检能够在高空对人工难以达到或无法检测的设备进行检测,实现了电子化、信息化、智能化巡检,可以提高巡检的工作效率和应急抢险水平。 森林防火 无人机搭载红外光电系统能在森林高空进行全天候监…...
深入Spring Boot:自定义Starter开发与实践
引言 Spring Boot通过其强大的自动配置机制和丰富的Starter模块,极大地简化了Spring应用的开发过程。Starter模块封装了一组相关的依赖和配置,使得开发者可以通过简单的依赖引入,快速启用特定的功能。然而,除了使用Spring Boot提…...
MasterSAM downloadService任意文件读取(CVE-2024-55457)(附脚本)
免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 0x0…...
【Pytest】基础到高级功能的理解使用
文章目录 第一部分:Pytest 简介1.1 什么是 Pytest?1.2 Pytest 的历史1.3 Pytest 的核心概念1.4 Pytest 的特点1.5 为什么选择 Pytest? 第二部分:Pytest 的基本使用2.1 安装 Pytest2.2 编写第一个测试用例2.2.1 创建一个简单的测试…...