网站开发背景及意义/百度站长社区
前言
在应用程序开发过程中,一个很常见的问题就是:开发人员为了本地 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
很奇怪的是看到了 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 的密钥检测吧
前言 在应用程序开发过程中,一个很常见的问题就是:开发人员为了本地 debug 方便,会 hardcode 一些信息,比如连接数据库的用户名、密码、连接第三方 app 的 token、certificate 等,如果在提交代码的时候没有及时删除 ha…...

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

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

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

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

CommonJs模块化实现原理ES Module模块化原理
CommonJs模块化实现原理 首先看一个案例 初始化项目 npm init npm i webpack -D目录结构如下: 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.配置静态路由,实现全网互通。 六、任务验收七、任务小结 一、任务描述 某公司刚…...

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

ShenYu网关注册中心之HTTP注册原理
文章目录 1、客户端注册流程1.1、读取配置1.1.1、用于注册的 HttpClientRegisterRepository1.1.2、用于扫描构建 元数据 和 URI 的 SpringMvcClientEventListener 1.2、扫描注解,注册元数据和URI1.2.1、构建URI并写入Disruptor1.2.2、构建元数据并写入Disruptor1.2.…...

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

Windows下使用CMake编译lua
Lua 是一个功能强大、高效、轻量级、可嵌入的脚本语言。它支持程序编程、面向对象程序设计、函数式编程、数据驱动编程和数据描述。 Lua的官方网站上只提供了源码,需要使用Make进行编译,具体的编译方法为 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过高的问题排查 示例代码: public class Test { static class MyThread extends Thread { public void run() { // 死循环,消耗CPU int i 0; while (true) { i; } } } public static void main(String args[]) throws InterruptedException { ne…...

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

监控pod 容器外网请求网络带宽,过滤掉内网、基于k8spacket开发、prometheus开发export
首先安装k8spacket 安装k8spacket遇到问题,下载插件一直能不能下载成功,pod不能启动。所有手动下载处理。 helm repo add k8spacket https://k8spacket.github.io/k8spacket-helm-chart helm pull k8spacket/k8spacket打开values.yaml 文件 手动下载插…...

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

Python小程序 - 表格数值统计
题设:Excel表格中,计算如下图所示不同颜色(蓝、黄、桔)单元格值:各颜色填涂的单元格值的总和条件: - Excle表格中 - 分色标记,单元格有值 - 开始列(当前为D),…...

Unity | Shader基础知识(第一集:unity中最简单的shader)
目录 一、unity的shader 二、创建一个shader(在创建时,选前三种都可以) 三、内容解读 1.shader一直都在 2.我们写shader在写什么 四、没有被干预的shader(最简单的shader) 相关阅读 编写着色器概述 - Unity 手册…...

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

利用svm进行模型训练
一、步骤 1、将文本数据转换为特征向量 : 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…...

【Docker】WSL 2 上的 Docker 搭建和入门
▒ 目录 ▒ 🛫 导读开发环境 1️⃣ 安装安装Docker Desktop for Windows 2️⃣ 环境配置3️⃣ hello world第一次运行再次运行分析总结 📖 参考资料 🛫 导读 开发环境 版本号描述文章日期2023-12-14操作系统Win11 - 22H222621.2715WSL2 C:…...

pytorch环境配置
1.创建环境 conda create --name pytorch python3.11.5 2.激活环境 source activate pytorch 3.添加国内镜像源: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://mirrors.tuna.tsin…...

电子眼+无人机构建平安城市视频防控监控方案
电子眼(也称为监控摄像机)可以通过安装在城市的不同角落,实时监控城市的各个地方。它们可以用于监测交通违法行为、监控公共场所的安全以及实时监测特定区域的活动情况。通过电子眼的应用,可以帮助警方及时发现并响应各类安全事件…...

mysql binlog_ignore_db参数的效果详解
我们知道 binlog 会记录数据库所有执行的 DDL 和 DML 语句(除了数据查询语句select、show等)。 我们可以在mysql配置文件中关闭binlog [mysqld] skip-log-bin注意默认情况下会记录所有库的操作,那么如果我们有另类需求,比如说只让某个库记录 binglog 或排除某个库记录…...

HI3559AV100和FPGA 7K690T的PCIE接口调试记录-续
上文https://blog.csdn.net/fzktongyong/article/details/134963814?spm1001.2014.3001.5501 上一篇文中PCIE实测速度和理论计算有较大偏差,经过尝试后有所提升。 1、提升效果 1)、RC写操作,实测速度817MB/s(410407&…...

vivado约束方法4
时序约束向导 定时约束向导确定合成或上缺少的定时约束实现的设计。它分析了网表、时钟网络连接和现有的定时限制,以便根据《超快设计方法指南》提供建议用于FPGA和SoC(UG949)。以下11涵盖了三类约束页面,然后是摘要。包括以下步…...

LeetBook学习-C语言-数组
1.数组的操作 1.1 读取元素 知道内存地址可以快速访问,时间复杂度为O(1) 1.2 查找元素 从首地址开始,逐个查找,最坏时间复杂度为O(N) 1.3 插入元素 插入元素,首先位置要腾空,而后执行插入操作。 1.4 删除元素 删除掉某…...

23种策略模式之策略模式
23种策略模式之策略模式 文章目录 23种策略模式之策略模式前言优缺点使用场景角色定义UML模拟示例小结 前言 在软件开发中,设计模式是为了解决常见问题而提供的一套可重用的解决方案。策略模式(Strategy Pattern)是其中一种常见的设计模式&a…...

【笔试强化】Day 2
文章目录 一、选择1.2.(写错)3.4.5.6.(不会)7.(不清晰)8. (不会)9.10.(写错) 二、编程1. 排序子序列解法:代码: 2. 倒置字符串解法&am…...

windows禁用系统更新
1.在winr运行框中输入services.msc,打开windows服务窗口。 services.msc 2.在服务窗口中,我们找到Windows update选项,如下图所示: 3.双击windows update服务,我们把启动类型改为禁用,如下图所示ÿ…...