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

【Rust项目实战】sensleak,扫描 Git 仓库中的敏感信息

github仓库:https://github.com/open-rust-initiative/sensleak-rs
Rust是一门神奇的编程语言,它提供了内存安全、零成本抽象、并发安全等特性,使开发人员能够编写高性能、高抽象和安全的代码。
这是我用rust开发的第一个工作,希望大家多多指教多多star,多多参与。

介绍

sensleak - 扫描 Git 仓库中的敏感信息
sensleak 是一个基于 Rust 的工具,用于扫描 Git 仓库中的敏感数据,特别是针对嵌入在代码中的密码、API 密钥、证书和私钥等敏感信息。

背景

许多开发人员在代码中存储了诸如密钥和证书等敏感信息,这会带来安全风险。因此,有商业服务如 GitGuardian 用于扫描 GitHub 和 GitLab,以及开源组件如 truffleHog 和 Gitleaks 提供类似功能的支持。

功能

  • 增强安全性。使用 Rust 开发工具,以确保提高安全性和内存安全性。 命令行界面。创建用户友好的命令行工具,生成全面的测试报告。
  • 带访问控制的 REST API。将工具作为服务运行,并通过 REST API 提供访问控制。利用 Swagger 生成 API 文档。
  • 并发扫描。利用线程池控制敏感信息的并发扫描,从而提高整体效率。

技术栈

  • 开发语言:Rust
  • 命令行交互:clap.rs
  • Git 仓库操作:git2
  • Web 框架:axum
  • 自动生成的 OpenAPI
  • 文档:utoipa

用法

命令行界面用法
在命令行界面 (CLI) 中运行工具,进行敏感数据检查。

cargo run --bin scan -- -help
使用说明:scan.exe [选项] --repo <REPO>选项:
--repo <REPO> 目标仓库
--config <CONFIG> 配置文件路径 [默认值:gitleaks.toml]
--threads <THREADS> sensleak 启动的最大线程数 [默认值:10]
--chunk <BATCH_SIZE> 每个批次处理的 git 文件数量 [默认值:10]
--report <REPORT> 写入泄漏信息的 JSON 文件路径
--report-format <REPORT_FORMAT> 报告格式,可选项为 json、csv、sarif [默认值:json]
-v, --verbose 显示扫描过程的详细输出
--pretty 如果存在泄漏信息,则对 JSON 进行格式化打印
--commit <COMMIT> 要扫描的提交的 SHA
--commits <COMMITS> 以逗号分隔的要扫描的提交列表
--commits-file <COMMITS_FILE> 包含要扫描的提交列表的每行一个提交的文件
--commit-since <COMMIT_SINCE> 扫描比特定日期更新的提交。示例格式:'2006-01-02''2023-01-02T15:04:05-0700'
--commit-until <COMMIT_UNTIL> 扫描比特定日期更旧的提交。示例格式:'2006-01-02''2006-10-02T15:04:05-0700'
--commit-from <COMMIT_FROM> 从指定提交开始扫描
--commit-to <COMMIT_TO> 扫描直到指定提交为止
--branch <BRANCH> 要扫描的分支
--uncommitted 对未提交的代码运行 sensleak
--user <USER> 设置要扫描的用户 [默认值: ]
--repo-config 从目标仓库加载配置。配置文件必须是 ".gitleaks.toml""gitleaks.toml"
--debug 记录调试消息
--disk <DISK> 克隆仓库到磁盘
-h, --help 打印帮助信息(使用 '--help' 获取更多信息)
-V, --version 打印版本信息运行 'cargo run --bin api' 获取 REST API。
仓库:https://github.com/open-rust-initiative/sensleak-rs
$ cargo run --bin scan -- --repo="D:/Workplace/Java/project/ExpiryReminderAssistant" -v --pretty
[INFO][2023-06-05 09:59:59] Clone repo ...
[Leak {line: "        String secret = \"1708b0314f18f420d3fe8128652af43c\"; //自己小程序的SECRET",line_number: 67,offender: "secret = \"1708b0314f18f420d3fe8128652af43c\"",commit: "410eb5a84408d3e63edb4d0975e5516e56f6ea6a",repo: "ExpiryReminderAssistant",rule: "Generic API Key",commit_message: "submit code\n",author: "sonichen",email: "1606673007@qq.com",file: "/backend/src/main/java/com/cyj/controller/login/WXLoginController.java",date: "2023-05-31 18:09:42 -08:00",},....Leak {line: "  secret: \"c6e1180dda3eaca49f3d7ed912718e4d\"   #小程序密钥",line_number: 36,offender: "secret: \"c6e1180dda3eaca49f3d7ed912718e4d\"",commit: "410eb5a84408d3e63edb4d0975e5516e56f6ea6a",repo: "ExpiryReminderAssistant",rule: "Generic API Key",commit_message: "submit code\n",author: "sonichen",email: "1606673007@qq.com",file: "/backend/target/classes/application.yaml",date: "2023-05-31 18:09:42 -08:00",},
]
[WARN][2023-06-05 10:00:02]7 leaks detected. 1 commits scanned in 1.2538834s

API 用法
运行以下命令启动 REST API:

cargo run --bin api

API 文档位于 http://localhost:7000/swagger-ui/#

实现细节

整体的功能设计是模仿gitleaks(https://github.com/gitleaks/gitleaks)。
本项目主要是应用gitleaks的正则表达式规则(https://github.com/gitleaks/gitleaks/blob/master/config/gitleaks.toml),对文本内容进行扫描。

首先,通过git2 library获取到git仓库的文件内容,过了白名单文件allowlist后,再应用gitleaks的正则表达式规则对文本进行扫描,如果文本中含有rule.keyword关键词,就启动一个线程对文本进行正则表达式匹配。最后的结果支持在控制台直接输出或者以多种格式保存到本地。

其中,应用了线程池的知识来提高开发效率:

  1. 优化扫描单个文件的逻辑,当遇到一个keyword的时候,就启动一个线程用这个rule的正则表达式规则对内容进行扫描。遇到多个keyword则启动多个线程处理,具体线程数量由用户输入决定。
  2. 同时对多个文件内容进行扫描,具体线程数量由用户输入决定。

关于API和API文档

  1. Axum提供API
  2. 用utoipa集成swagger提供API文档

总结

Sensleak 是一个强大的基于 Rust 的工具,用于扫描 Git 仓库中的敏感数据。
它提供了增强的安全性、用户友好的界面和 REST API 功能。
利用并发扫描和批处理处理,优化了扫描过程。
Sensleak 使用了 Rust、clap.rs、git2、axum 和 utoipa 技术。

希望大家多多支持,多多star,参与进来一直开发。
源代码:https://github.com/open-rust-initiative/sensleak-rs

相关文章:

【Rust项目实战】sensleak,扫描 Git 仓库中的敏感信息

github仓库&#xff1a;https://github.com/open-rust-initiative/sensleak-rs Rust是一门神奇的编程语言&#xff0c;它提供了内存安全、零成本抽象、并发安全等特性&#xff0c;使开发人员能够编写高性能、高抽象和安全的代码。 这是我用rust开发的第一个工作&#xff0c;希望…...

搭建一个定制版New Bing吧

项目介绍 项目地址&#xff1a;https://github.com/adams549659584/go-proxy-bingai 引用项目简介&#xff1a;用 Vue3 和 Go 搭建的微软 New Bing 演示站点&#xff0c;拥有一致的 UI 体验&#xff0c;支持 ChatGPT 提示词&#xff0c;国内可用&#xff0c;国内可用&#xff…...

使用AIGC工具提升论文阅读效率

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…...

本周大新闻|Vision Pro头显重磅发布;苹果收购AR厂商Mira

本周XR大新闻&#xff0c;上周Quest 3发布之后&#xff0c;本周苹果MR头显Vision Pro正式发布&#xff0c;也是本周AR/VR新闻的重头戏。 ​AR方面&#xff0c;苹果发布VST头显Vision Pro&#xff08;虽然本质是台VR&#xff0c;但以AR场景为核心&#xff09;以及visionOS&…...

在Spring Boot微服务使用JedisCluster操作Redis集群String字符串

记录&#xff1a;449 场景&#xff1a;在Spring Boot微服务使用JedisCluster操作Redis集群的String字符串数据类型。 版本&#xff1a;JDK 1.8,Spring Boot 2.6.3,redis-6.2.5,jedis-3.7.1。 1.微服务中配置Redis信息 1.1在pom.xml添加依赖 pom.xml文件&#xff1a; <…...

5.1 合并数据

5.1 合并数据 5.1.1 堆叠合并数据1、横向堆叠 concat()2、纵向堆叠 concat()和append() 5.1.2 主键合并数据 merge()和join()5.1.3 重叠合并数据 combine_first() 5.1.1 堆叠合并数据 堆叠就是简单地把两个表拼在一起&#xff0c;也被称作轴向连接、绑定或连接。依照连接轴的方…...

华为OD机试真题 JavaScript 实现【求解立方根】【牛客练习题】

一、题目描述 计算一个浮点数的立方根&#xff0c;不使用库函数。保留一位小数。 数据范围&#xff1a;∣val∣≤20 。 二、输入描述 待求解参数&#xff0c;为double类型&#xff08;一个实数&#xff09; 三、输出描述 输出参数的立方根。保留一位小数。 四、解题思路…...

初探BERTPre-trainSelf-supervise

初探Bert 因为一次偶然的原因&#xff0c;自己有再次对Bert有了一个更深层地了解&#xff0c;特别是对预训练这个概念&#xff0c;首先说明&#xff0c;自己是看了李宏毅老师的讲解&#xff0c;这里只是尝试进行简单的总结复述并加一些自己的看法。 说Bert之前不得不说现在的…...

Ficus 第二弹,突破限制器的 Markdown 编辑管理软件!

大家好&#xff0c;我们是 ggG 团队&#xff0c;我们开发的 markdown 笔记管理软件 Ficus Beta 版本正式发布了。详情可以见我们官网&#xff0c;也可以来我们仓库查看。 相对于 Alpha 版本&#xff08;可以在我们之前的博客中查看&#xff09;&#xff0c;主要有 3 点明显的提…...

基于Springboot+vue+协同过滤+前后端分离+鲜花商城推荐系统(用户,多商户,管理员)+全套视频教程

基于Springbootvue协同过滤前后端分离鲜花商城推荐系统(用户,多商户,管理员)(毕业论文11000字以上,共33页,程序代码,MySQL数据库) 代码下载: 链接&#xff1a;https://pan.baidu.com/s/1mf2rsB_g1DutFEXH0bPCdA 提取码&#xff1a;8888 【运行环境】Idea JDK1.8 Maven MySQL…...

MixQuery系列(一):多数据源混合查询引擎调研

背景 存储情况 当前的存储引擎可谓百花齐放,层出不穷。为什么会这样了?因为不存在One for all的存储,不同的存储总有不同的存储的优劣和适用场景。因此,在实际的业务场景中,不同特点的数据会存储到不同的存储引擎里。 业务挑战 然而异构的存储和数据源,却给分析查询带…...

d2l学习——第一章Introduction

x.0 环境配置 使用d2l库&#xff0c;安装如下&#xff1a; conda create --name d2l python3.9 -y conda activate d2lpip install torch1.12.0 torchvision0.13.0 pip install d2l1.0.0b0mkdir d2l-en && cd d2l-en curl https://d2l.ai/d2l-en.zip -o d2l-en.zip u…...

【python】【Word】用正则表达式匹配正文中的标题(未使用样式)并通过win32com指定相应样式

标题的格式 二级标题&#xff1a; 数字.数字. 文字 三级标题&#xff1a;数字.数字.数字 文字 python代码 使用方法 只保留一个需要应用的WORD文档运行程序&#xff0c;逐行匹配 使用效果 代码 import win32com.client import redef compile_change_Word_titlestyle():#…...

Matlab实现光伏仿真(附上完整仿真源码)

光伏发电电池模型是描述光伏电池在不同条件下产生电能的数学模型。该模型可以用于预测光伏电池的输出功率&#xff0c;并为优化光伏电池系统设计和控制提供基础。本文将介绍如何使用Matlab实现光伏发电电池模型。 文章目录 1、光伏发电电池模型2、使用Matlab实现光伏发电电池模…...

JVM零基础到高级实战之Java内存区域方法区

JVM零基础到高级实战之Java内存区域方法区 JVM零基础到高级实战之Java内存区域方法区 文章目录 JVM零基础到高级实战之Java内存区域方法区前言JVM内存模型之JAVA方法区总结 前言 JVM零基础到高级实战之Java内存区域方法区 JVM内存模型之JAVA方法区 JAVA方法区是什么&#xf…...

SpringCloud-stream一体化MQ解决方案-消费者组

参考资料: 参考demo 参考视频1 参考视频2 官方文档(推荐) 官方文档中文版 关于Kafka和rabbitMQ的安装教程,见本人之前的博客 rocketMq的安装教程 rocketMq仪表盘安装教程 重!!!...

HNU计算机图形学-作业二

HNU计算机图形学-作业二 作业二&#xff1a;纹理和照明前言介绍实施详细信息任务1&#xff1a;加载复杂对象任务2&#xff1a;纹理映射和照明任务3&#xff1a;互动活动和动画额外任务&#xff1a;增强场景的视觉效果&#xff08;最高20%&#xff09; 最终实现效果 作业二&…...

湖南大学OS-2020期末考试解析

【特别注意】 答案来源于@wolf以及网络 是我在备考时自己做的,仅供参考,若有不同的地方欢迎讨论。 【试卷评析】 这张卷子有点老了,部分题目可能有用。如果仔细研究应该会有所收获。 【试卷与答案】 一、选择题(15%) 1.下列关于进程状态转换,不正确的是:C A. …...

【用户认证】密码加密,用户状态保存,cookie,session,token

相关概念 认证与授权 认证&#xff08;authentication &#xff09;是验证你的身份的过程&#xff0c;而授权&#xff08;authorization&#xff09;是验证你有权访问的过程 用户认证的逻辑 获取用户提交的用户名和密码根据用户名&#xff0c;查询数据库&#xff0c;获得完…...

LVS+Keepalivedd

Keepalived 一、Keepalived及其工作原理二、实验非抢占模式的设置 三、脑裂现象四、Nginx高可用模式 一、Keepalived及其工作原理 keepalived是一个基于VRRP协议来实现的LVS服务高可用方案&#xff0c;可用解决静态路由出现的单点故障问题。 在一个LVS服务集群中通常有主服务器…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

Linux云原生安全:零信任架构与机密计算

Linux云原生安全&#xff1a;零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言&#xff1a;云原生安全的范式革命 随着云原生技术的普及&#xff0c;安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测&#xff0c;到2025年&#xff0c;零信任架构将成为超…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

BLEU评分:机器翻译质量评估的黄金标准

BLEU评分&#xff1a;机器翻译质量评估的黄金标准 1. 引言 在自然语言处理(NLP)领域&#xff0c;衡量一个机器翻译模型的性能至关重要。BLEU (Bilingual Evaluation Understudy) 作为一种自动化评估指标&#xff0c;自2002年由IBM的Kishore Papineni等人提出以来&#xff0c;…...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...