开发安全利器:detect-secrets 敏感信息扫描工具实战指南

在现代软件开发流程中,代码安全已成为不可忽视的重要环节。尤其是在 DevSecOps 的理念逐渐普及的今天,如何在开发早期就发现并消除潜在的安全隐患,成为每一个开发者和安全工程师必须面对的问题。其中,敏感信息泄露(Secrets Leakage)是最常见也最危险的安全问题之一。

本文将介绍一款由 Yelp 开源的敏感信息扫描工具 —— detect-secrets,它如何帮助我们在代码提交前发现潜在的密钥、密码、令牌等敏感信息,并结合实际使用场景,分享其在自动化流水线和本地开发中的应用方式。


一、为什么需要敏感信息扫描?

在日常开发中,开发者可能会不小心将 API 密钥、数据库密码、OAuth token 等敏感信息硬编码进代码中,并提交到 Git 仓库。这些信息一旦泄露,可能导致严重的安全事故。

根据 OWASP 的 DSOMM(DevSecOps Maturity Model)要求,部分产品需达到 Level 1 或 Level 2 的安全成熟度,其中就包括对敏感信息的自动化检测与防护。detect-secrets 正是为此而生。


二、detect-secrets 工具简介

detect-secrets 是一个基于 Python 的命令行工具,支持插件化扩展,能够扫描 Git 仓库或任意目录中的文件,识别潜在的敏感信息。它的核心优势包括:

  • 持续维护:每年发布多个新版本,最新版本为 v1.5.0(2024年5月发布)
  • 开源协议:采用 Apache-2.0 许可
  • 广泛适配:支持 Git 仓库和非 Git 目录
  • 性能优化:通过 diff 和正则匹配识别新增 secrets,避免全量扫描

此外,它还支持与 pre-commit 框架集成,实现开发者本地提交前的自动扫描。


三、与其他工具对比

detect-secrets 与 Coverity、MS CredScan、GitLeaks、VDOO 等工具并列。相比之下,detect-secrets 具有以下优势:

工具名称特点
CoverityC/C++ 需启用 HARDCODED_CREDENTIALS 检查器
MS CredScan已于 2023 年 9 月弃用,推荐使用 GitHub Advanced Security
GitLeaks使用 Go 编写,以 Docker 镜像形式发布
VDOO仅提供第三方二进制,无源码
detect-secrets免费、开源、支持插件、性能优异

四、detect-secrets 使用指南

1. 准备工作

detect-secrets source code:  https://github.com/Yelp/detect-secrets

  1. 安装工具:

    pip install detect-secrets
    
  2. 创建 baseline 文件(扫描结果):

    detect-secrets scan > .secrets.baseline
    
  3. 扫描非 Git 文件夹:

    detect-secrets -C /path/to/directory scan > /path/to/directory/.secrets.baseline
    

注意:.secrets.baseline 文件需为 ANSI 格式,否则后续命令可能报错。


2. 集成 Pre-commit 钩子

detect-secrets 支持两种方式集成到开发流程中:

  • 开发者本地钩子:在提交前自动扫描
  • Jenkins 自动化钩子:结合 CI/CD 流程进行扫描

配置步骤如下:

  1. 安装 pre-commit:

    pip install pre-commit
    
  2. 在项目根目录创建 .pre-commit-config.yaml 文件,添加 detect-secrets 配置

  3. 安装钩子:

    pre-commit install
    
  4. 执行扫描:

    pre-commit run --all-files
    

3. 审计与报告

detect-secrets 提供审计功能,用于分析 baseline 文件中的内容:

  • 查看审计结果:

    detect-secrets audit .secrets.baseline
    
  • 生成报告:

    detect-secrets audit --report .secrets.baseline > SecretReport.txt
    
  • 仅输出真实 secrets:

    detect-secrets audit --report --only-real .secrets.baseline > SecretReport.txt
    
  • 查看统计信息:

    detect-secrets audit --stats .secrets.baseline > status.txt
    

五、插件与过滤器机制

detect-secrets 的强大之处在于其插件和过滤器系统:

  • 插件:用于识别不同类型的 secrets(如 AWS 密钥、Slack token 等)
  • 过滤器:用于排除误报,提高准确率

你可以通过以下命令查看和管理插件:

detect-secrets scan --list-all-plugins
detect-secrets scan --disable-plugin AWSKeyDetector

此外,还支持自定义插件和过滤器,满足特定业务需求。详细文档可参考:

  • 插件开发指南
  • 过滤器开发指南

六、总结与建议

detect-secrets 是一款轻量级、高性能、可扩展的敏感信息扫描工具,适合集成到 DevSecOps 流程中,帮助开发团队在代码提交前发现并消除潜在的安全隐患。

建议开发团队在以下场景中使用 detect-secrets:

  • 本地开发阶段,结合 pre-commit 实现自动扫描
  • 自动化流水线中,结合 Jenkins 或 GitHub Actions 实现持续检测
  • 安全审计阶段,生成 secrets 报告并进行合规检查

安全无小事,从每一次提交做起。detect-secrets,让你的代码更安全。

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

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

相关文章

数字经济专业核心课程解析与职业发展指南

在数字经济高速发展的时代,选择一门与未来趋势紧密关联的专业至关重要。数字经济专业作为新兴交叉学科,既涵盖传统经济理论,又融合了大数据、人工智能等前沿技术。想要在这一领域脱颖而出,考取权威证书是提升竞争力的有效途径。其…

使用yolo11训练航拍图片微小目标AI-TOD检测数据集无损压缩版YOLO格式14018张8类别已划分好训练验证集步骤和流程

【数据集介绍】我们基于公开的大规模航空图像数据集构建了AI-TOD,这些数据集包括:DOTA-v1.5的训练验证集[1]、xView的训练集[19]、VisDrone2018-Det的训练验证集[20]、Airbus Ship的训练验证集1以及DIOR的训练验证测试集[3]。这些数据集的详细信息如下&a…

sward V2.0.6版本发布,支持OnlyOffice集成、文档权限控制及归档等功能

1、版本更新日志新增新增目录文档权限控制新增新增知识库、文档归档功能集成OnlyOffice支持word文档预览、编辑新增MarkDown代码块根据语言展示不同样式优化优化富文本在小屏幕操作调整优化部分界面展示效果优化知识库图片展示效果2、目录与文档权限控制默认情况下,…

多因子AI回归揭示通胀-就业背离,黄金价格稳态区间的时序建模

摘要:本文通过构建包含通胀韧性、就业疲软、货币政策预期及跨市场联动的多因子量化模型,结合美国8月CPI超预期上行与初请失业金人数激增的动态数据,分析黄金价格的高位持稳机制,揭示就业市场对美联储降息预期的协同支撑效应。一、…

Java--多线程基础知识(2)

一.多线程的中断1.通过自定义的变量来作为标志位import java.util.Scanner;public class Demo1 {public static boolean flg false;public static void main(String[] args) throws InterruptedException {Thread t1 new Thread(()->{while (!flg){System.out.println(&qu…

Qit_计网笔记

第1章 概述1.1 计算机网络在信息时代中的作用一、计算机网络基础概念(一)计算机网络的定义定义:计算机网络在信息时代中起到核心作用,实现了万物联网和人人用网的目标。(二)计算机网络的特点信息时代特征&a…

【C++11】initializer_list列表初始化、右值引用和移动语义、可变参数模版等

目录 前言 一、简介一下C11 二、{}列表初始化 三、右值引用和移动语义 四、右值引用和移动语义的使用场景 五、右值引用和移动语义在传参中的提效 六、引用折叠和完美转发 七、可变参数模板 前言 本文主要介绍C11中新增的一些重要语法:包括initializer_list列表初…

MP3 ID3标签中的数字流派代码和文本值翻译成的中文列表

将MP3 ID3标签中的数字流派代码和文本值翻译成的中文列表:■ 数字代码流派:0 布鲁斯 (Blues)1 古典摇滚 (Classic Rock)2 乡村音乐 (Country)3 舞曲 (Dance)4 迪斯科 (Disco)5 放克 (Funk)6 垃圾摇滚 (Grunge)7 嘻哈 (Hip-Hop)8 爵士乐 (Jazz)9 金属乐 (M…

U8g2库为XFP1116-07AY(128x64 OLED)实现菜单功能[ep:esp8266]

使用U8g2库为XFP1116-07AY(128x64 OLED)实现菜单功能,核心是通过按键控制菜单切换、光标移动和选项选中,结合U8g2的绘图/文本函数实现交互逻辑支持多级菜单(主菜单→子菜单→功能执行),并兼容ES…

easy-dataset 框架综合技术分析:面向领域特定 LLM 指令数据的合成

摘要 本报告对 easy-dataset 框架 进行全面技术剖析,该框架旨在解决大型语言模型(LLM)在特定领域应用中的核心瓶颈——高质量指令微调数据的稀缺性。随着 LLM 技术发展,其应用能力不再仅依赖模型参数规模,而是更依赖通…

【开题答辩全过程】以 4s店汽车销售系统为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人,语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

测试中的Bug

文章目录软件测试的生命周期软件测试的各个阶段线上环境测试中的BUG描述测试BUGBUG的级别为啥要定义BUG的级别?BUG有哪些级别呢?BUG的生命周期测试与开发发生争执怎么办?测试与开发会发生啥争执?为啥会发生这样的争执?…

aws共享一个镜像并有画图功能

这样可以方便的把系统安装好,不会重复劳动了。 这个是frequi 单独安装 wget https://github.com/freqtrade/frequi/releases/download/2.0.7/freqUI.zip freqtrade install-ui pip install -U -r requirements-plot.txt 在AWS上把已经安装好的环境共享给其他用户。…

C语言---goto语句

文章目录基本语法代码示例goto 的常见用途(尽管不推荐)为什么 goto 声名狼藉?(goto的缺点)如何避免使用 goto?(替代方案)goto 语句是一种无条件跳转语句,它用于将程序的控…

Flask框架的简单了解

🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录1. 前言2. 简介3. 核心特点4. 代码实例5. 主要…

——贪心算法——

目录 1 柠檬水找零 2 将数组和减半的最少操作次数 3 最大数 4 摆动序列 5 最长递增子序列 6 递增的三元子序列 7 最长连续递增序列 8 买卖股票的最佳时机 9 买卖股票的最佳时机 II 10 K 次取反后最大化的数组和 11 按身高排序 12 优势洗牌 13 最长回文串 14 增减…

网络操作系统与分布式操作系统的区别

网络操作系统与分布式操作系统的区别架构设计网络操作系统(NOS)基于客户端-服务器模型,通过共享资源(如文件、打印机)提供服务,各节点保留独立的管理和数据处理能力。分布式操作系统(DOS&#x…

RabbitMQ—运维篇

RabbitMQ安装 RabbitMQ需要依赖erlang,如果普通安装需要安装erlang并保证二者兼容,因此选择较为简单的docker安装方式 1.获取rabbitmq镜像 docker pull rabbitmq:3.11.19-management #rabbitmq-management表示带有客户端(控制台) …

【学习K230-例程21】GT6700-UDP-Client

B站视频 UDP 简介 UDP 是 User Datagram Protocol 的简称,中文名是用户数据报协议,是 OSI(Open SystemInterconnection,开放式系统互联)参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送…

LazyLLM教程 | 第9讲:微调实践:让大模型和向量模型更懂你的领域

前面教程中,我们通过优化检索策略、召回重排略以及基于大模型的查询重写策略来提升了RAG系统的检索精度,但最终回复的结果还需要经过大模型的融合和处理,模型能力的强弱直接影响到最终的结果。这就好比一道好的菜不仅需要有高质量的食材&…