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

敏感信息泄漏怎么破?来试试极狐GitLab 的密钥检测吧

前言


在应用程序开发过程中,一个很常见的问题就是:开发人员为了本地 debug 方便,会 hardcode 一些信息,比如连接数据库的用户名、密码、连接第三方 app 的 token、certificate 等,如果在提交代码的时候没有及时删除 hardcode 的信息,则非常容易造成敏感信息泄漏,带来被拖库、撞库等风险。

因此,敏感信息管理是 DevSecOps 中一个非常重要的话题。诚然,敏感信息的管理需要软件开发中的每一个人来负责,有安全意识,但是是人就总有疏忽犯错的时候,所以最好的方式之一就是将敏感信息的检测集成到 CI/CD 中,做到持续监测,而且能在开发人员提交代码的时候就进行,真正做到安全左移。

极狐GitLab 提供开箱即用的 DevSecOps 功能,包括七大功能:容器镜像扫描、静态应用安全测试 (SAST)、动态应用安全扫描(DAST)、密钥检测、License合规、依赖项扫描以及模糊测试。关于镜像安全扫描,可以查看文章极狐GitLab DevSecOps 七剑下天山之容器镜像安全扫描。这篇文章将介绍极狐GitLab DevSecOps 中关于敏感信息检测的功能。

极狐GitLab 敏感信息检测


极狐GitLab 敏感信息检测(Secret Detection)功能是开箱即用的,在 11.9 版本中引入。既可以对提交代码中的敏感信息进行检测,也可以对远程仓库进行重复性的扫描来进行敏感信息检测;既可以使用默认的规则进行敏感信息检测,也可以通过自定义规则来完成敏感信息检测。极狐GitLab 敏感信息检测是与语言无关的,也就以为是“全谱”可用的。

检测原理

敏感信息检测的思路一般是:读取文件内容 --> 根据定义规则进行内容匹配 -> 出具检测报告。极狐GitLab 敏感信息检测依旧是通过特定的分析器(analyzer)来完成的,而分析器的核心组件是开源的 Gitleaks。

Gitleaks

Gitleaks 是一款开源的 SAST 工具,可以用来对 hadrcode 的密码、API key、token 等敏感信息做检测。Gitleaks 具有安装容易,使用方便的特点。

Gitleaks 的安装

Gitleaks 的安装有多种方式,本文以 macOS 为例来演示,使用下面的命令即可在 macOS 上安装 Gitleaks:

$ brew install gitleaks

可以使用 gitleaks -h 或者 gitleaks --version 来检查是否安装成功:

$ gitleaks --version
7.6.1

Gitleaks 的使用

Gitleaks 可以直接扫描本地文件,也可以直接扫描远端仓库。

  • 使用 Gitleaks 来扫描本地文件

先来看看对于本地文件的扫描。新建一个包含敏感信息的文件,诸如:

$ cat > secret.txt <<  EOF
password="12232"
token="ADB#@DC"
EOF

添加一个 gitleaks.toml 文件,写入匹配规则:

$ cat > config.toml << EOF
title = "gitleaks config"
[[rules]]
description = "Password Type"
regex = '''[0-9]'''
tags = ["gitlab", "security"]
EOF

gitleaks 的匹配规则是用 TOML 来定义的。

利用上述匹配规则,能够对全部是数字的信息进行匹配,并且将其标记为敏感信息,可以用如下命令进行扫描检测:

$ gitleaks --config-path=config.toml \--path=secret.txt --no-git \-v --report=report.json

参数说明:

  • --config-path:指定写入了匹配规则的配置文件,一般是 xx.toml

  • --path:指定要扫描检测的文件或者目录

  • --report:指定输出报告的路径

  • --no-git:将扫描目录视为普通目录去扫描检测,否则会去查找 .git 目录,找不到就提示失败

可以看到如下的扫描结果:

{"line": "password=\"12232\"","lineNumber": 1,"offender": "1","offenderEntropy": -1,"commit": "","repo": "","repoURL": "","leakURL": "","rule": "Password Type","commitMessage": "","author": "","email": "","file": ".","date": "0001-01-01T00:00:00Z","tags": "gitlab, security"
}
INFO[0000] scan time: 224 microseconds
WARN[0000] leaks found: 1

结果显示,扫描出一处匹配(leaks found: 1),扫描时长(scan time: 224 microseconds,可以看出非常快)。而这一处泄漏就是第一行 password="12232"。这和最开始设置匹配规则时候的设想是一样的。

同时会在当前目录下看到一个 report.json 的文件:

$ls -ltr report.json
-rw-r--r--  1 xiaomage  wheel  328 Oct 26 14:24 report.json

里面记录的内容和上述标准输出的内容是一致的。

需要注意的是,如果检测出敏感信息,则扫描命令的退出结果为非 0 值:

$ gitleaks --config-path=config.toml --path=secret.txt --no-git -v --report=report.json
$ echo $?
1

如果想要指定执行命令的退出结果,则可以使用参数 --leaks-exit-code:

$ gitleaks --config-path=config.toml --path=secret.txt --no-git -v --report=report.json --leaks-exit-code=0
$ echo $?
0
  • 使用 Gitleaks 扫描远端仓库

将上述的 secret.txt 文件和 gitleaks.toml 文件存放到极狐GitLab 的仓库中,如下:

图片

执行如下命令进行远端仓库扫描:

$ gitleaks --repo-url=git@gitlab.cn:majinghe/secret-detection.git \
--username=jhma@gitla.cn --access-token=personal-token \
--ssh-key=path-to-ssh-key --repo-config-path=gitleaks.toml \
--report=report.json

参数说明:

  • --repo-url:指定远端仓库的地址

  • --username:扫描私有仓库时指定仓库的用户名

  • --access-token:扫描私有仓库时指定的 personal access token,用来做权限验证;如果 --repo-url 是用 https 的方式,则此参数可换成 --password

  • --ssh-key:指定访问私有仓库所需的 ssh-key

  • --repo-config-path:指定远端仓库中的规则匹配文件

  • --report:指定扫描报告的名称

扫描结果如下:

INFO[0000] cloning... git@gitlab.cn:majinghe/secret-detection.git
INFO[0000] scan time: 999 microseconds
INFO[0000] commits scanned: 9
WARN[0000] leaks found: 9

很奇怪的是看到了 处检测点,但是文件里面只有一处啊,到底怎么回事呢?

对于 Gitleaks 来讲,如果不做额外的参数指定,则上述扫描命令会对远端仓库的所有 commit 进行扫描,上述仓库有 9 个 commit,所以扫描了 9 次。可以通过参数来制定针对某一个 commit 或者某一个范围的 commit 信息进行扫描。若指定某个 commit 进行扫描,可看到:

$ gitleaks --repo-url=https://gitlab.cn/majinghe/secret-detection.git --username=极狐GitLab-username --password=极狐GitLab-password --repo-config-path=gitleaks.toml --report=report.json --commit=83c4c5e364bc249e410a5aa92716a35da8080111
INFO[0000] cloning... https://gitlab.cn/majinghe/secret-detection.git
INFO[0001] scan time: 204 microseconds
INFO[0001] commits scanned: 1
WARN[0001] leaks found: 2

出现了 2 处匹配检测点,是因为将 gitleaks.toml 也进行了扫描:

{"line": "regex = '''[0-9]'''","lineNumber": 4,"offender": "0","offenderEntropy": -1,"commit": "83c4c5e364bc249e410a5aa92716a35da8080111","repo": "secret-detection.git","repoURL": "https://gitlab.cn/majinghe/secret-detection.git","leakURL": "https://gitlab.cn/majinghe/secret-detection.git/blob/83c4c5e364bc249e410a5aa92716a35da8080111/config.toml#L4","rule": "Password Type","commitMessage": "add files\n","author": "xiaomage","email": "jhma@gitlab.cn","file": "config.toml","date": "2021-10-26T14:38:20+08:00","tags": "gitlab, security"}

可以通过在 gitleaks.toml 中定制化一下匹配规则来只扫描 secret.txt 文件:

title = "gitleaks config"
[[rules]]
description = "Password Type"
file = '''secret.txt'''
regex = '''[0-9]'''
tags = ["gitlab", "security"]

重新扫描检测:

$ gitleaks --repo-url=https://gitlab.cn/majinghe/secret-detection.git --username=jhma@gitlab.cn --password=GitOpsIsMyMainJobIn2021 --repo-config-path=gitleaks.toml --report=report.json --commit=83c4c5e364bc249e410a5aa92716a35da8080111
INFO[0000] cloning... https://gitlab.cn/majinghe/secret-detection.git
INFO[0000] scan time: 130 microseconds
INFO[0000] commits scanned: 1
WARN[0000] leaks found: 1

此次扫描只匹配到一处检测点,内容如下:

[{"line": "password=\"12232\"","lineNumber": 1,"offender": "1","offenderEntropy": -1,"commit": "83c4c5e364bc249e410a5aa92716a35da8080111","repo": "secret-detection.git","repoURL": "https://gitlab.cn/majinghe/secret-detection.git","leakURL": "https://gitlab.cn/majinghe/secret-detection.git/blob/83c4c5e364bc249e410a5aa92716a35da8080111/secret.txt#L1","rule": "Password Type","commitMessage": "add files\n","author": "xiaomage","email": "jhma@gitlab.cn","file": "secret.txt","date": "2021-10-26T14:38:20+08:00","tags": "gitlab, security"}
]

可以看到成功匹配到 secret.txt 里面的敏感信息。

当然,Gitleaks 还有很多其他的参数来进行多种细粒度的扫描。

极狐GitLab 敏感信息检测实践


单独使用镜像做扫描

极狐GitLab 敏感信息检测是通过分析器(analyzer)来实现的,而 analyzer 的核心就是 Gitleaks。analyzer 的镜像为:

registry.gitlab.com/security-products/secret-detection:3

可以直接使用此镜像来完成敏感信息扫描。将上面测试用的包含 secret.txt 和 gitleaks.toml 文件的仓库 clone 到本地,然后执行下面的命令启动一个容器:

$ docker run --rm -d -it -v $(pwd):/tmp/ registry.gitlab.com/security-products/secret-detection:3 sh

可以用 docker exec -it  进入容器,在里面可以看到容器里面已经安装了 Gitleaks 和 anaylyzer:

$ gitleaks --version
v7.5.0
$ ./analyzer --version
[INFO] [secrets] [2021-10-27T01:27:43Z] ▶ GitLab secrets analyzer v3.22.0
analyzer version 3.22.0

analyzer 就是极狐GitLab 执行敏感信息检测的法宝,其本身是对 gitleaks 做了封装。大体思路就是读取 analyzer 命令后面的参数,然后拼装成 gitleaks 命令,再执行命令。

将 /tmp/gitleaks.tmol 文件拷贝至根目录,执行如下命令即可完成敏感信息扫描:

$ ./analyzer run --target-dir /tmp/secret.txt
[INFO] [secrets] [2021-10-27T01:25:46Z] ▶ GitLab secrets analyzer v3.22.0
[INFO] [secrets] [2021-10-27T01:25:46Z] ▶ Detecting project
[INFO] [secrets] [2021-10-27T01:25:46Z] ▶ Found project in /tmp[INFO] [secrets] [2021-10-27T01:25:46Z] ▶ Running analyzer
[INFO] [secrets] [2021-10-27T01:25:47Z] ▶ Creating report

拷贝的原因是 analyzer 默认读取根目录下自带的 gitleaks.toml 文件。为了匹配到测试使用的敏感信息,对匹配规则做了一些定制化改动。

查看扫描报告:

$ cat tmp/gitleaks-100398148.json
[{"line": "password=\"12232\"","lineNumber": 1,"offender": "1","offenderEntropy": -1,"commit": "","repo": "","repoURL": "","leakURL": "","rule": "Password Type","commitMessage": "","author": "","email": "","file": ".","date": "0001-01-01T00:00:00Z","tags": "gitlab, security"}
]

可以看到结果和用 gitleaks 命令扫描是一样的。关于 analyzer 更多的用法可以使用 analyzer h 查看:

$ ./analyzer h
[INFO] [secrets] [2021-10-27T01:32:42Z] ▶ GitLab secrets analyzer v3.22.0
NAME:analyzer - GitLab secrets analyzer v3.22.0USAGE:analyzer [global options] command [command options] [arguments...]VERSION:3.22.0AUTHOR:GitLabCOMMANDS:run, r      Run the analyzer on detected project and generate a compatible artifactsearch, s   Search for compatible projects and return project directoryanalyze, a  Analyze detected project and generate reportconvert, c  Convert analyzer output to a compatible artifacthelp, h     Shows a list of commands or help for one commandGLOBAL OPTIONS:--help, -h     show help (default: false)--version, -v  print the version (default: false)

当然,analyzer 很灵活的一点就是可以自己来根据极狐GitLab 提供的 Dockerfile 来构建自己所需的景象,内容如下:

FROM golang:1.15-alpine AS buildENV CGO_ENABLED=0 GOOS=linux
WORKDIR /go/src/app
COPY . .
# build the analyzer binary and automatically set the AnalyzerVersion
# variable to the most recent version from the CHANGELOG.md file
RUN CHANGELOG_VERSION=$(grep -m 1 '^## v.*$' "CHANGELOG.md" | sed 's/## v//') && \PATH_TO_MODULE=`go list -m` && \go build -ldflags="-X '$PATH_TO_MODULE/metadata.AnalyzerVersion=$CHANGELOG_VERSION'" -o analyzerFROM alpine:latestARG SCANNER_VERSION
ENV SCANNER_VERSION ${SCANNER_VERSION:-v7.5.0}RUN wget -O /usr/local/bin/gitleaks https://github.com/zricethezav/gitleaks/releases/download/${SCANNER_VERSION}/gitleaks-linux-amd64 && \chmod a+x /usr/local/bin/gitleaks && \apk add --no-cache gitCOPY --from=build --chown=root:root /go/src/app/analyzer /
COPY /gitleaks.toml /gitleaks.tomlENTRYPOINT []
CMD ["/analyzer", "run"]

和极狐GitLab CI 集成使用

只需要简单配置极狐GitLab CI,即可将敏感信息检测集成到极狐GitLab CI/CD 中:

variables:SECURE_ANALYZERS_PREFIX: "registry.gitlab.com/security-products"SECRETS_ANALYZER_VERSION: "3"services:- docker:20.10.7-dindstages:          - testsecret_detection:stage: testimage: "$SECURE_ANALYZERS_PREFIX/secret-detection:$SECRETS_ANALYZER_VERSION"services: []allow_failure: trueartifacts:reports:secret_detection: gl-secret-detection-report.jsonpaths: [gl-secret-detection-report.json]script:- cp config/gitleaks.toml /- ../../../analyzer run --target-dir . - cat gl-secret-detection-report.json

可以查看构建日志:

图片

内容过长,只截取了部分,可以从红色方框看到扫描的过程以及扫描报告。因为在极狐GitLab CI 中加了 artifacts 关键字,所以也可以直接下载报告到本地进行查阅,下载方式可以参考公众号文章极狐GitLab DevSecOps 七剑下天山之容器镜像安全扫描。

极狐GitLab DevSecOps CI/CD

可以将容器镜像扫描、敏感信息检测加入极狐GitLab CI 中,打造 DevSecOps CI/CD:

variables:CS_ANALYZER_IMAGE: registry.gitlab.com/security-products/container-scanning/trivy:4KUBECONFIG: /tmp/.kube/configSECURE_ANALYZERS_PREFIX: "registry.gitlab.com/security-products"SECRETS_ANALYZER_VERSION: "3"services:- docker:20.10.7-dindstages:          - build- test- deploybuild:image: docker:lateststage: buildservices:- docker:20.10.7-dindscript:- docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY- docker build -t $CI_REGISTRY_IMAGE:3.0.0 .- docker push $CI_REGISTRY_IMAGE:3.0.0container_scanning:image: "$CS_ANALYZER_IMAGE"stage: testvariables:GIT_STRATEGY: fetchDOCKER_USER: "$CI_REGISTRY_USER"DOCKER_PASSWORD: "$CI_REGISTRY_PASSWORD"DOCKER_IMAGE: $CI_REGISTRY_IMAGE:3.0.0allow_failure: falseartifacts:reports:container_scanning: gl-container-scanning-report.jsonpaths: [gl-container-scanning-report.json]dependencies: []script:- gtcs scansecret_detection:stage: testimage: "$SECURE_ANALYZERS_PREFIX/secret-detection:$SECRETS_ANALYZER_VERSION"services: []allow_failure: trueartifacts:reports:secret_detection: gl-secret-detection-report.jsonpaths: [gl-secret-detection-report.json]script:- cp gitleaks.toml /- ../../../analyzer run --target-dir . - cat gl-secret-detection-report.jsondeploy:stage: deployimage:name: bitnami/kubectl:latestentrypoint: [""]script:- mkdir -p /tmp/.kube- echo $kube_config | base64 -d > $KUBECONFIG- kubectl -n gitlab-k8s-demo apply -f deployment.yaml

可以查看 Pipeline 的构建流程:

图片

上述流程是极狐GitLab DevSecOps 中关于敏感信息检测的原理及演示,但是实际使用中,需要用户根据自身的需求,完成更复杂的配置、集成,而对于这些极狐GitLab 都有很好的支持。

写在最后


敏感信息检测其实是一个相对而言比较繁琐的安全工作,需要根据特定的敏感信息(不同厂商、不同产品的 API token,keys 等都有所不同)编写特定的匹配工作。可以将敏感信息检测集成到极狐GitLab CI/CD 中,实现安全左移、安全持续自动化,利用极狐GitLab 构建真正的 DevSecOps 体系。从而来保证软件供应链的安全。

相关文章:

敏感信息泄漏怎么破?来试试极狐GitLab 的密钥检测吧

前言 在应用程序开发过程中&#xff0c;一个很常见的问题就是&#xff1a;开发人员为了本地 debug 方便&#xff0c;会 hardcode 一些信息&#xff0c;比如连接数据库的用户名、密码、连接第三方 app 的 token、certificate 等&#xff0c;如果在提交代码的时候没有及时删除 ha…...

go学习之网络编程

文章目录 网络编程1、网络编程的基本介绍2.网络编程的基础知识1&#xff09;协议(tcp/ip)2&#xff09;OSI与TCP/ip参考模型3&#xff09;ip地址4&#xff09;端口(port)介绍5&#xff09;tcp socket编程的客户端和服务器端 3.socket编程快速入门4.经典项目-海量用户即时通讯系…...

将数组中的数逆序存放

本题要求编写程序&#xff0c;将给定的n个整数存入数组中&#xff0c;将数组中的这n个数逆序存放&#xff0c;再按顺序输出数组中的元素。 输入格式: 输入在第一行中给出一个正整数n&#xff08;1≤n≤10&#xff09;。第二行输入n个整数&#xff0c;用空格分开。 输出格式:…...

Unity Web 浏览器-3D WebView中有关于CanvasWebViewPrefab

一、CanvasWebViewPrefab默认设置 这个是在2_CanvasWebViewDemo示例场景文件中可以可以查看得到&#xff0c;可以看出CanvasWebViewPrefab的默认配置如下。 二、Web 浏览器网页和Unity内置UI的渲染顺序 1、如果你勾选了以下这个Native 2D Mode选项的话&#xff0c;那么Unit…...

一款计算机顶会爬取解析系统 paper info

一款计算机顶会爬取解析系统 paper info 背景项目实现的功能 技术方案架构设计项目使用的技术选型 使用方法本地项目部署使用ChatGPT等大模型创建一个ChatGPT助手使用阿里云 顶会数据量 百度网盘pfd文件json文件 Q&A github链接 &#xff1a;https://github.com/codebricki…...

CommonJs模块化实现原理ES Module模块化原理

CommonJs模块化实现原理 首先看一个案例 初始化项目 npm init npm i webpack -D目录结构如下&#xff1a; webpack.config.js const path require("path"); module.exports {mode: "development",entry: "./src/index.js",output: {path: p…...

实验4.1 静态路由的配置

实验4.1 静态路由的配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.设置交换机和路由器的基本配置。2.使用display ip interface brief命令查看接口配置信息。3.配置静态路由&#xff0c;实现全网互通。 六、任务验收七、任务小结 一、任务描述 某公司刚…...

Java网络编程-深入理解BIO、NIO

深入理解BIO与NIO BIO BIO 为 Blocked-IO&#xff08;阻塞 IO&#xff09;&#xff0c;在 JDK1.4 之前建立网络连接时&#xff0c;只能使用 BIO 使用 BIO 时&#xff0c;服务端会对客户端的每个请求都建立一个线程进行处理&#xff0c;客户端向服务端发送请求后&#xff0c;…...

ShenYu网关注册中心之HTTP注册原理

文章目录 1、客户端注册流程1.1、读取配置1.1.1、用于注册的 HttpClientRegisterRepository1.1.2、用于扫描构建 元数据 和 URI 的 SpringMvcClientEventListener 1.2、扫描注解&#xff0c;注册元数据和URI1.2.1、构建URI并写入Disruptor1.2.2、构建元数据并写入Disruptor1.2.…...

探索GameFi:区块链与游戏的未来融合

在过去的几年里&#xff0c;区块链技术逐渐渗透到各个领域&#xff0c;为不同行业带来了前所未有的变革。其中&#xff0c;游戏行业成为了一个引人注目的焦点&#xff0c;而这种结合被称为GameFi&#xff0c;即游戏金融。GameFi不仅仅是一个概念&#xff0c;更是一场区块链和游…...

Windows下使用CMake编译lua

Lua 是一个功能强大、高效、轻量级、可嵌入的脚本语言。它支持程序编程、面向对象程序设计、函数式编程、数据驱动编程和数据描述。 Lua的官方网站上只提供了源码&#xff0c;需要使用Make进行编译&#xff0c;具体的编译方法为 curl -R -O http://www.lua.org/ftp/lua-5.4.6.…...

【C语言(十一)】

C语言内存函数 一、memcpy使用和模拟实现 void * memcpy ( void * destination, const void * source, size_t num ); • 函数memcpy从source的位置开始向后复制num个字节的数据到destination指向的内存位置。 • 这个函数在遇到 \0 的时候并不会停下来。 • 如果sourc…...

系统运行占用过高

1、CPU过高的问题排查 示例代码&#xff1a; public class Test { static class MyThread extends Thread { public void run() { // 死循环&#xff0c;消耗CPU int i 0; while (true) { i; } } } public static void main(String args[]) throws InterruptedException { ne…...

HTML---初识CSS

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一.CSS概念 CSS是层叠样式表&#xff08;Cascading Style Sheets&#xff09;的缩写。它是一种用于描述HTML文档外观样式的标记语言。通过CSS&#xff0c;开发者可以在不改变HTML标记结构的情况…...

监控pod 容器外网请求网络带宽,过滤掉内网、基于k8spacket开发、prometheus开发export

首先安装k8spacket 安装k8spacket遇到问题&#xff0c;下载插件一直能不能下载成功&#xff0c;pod不能启动。所有手动下载处理。 helm repo add k8spacket https://k8spacket.github.io/k8spacket-helm-chart helm pull k8spacket/k8spacket打开values.yaml 文件 手动下载插…...

windows下docker环境安装

开启硬件虚拟化技术 win10中开启 Hyper-V Win10 下是否开启硬件虚拟化技术&#xff0c;在控制面板&#xff0c;启用 window 功能&#xff0c;找到 Hyper-V 选项&#xff0c;点勾选确认。如图&#xff1a; Windows 11 家庭中文版新增 Hyper-V选项 注意以下的解决方案来自win1…...

Python小程序 - 表格数值统计

题设&#xff1a;Excel表格中&#xff0c;计算如下图所示不同颜色&#xff08;蓝、黄、桔&#xff09;单元格值&#xff1a;各颜色填涂的单元格值的总和条件&#xff1a; - Excle表格中 - 分色标记&#xff0c;单元格有值 - 开始列&#xff08;当前为D&#xff09;&#xff0c;…...

Unity | Shader基础知识(第一集:unity中最简单的shader)

目录 一、unity的shader 二、创建一个shader&#xff08;在创建时&#xff0c;选前三种都可以&#xff09; 三、内容解读 1.shader一直都在 2.我们写shader在写什么 四、没有被干预的shader&#xff08;最简单的shader&#xff09; 相关阅读 编写着色器概述 - Unity 手册…...

橘子学K8S01之容器中所谓的隔离

我们一直都在说容器就是一个沙盒&#xff0c;沙盒技术顾名思义就是像一个集装箱一样&#xff0c;把应用(服务&#xff0c;进程之类的)装起来的技术&#xff0c;这样每个进程在自己的沙盒中和其他的沙盒隔离开来&#xff0c;每个沙盒之间存在一个边界使得他们互不干扰&#xff0…...

利用svm进行模型训练

一、步骤 1、将文本数据转换为特征向量 &#xff1a; tf-idf 2、使用这些特征向量训练SVM模型 二、代码 from sklearn.model_selection import train_test_split from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.svm import SVC from sklearn.m…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

(二)原型模式

原型的功能是将一个已经存在的对象作为源目标,其余对象都是通过这个源目标创建。发挥复制的作用就是原型模式的核心思想。 一、源型模式的定义 原型模式是指第二次创建对象可以通过复制已经存在的原型对象来实现,忽略对象创建过程中的其它细节。 📌 核心特点: 避免重复初…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时&#xff0c;你可能需要保留重要的数据&#xff0c;例如通讯录。好在&#xff0c;将通讯录从 iPhone 转移到 Android 手机非常简单&#xff0c;你可以从本文中学习 6 种可靠的方法&#xff0c;确保随时保持连接&#xff0c;不错过任何信息。 第 1…...

高危文件识别的常用算法:原理、应用与企业场景

高危文件识别的常用算法&#xff1a;原理、应用与企业场景 高危文件识别旨在检测可能导致安全威胁的文件&#xff0c;如包含恶意代码、敏感数据或欺诈内容的文档&#xff0c;在企业协同办公环境中&#xff08;如Teams、Google Workspace&#xff09;尤为重要。结合大模型技术&…...

[Java恶补day16] 238.除自身以外数组的乘积

给你一个整数数组 nums&#xff0c;返回 数组 answer &#xff0c;其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法&#xff0c;且在 O(n) 时间复杂度…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

【LeetCode】3309. 连接二进制表示可形成的最大数值(递归|回溯|位运算)

LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 题目描述解题思路Java代码 题目描述 题目链接&#xff1a;LeetCode 3309. 连接二进制表示可形成的最大数值&#xff08;中等&#xff09; 给你一个长度为 3 的整数数组 nums。 现以某种顺序 连接…...