当前位置: 首页 > 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服务集群中通常有主服务器…...

WPF开发txt阅读器7:自定义文字和背景颜色

文章目录 添加控件具体实现代码说明 txt阅读器系列&#xff1a; 需求分析和文件读写目录提取类&#x1f48e;列表控件与目录字体控件绑定书籍管理系统&#x1f48e;用树形图管理书籍 添加控件 除了字体、字体大小之外&#xff0c;文字和背景颜色也会影响阅读观感&#xff0c…...

Elasticsearch文件存储

分析Elasticsearch Index文件是如何存储的&#xff1f; 主要是想看一下FST文件是以什么粒度创建的&#xff1f; 首先通过kibana找一个索引的shard&#xff0c;此处咱们就以logstash-2023.05.30索引为例 查看下shard分布情况 GET /_cat/shards/logstash-2023.05.30?vindex …...

chatgpt赋能python:如何安装pyecharts

如何安装pyecharts Pyecharts是一个基于echarts的数据可视化工具&#xff0c;它是Python语言的一个库&#xff0c;可以通过Python编程语言进行数据可视化&#xff0c;并且能通过交互式的方式展示出来。 在本文中&#xff0c;我们将介绍如何安装pyecharts&#xff0c;如果您是…...

cmake 添加一个库

目录 项目格式 cmake基本语法 设置编译器 添加库 链接库 添加库的头文件 cmake打印字符串 库的cmake文件 cmake生辰库 mian函数中使用 让库成为可选的 cmake基本语法 设置option变量 cmake设置条件链接库 链接库 添加头文件 修改cmake配置文件 修改引用的源码…...

代码随想录二刷 226 翻转二叉树 102 二叉树的层序遍历 101 对称二叉树

226 翻转二叉树 代码如下 func invertTree(root *TreeNode) *TreeNode { if root nil { 采用前序遍历&#xff0c;如果当前节点为空&#xff0c;就返回空 return nil } root.Left,root.Right root.Right, root.Left 交换该节点的…...

【深入浅出C#】章节 3: 控制流和循环:条件语句

条件语句是编程中一种常用的控制结构&#xff0c;用于根据给定的条件来执行不同的代码块。它基于条件的真假来决定程序的执行路径&#xff0c;使程序能够根据不同的情况采取不同的行动。条件语句的作用在于根据特定的条件来控制程序的行为&#xff0c;使程序能够根据不同的情况…...

Java框架学习--Spring

1.Spring概念【托管很多对象的框架】 一个包含了众多工具方法的IoC容器。 1.1 什么是容器? 容器是用来容纳各种物品的&#xff08;基本&#xff09;装置。--来自百度百科 之前常见的容器有&#xff1a; List/Map-》数据存储容器 Tomcat-》Web容器 1.2什么是IoC? IoCInve…...

【爬虫】Xpath和CSS信息提取的方法异同点

类似点&#xff1a; Xpath与css都有web页面定位元素的功能Xpath与css结构类似 区别&#xff1a; 1. Xpath比较强大&#xff0c;而css选择器在性能上更优&#xff0c;运行速度更快&#xff0c;语法更简洁 CSS再chrome&#xff0c;火狐查找速度快&#xff0c;效率高&#xff0…...

数字IC前端学习笔记:FIFO的Verilog实现(二)

相关文章 数字IC前端学习笔记&#xff1a;LSFR&#xff08;线性反馈移位寄存器&#xff09; 数字IC前端学习笔记&#xff1a;跨时钟域信号同步 数字IC前端学习笔记&#xff1a;信号同步和边沿检测 数字IC前端学习笔记&#xff1a;锁存器Latch的综合 数字IC前端学习笔记&am…...

2.2 搭建Spark开发环境

一、Spark开发环境准备工作 由于Spark仅仅是一种计算框架&#xff0c;不负责数据的存储和管理&#xff0c;因此&#xff0c;通常都会将Spark和Hadoop进行统一部署&#xff0c;由Hadoop中的HDFS、HBase等组件负责数据的存储管理&#xff0c;Spark负责数据计算。 安装Spark集群前…...

产品网站推广/别做网络推广员

前言&#xff1a;对用户的需求挖掘&#xff0c;其实算是技巧运用心理博弈。以下是对需求挖掘的小小总结&#xff0c;以后再慢慢补充。 一、需求挖掘&#xff1a; 1、概念&#xff1a;从用户需求出发&#xff0c;挖掘用户内心真正的目标&#xff0c;并转换为产品需求的过程。 …...

微信推广网站建设/游戏推广公司靠谱吗

在信息技术高速发展的时代里&#xff0c;计算机证尤为重要&#xff0c;那么计算机一级考什么呢。以下是由出国留学网编辑为大家整理的“计算机一级考什么内容有哪些”&#xff0c;仅供参考&#xff0c;欢迎大家阅读。计算机一级考什么内容 有哪些1. 采用无纸化考试,上机操作。考…...

单位网站建设收费标准/网页设计与制作教程

要回答你的这个问题,I have a UIBezierPath inside my custom UIView draw(_ rect: CGRect)function. I would like to fill the path with a gradient color.让我们说你有一个椭圆形的路径,let path UIBezierPath(ovalIn: CGRect(x: 0, y: 0, width: 100, height: 100))要创建…...

网站集约化/建设企业营销型网站

一扫天下——ZXing使用全解析 二维码如今已经烂App了&#xff0c;无论什么App。没有二维码就好像低人一等了。所以&#xff0c;在自己的项目中集成二维码功能还是非常有必要的。 网上非常多都是基于ZXing2.3的。可是如今都3.1了&#xff0c;改了非常多bug&#xff0c;也进行了非…...

o2o电子商务网站建设/南宁百度seo

360/3D Spin & Zoom JavaScript Player 功能非常强大的一款插件&#xff0c;支持缩放&#xff0c;360度旋转&#xff0c;全屏浏览等等&#xff0c;特别适合用于产品图片展示。 在线演示 源码下载 360 Degrees Product View 兼容性非常好的一款360度产品展示插件&#…...

亦庄开发区建设局网站/seo网站优化专员

首先要确保自己的jdk、mysql、idea、maven安装完毕 1.搭建一个提供测试的数据库 CREATE DATABASE mybatis;USE mybatis;DROP TABLE IF EXISTS user;CREATE TABLE user ( id int(20) NOT NULL, name varchar(30) DEFAULT NULL, pwd varchar(30) DEFAULT NULL, PRIMARY KEY (id…...