当前位置: 首页 > news >正文

#漏洞挖掘# 一文了解什么是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 是一个可扩展的持续集成引擎,旨在提供一个开放易用的软件平台,使软件的持续集成变得可能。它通过自动化重复性任务,如构建、测试和部署,来减少开发人员的工作负担,从而提高开发效率。

主要功能

  1. 持续构建和测试:Jenkins 可以自动执行代码的构建和测试,确保每次代码提交都不会破坏现有功能。
  2. 监控任务执行:Jenkins 可以监控各种定时任务的执行情况,并提供详细的执行报告。
  3. 项目源代码修改检测:Jenkins 能够从版本控制系统(如 Subversion 或 Git)中检测到最新的代码修改,并自动生成修改列表。
  4. 分布式构建:Jenkins 支持在多台机器上并行构建,充分利用硬件资源,节省构建时间。
  5. 插件支持:Jenkins 拥有丰富的插件生态系统,用户可以根据需要安装各种插件,扩展 Jenkins 的功能。

工作原理

Jenkins 的工作原理可以概括为以下几个步骤:

  1. 代码提交:开发人员将代码提交到版本控制系统。
  2. 触发构建:Jenkins 监控版本控制系统的变化,一旦检测到新的代码提交,就会自动触发构建过程。
  3. 执行构建:Jenkins 执行一系列预定义的构建步骤,如编译代码、运行单元测试等。
  4. 生成报告:构建完成后,Jenkins 会生成详细的构建报告,包括构建状态、测试结果等。
  5. 通知结果:Jenkins 可以通过邮件、即时消息等方式通知相关人员构建结果。

安装和配置

Jenkins 的安装和配置相对简单:

  1. 下载 Jenkins:可以从 Jenkins 官方网站下载 Jenkins 的安装包。
  2. 安装 Jenkins:将 Jenkins 安装包部署到 Servlet 容器(如 Tomcat)中,或者直接运行 Jenkins WAR 包。
  3. 配置 Jenkins:通过 Jenkins 提供的 Web 界面进行配置,包括设置构建任务、配置插件等。

应用场景

Jenkins 广泛应用于各种软件开发项目中,特别是在敏捷开发和 DevOps 实践中。它可以帮助团队实现持续集成和持续交付,提高软件发布的频率和质量。

二、什么是Jenkins未授权访问

Jenkins未授权访问是指在Jenkins系统中,由于缺乏适当的身份验证和访问控制,攻击者能够在没有合法凭证的情况下访问Jenkins的管理界面或执行敏感操作。这种安全漏洞可能导致严重的后果,包括但不限于:

  1. 执行任意命令:攻击者可以通过Jenkins的“脚本命令行”功能执行任意系统命令,从而完全控制服务器。
  2. 修改配置:攻击者可以修改Jenkins的配置,包括添加恶意插件、更改构建任务等。
  3. 窃取敏感信息:攻击者可以访问Jenkins存储的敏感信息,如凭据、构建日志等。
  4. 创建后门:攻击者可以在Jenkins中创建后门,以便在未来随时访问系统。

漏洞原因

Jenkins未授权访问漏洞通常由以下原因引起:

  • 默认配置不安全:早期版本的Jenkins默认配置允许任何用户访问管理界面,而不需要身份验证。
  • 弱口令:即使启用了身份验证,使用弱口令也可能导致账户被暴力破解。
  • 暴露在公网:将Jenkins直接暴露在公网而没有适当的防火墙规则和安全配置,也会增加被攻击的风险。

漏洞复现

漏洞复现通常包括以下步骤:

  1. 访问管理页面:通过URL直接访问Jenkins的管理页面,如http://<ip>/manage
  2. 进入脚本命令行:在管理页面中找到并进入“脚本命令行”功能。
  3. 执行命令:在脚本命令行中执行任意系统命令,如查看文件列表、创建文件等。

修复方法

为了防止Jenkins未授权访问漏洞,可以采取以下措施:

  1. 升级版本:使用最新版本的Jenkins,因为新版本通常会修复已知的安全漏洞。
  2. 配置身份验证:启用并配置强身份验证机制,确保只有授权用户才能访问Jenkins。
  3. 限制公网访问:避免将Jenkins直接暴露在公网,使用防火墙规则限制访问。
  4. 定期审计:定期检查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漏洞的示例步骤:

  1. 下载并安装OWASP Dependency-Check。
  2. 配置Dependency-Check以扫描Jenkins安装目录。
  3. 运行扫描命令:
dependency-check.sh  -s /path/to/jenkins -o /path/to/output 

    4.分析生成的报告,查看是否有已知漏洞。

六、Jenkins授权策略的实际案例

Jenkins授权策略的实际案例可以帮助你更好地理解和应用Jenkins的安全配置。以下是一些具体的案例,展示了如何使用不同的授权策略来管理Jenkins的权限。

案例1:基于角色的授权策略(Role-Based Authorization Strategy)

场景

一家公司希望对Jenkins的权限进行细粒度控制,使得不同部门的开发人员只能访问和管理自己部门的项目。

步骤
  1. 安装Role-Based Authorization Strategy插件
    • 登录Jenkins管理界面。
    • 导航到Manage Jenkins > Manage Plugins
    • Available标签页中搜索Role-Based Authorization Strategy插件并安装。
  2. 配置全局安全设置
    • 导航到Manage Jenkins > Configure Global Security
    • Authorization部分,选择Role-Based Strategy
  3. 创建角色
    • 导航到Manage Jenkins > Manage and Assign Roles
    • 选择Manage Roles,创建全局角色(如admindeveloper)、项目角色(如dev-team-1dev-team-2)和节点角色(如build-node)。
  4. 分配角色
    • 选择Assign Roles,将用户或用户组分配到相应的角色。
    • 例如,将dev-team-1角色分配给开发团队1的成员,将admin角色分配给系统管理员。
结果

通过基于角色的授权策略,公司可以确保每个用户只能访问和管理自己部门的项目,从而提高了系统的安全性。

案例2:矩阵授权策略(Matrix-Based Authorization Strategy)

场景

一家公司希望对Jenkins的权限进行更加灵活的控制,允许不同用户对同一项目具有不同的权限。

步骤
  1. 配置全局安全设置
    • 导航到Manage Jenkins > Configure Global Security
    • Authorization部分,选择Matrix-based security
  2. 创建用户和用户组
    • 导航到Manage Jenkins > Manage Users,创建用户或用户组。
    • 例如,创建用户alicebob,并将他们加入用户组developers
  3. 配置项目权限
    • 导航到具体项目的配置页面。
    • Authorization部分,选择Matrix-based security
    • 为每个用户或用户组分配具体的权限,如ReadBuildCancel等。
    • 例如,赋予alice对项目的ReadBuild权限,赋予bob对项目的ReadBuildCancel权限。
结果

通过矩阵授权策略,公司可以为不同用户分配不同的权限,从而实现更加精细的权限控制。

案例3:LDAP身份验证结合角色授权

场景

一家公司希望使用LDAP进行身份验证,并结合基于角色的授权策略来管理Jenkins的权限。

步骤
  1. 配置LDAP身份验证
    • 导航到Manage Jenkins > Configure Global Security
    • Security Realm部分,选择LDAP
    • 配置LDAP服务器的连接信息,如服务器URL、用户DN模式等。
  2. 安装Role-Based Authorization Strategy插件
    • 导航到Manage Jenkins > Manage Plugins
    • Available标签页中搜索Role-Based Authorization Strategy插件并安装。
  3. 配置全局安全设置
    • 导航到Manage Jenkins > Configure Global Security
    • Authorization部分,选择Role-Based Strategy
  4. 创建角色并分配用户
    • 导航到Manage Jenkins > Manage and Assign Roles
    • 创建全局角色、项目角色和节点角色。
    • 将LDAP用户或用户组分配到相应的角色。
结果

通过LDAP身份验证结合基于角色的授权策略,公司可以实现统一的身份验证和细粒度的权限管理,从而提高系统的安全性和管理效率。

相关文章:

#漏洞挖掘# 一文了解什么是Jenkins未授权访问!!!

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…...

QT QListWidget控件 全面详解

本系列文章全面的介绍了QT中的57种控件的使用方法以及示例,包括 Button(PushButton、toolButton、radioButton、checkBox、commandLinkButton、buttonBox)、Layouts(verticalLayout、horizontalLayout、gridLayout、formLayout)、Spacers(verticalSpacer、horizontalSpacer)、…...

【Vim Masterclass 笔记25】S10L45:Vim 多窗口的常用操作方法及相关注意事项

文章目录 S10L45 Working with Multiple Windows1 水平分割窗口2 在水平分割的新窗口中显示其它文件内容3 垂直分割窗口4 窗口的关闭5 在同一窗口水平拆分出多个窗口6 关闭其余窗口7 让四个文件呈田字形排列8 光标在多窗口中的定位9 调节子窗口的尺寸大小10 变换子窗口的位置11…...

包文件分析器 Webpack Bundle Analyzer

webpack-bundle-analyzer 是一个非常有用的工具&#xff0c;用于可视化和分析 Webpack 打包生成的文件。这使得开发者能够更好地理解应用的依赖关系、包的大小&#xff0c;以及优化打包的机会。以下是关于 webpack-bundle-analyzer 的详细介绍&#xff0c;包括它的安装、使用以…...

代码随想录day14

二叉树的反转&#xff0c;采用迭代&#xff0c;只能用前序和后序遍历 /*** Definition for a binary tree node.* struct TreeNode {* int val;* TreeNode *left;* TreeNode *right;* TreeNode() : val(0), left(nullptr), right(nullptr) {}* TreeNode(i…...

react19新API之use()用法总结

React use() Hook 使用指南 概述 use() 是 React 19 引入的新 Hook&#xff0c;它允许你在组件内部直接使用 Promise、Context 和其他可订阅的值。它是一个更通用的数据获取和订阅机制。 基本语法 const value use(resource);主要用途 1. Promise 处理 function UserDet…...

67,【7】buuctf web [HarekazeCTF2019]Avatar Uploader 2(未完成版)

进入靶场 和上一题一母同胞&#xff0c;先把上一题的答案拖进去看看 区别在于上一题这块直接显示了flag&#xff0c;这里并没有 看看源码 加载不出来&#xff0c;ctrlu <!-- 上传头像的提示信息&#xff0c;说明上传要求 --><p>Please upload a PNG image less th…...

ANSYS HFSS 中的相控天线阵列仿真方法

概述 相控天线阵列系统广泛使用&#xff0c;从国防雷达应用到商业 5G 应用。设计这些天线阵列涉及复杂的数学运算&#xff0c;需要全波仿真。Ansys HFSS 全场 3D 电磁仿真软件可以在合理的时间内以较低的计算成本仿真复杂的相控阵天线系统&#xff0c;同时考虑复杂激励、环境&…...

stm32 L051 adc配置及代码实例解析

一 cude的设置&#xff1a; 1. 接口的基本设置&#xff1a; 2. 参数的设置&#xff1a; 二 代码的逻辑&#xff1a; 1. 上面的直接生成代码&#xff0c;然后使用下面源码即可读到adc的数据&#xff1a; void adc_battery_start(void) {uint32_t ADC_value 0;HAL_ADC_Start(&…...

KUKA示教器仿真软件OfficeLite8.6.2,EthernetKRL3.1.3通信

一、准备软件。 1、vmware17.6.1 2、OfficeLite8.6.2 3、EthernetKRL3.1.3 4、KUKA Router 5、EthernetKRL_Server 通过网盘分享的文件&#xff1a;库卡相关软件 链接: https://pan.baidu.com/s/1NwvR3RVP0edLBeZnnnCYvw 提取码: smys 二、安装vmware17.6.1 1、找到下载…...

Erlang语言的并发编程

Erlang语言的并发编程 引言 并发编程是现代软件开发中的一个重要领域&#xff0c;尤其是在面对需要高效处理大量任务的应用时。Erlang是一种专门设计用于并发编程的编程语言&#xff0c;由于其在电信和即时通信系统中的广泛应用&#xff0c;逐渐引起了开发者的关注。Erlang的…...

【数据挖掘实战】 房价预测

本次对kaggle中的入门级数据集&#xff0c;房价回归数据集进行数据挖掘&#xff0c;预测房屋价格。 本人主页&#xff1a;机器学习司猫白 机器学习专栏&#xff1a;机器学习实战 PyTorch入门专栏&#xff1a;PyTorch入门 深度学习实战&#xff1a;深度学习 ok&#xff0c;话不多…...

我的创作纪念日,纪念我的第512天

目录 年末 年初 入围 博客 变动 生活 期待 年末 很快&#xff0c;2024年已经过去了&#xff0c;本想在跨年夜的时候营造一点小小的仪式感&#xff0c;结果也因为身体的原因放弃了&#xff0c;浑身感觉疼痛&#xff0c;躺在床上&#xff0c;闭上眼睛&#xff0c;什么也不…...

【科研建模】Pycaret自动机器学习框架使用流程及多分类项目实战案例详解

Pycaret自动机器学习框架使用流程及项目实战案例详解 1 Pycaret介绍2 安装及版本需求3 Pycaret自动机器学习框架使用流程3.1 Setup3.2 Compare Models3.3 Analyze Model3.4 Prediction3.5 Save Model4 多分类项目实战案例详解4.1 ✅ Setup4.2 ✅ Compare Models4.3 ✅ Experime…...

PHP语言的网络编程

PHP语言的网络编程 网络编程是现代软件开发中不可或缺的一部分&#xff0c;尤其是在日益发展的互联网时代。PHP&#xff08;Hypertext Preprocessor&#xff09;是一种广泛使用的开源脚本语言&#xff0c;专门用于Web开发。它的灵活性、易用性以及强大的社区支持使得PHP在网络…...

计算机的错误计算(二百一十八)

摘要 大模型能确定 sin(2.6^100) 的符号吗&#xff1f;实验表明&#xff0c;大模型给的结论是正确的&#xff0c;但其证明过程是错误百出。大模型的推理实在是不敢恭维。 就同样题目&#xff0c;测试一下另外一个大模型。 例1. 能确定 sin(2.6^100) 的符号吗&#xff1f; 下…...

《鸿蒙Next原生应用的独特用户体验之旅》

界面设计与交互方面 简洁性与一致性&#xff1a;iOS界面以简洁统一著称&#xff0c;而鸿蒙Next的界面设计同样主打简洁&#xff0c;各部件采用悬浮效果&#xff0c;营造出空间感&#xff0c;如天气App的展示更加逼真。安卓系统由于不同厂商的定制化程度较高&#xff0c;导致用户…...

MDX语言的字符串处理

MDX语言的字符串处理 引言 MDX&#xff08;Multidimensional Expressions&#xff09;是一种专门用于多维数据库查询和分析的语言&#xff0c;特别是在Microsoft SQL Server Analysis Services&#xff08;SSAS&#xff09;中使用广泛。MDX不仅用于查询多维数据&#xff0c;还…...

游戏AI,让AI 玩游戏有什么作用?

让 AI 玩游戏这件事远比我们想象的要早得多。追溯到 1948 年&#xff0c;图灵和同事钱伯恩共同设计了国际象棋程序 Turochamp。之所以设计这么个程序&#xff0c;图灵是想说明&#xff0c;机器理论上能模拟人脑能做的任何事情&#xff0c;包括下棋这样复杂的智力活动。 可惜的是…...

Java 设计模式 二 单例模式 (Singleton Pattern)

单例模式 (Singleton Pattern) 是一种常见的设计模式&#xff0c;属于创建型模式。它的核心思想是确保一个类只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。通常用于那些需要全局控制的场景&#xff0c;比如配置管理、日志系统、数据库连接池等。 1. 单例模式的…...

Java 中 final 关键字的奥秘

目录 一、final 修饰类&#xff1a;封印的 “永恒之石” 二、final 修饰变量&#xff1a;锁定的 “不变之值” 三、final 修饰方法&#xff1a;不可撼动的 “坚固堡垒” 四、总结 在 Java 编程的世界里&#xff0c;final 关键字就像一把神奇的 “锁”&#xff0c;一旦使用&…...

C# 通用缓存类开发:开启高效编程之门

引言 嘿&#xff0c;各位 C# 开发者们&#xff01;在当今快节奏的软件开发领域&#xff0c;提升应用程序的性能就如同给跑车装上涡轮增压&#xff0c;能让你的项目在激烈的竞争中脱颖而出。而构建一个高效的 C# 通用缓存类&#xff0c;无疑是实现这一目标的强大武器。 想象一…...

电脑办公技巧之如何在 Word 文档中添加文字或图片水印

Microsoft Word是全球最广泛使用的文字处理软件之一&#xff0c;它为用户提供了丰富的编辑功能来美化和保护文档。其中&#xff0c;“水印”是一种特别有用的功能&#xff0c;它可以用于标识文档状态&#xff08;如“草稿”或“机密”&#xff09;、公司标志或是版权信息等。本…...

记录一下OpenCV Contrib 编译踩的坑

最近有需要采用OpenCV Contrib 里面的函数做一下处理&#xff0c;要重新编译&#xff0c;一路编译两三个小时了&#xff0c;记录一下备忘吧。 1、编译前先准备好如下环境 ①visual studio已安装&#xff0c;具体版本和型号根据需求经验来&#xff0c;我看常用的是VS2015、VS201…...

01.04、回文排序

01.04、[简单] 回文排序 1、题目描述 给定一个字符串&#xff0c;编写一个函数判定其是否为某个回文串的排列之一。回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。回文串不一定是字典当中的单词。 2、解题思路 回文串的特点&#xff1a; 一个回文串在…...

[创业之路-259]:《向流程设计要效率》-1-让成功成熟业务交给流程进行复制, 把创新产品新业务新客户交给精英和牛人进行探索与创造

标题&#xff1a;成功与创新的双轨并行&#xff1a;以流程复制成熟&#xff0c;以精英驱动新知 在当今这个日新月异的商业环境中&#xff0c;企业要想持续繁荣发展&#xff0c;就必须在稳定与创新之间找到完美的平衡点。一方面&#xff0c;成熟业务的稳定运营是企业生存和发展的…...

如何使用usememo和usecallback进行性能优化,什么时候使用usecallback,什么时候使用usememo

React useMemo 和 useCallback 性能优化总结以及使用场景 基本概念 useMemo 用于缓存计算结果&#xff0c;避免在每次渲染时重复进行昂贵的计算。 useCallback 用于缓存函数引用&#xff0c;避免在每次渲染时创建新的函数引用。 使用时机对比 useMemo 适用场景 复杂计算…...

22. C语言 输入与输出详解

本章目录: 前言1. 输入输出的基础概念1.1 标准输入输出流1.2 输入输出函数 2. 格式化输出与输入2.1 使用 printf() 进行输出示例 1: 输出字符串示例 2: 输出整数示例 3: 输出浮点数 2.2 使用 scanf() 进行输入示例 4: 读取整数和字符改进方案&#xff1a;使用getchar()清理缓冲…...

WPF实战案例 | C# WPF实现计算器源码

WPF实战案例 | C# WPF实现计算器源码 一、设计来源计算器应用程序讲解1.1 主界面1.2 计算界面 二、效果和源码2.1 界面设计&#xff08;XAML&#xff09;2.2 代码逻辑&#xff08;C#&#xff09;2.3 实现步骤总结 源码下载更多优质源码分享 作者&#xff1a;xcLeigh 文章地址&a…...

AutoGen入门——快速实现多角色、多用户、多智能体对话系统

1.前言 如https://github.com/microsoft/autogen所述&#xff0c;autogen是一多智能体的框架&#xff0c;属于微软旗下的产品。 依靠AutoGen我们可以快速构建出一个多智能体应用&#xff0c;以满足我们各种业务场景。 本文将以几个示例场景&#xff0c;使用AutoGen快速构建出…...