小团队别再硬扛SonarQube了,我做了个5秒跑完PR安全检测的工具(GitHub/GitLab CI一键集成)
作为小团队的后端开发,我猜你一定和我一样,被「代码安全检测」这件事折磨过——
领导说要重视线上安全,让装SonarQube做代码检测,结果折腾了大半天:装Java环境、搭数据库、配Elasticsearch,好不容易部署好,跑一次全量扫描要20多分钟,CI直接卡死;
开发同事嫌慢,提交PR后直接跳过检测,说“反正测试会测”,最后线上还是出了漏洞:空指针导致服务宕机、SQL注入被攻击、第三方依赖升级踩坑,半夜起来救火的滋味,谁懂啊😭
更离谱的是,SonarQube默认几千条规则,一半是代码规范(比如命名不规范、注释太少),真正的高危漏洞被淹没在一堆告警里,误报多到没人看,最后这工具就成了摆设。
忍无可忍之下,我一个人+AI Agent,花了2周时间,做了一个专门给小团队用的PR代码安全检测工具——DiffSense,核心就一个目标:不折腾、跑得快、只查有用的漏洞、CI一键集成。
现在我们团队已经用了1个月,PR提交后5秒出结果,自动拦截高危漏洞,不用部署、不用维护,同事们再也不抱怨,领导也不用天天催安全检测。今天就把这个工具分享给和我一样的小团队开发者,附上GitHub/GitLab CI一键集成教程,5分钟就能用起来。
先上核心优势:小团队用它,比SonarQube爽10倍
我没想着做“全能工具”,只解决小团队最痛的3个问题,每一个都踩中SonarQube的痛点:
1. 只扫PR变更代码,5秒出结果,不卡CI
SonarQube默认全量扫描整个项目,哪怕只改一行代码,也要扫完整项目,动辄5-30分钟,小团队的CI服务器根本扛不住,开发同事也没耐心等。
DiffSense只扫描PR的变更diff,不管项目多大,只要变更文件≤10个,平均5秒就能出结果,提交PR后几乎不感知等待时间,开发同事再也不会跳过检测。
2. 零部署零维护,不用DevOps也能搞定
SonarQube需要Java、数据库、ES,部署复杂不说,还要专人维护、升级、备份,小团队没有专职DevOps,部署一次要折腾大半天,后续还容易出故障。
DiffSense不用部署任何服务,不用装数据库,直接用官方镜像,复制1行CI配置就能跑,哪怕你是纯后端开发,不懂DevOps,5分钟也能集成完成。
3. 只查高危安全漏洞,误报极低,每条告警都有用
SonarQube默认规则太杂,几千条规则里,一半是代码规范、复杂度、重复代码,真正能导致线上事故的高危漏洞(SQL注入、空指针、未关闭资源、依赖漏洞)反而被淹没。
DiffSense只聚焦「能导致线上事故」的高危安全漏洞,规则都是从真实线上事故中提炼的(比如我们团队之前踩过的Fastjson反序列化、Log4j漏洞),误报率≤15%,每条告警都值得看、值得修,不会浪费开发时间。
4. GitHub/GitLab CI双平台适配,一键集成
这也是我最骄傲的一点——不用改现有CI流水线,不用额外配置,复制粘贴几行代码,就能让PR提交时自动触发检测,高危漏洞不修复,无法合并PR,从源头阻断安全风险。
重点来了:GitLab CI一键集成教程(最简单版)
目前DiffSense已经完美适配GitLab CI和GitHub Action,这里先给大家讲GitLab CI的集成步骤,全程3步,复制粘贴就能用,比装插件还简单。
前提准备
-
你的GitLab项目已经开启CI/CD(有Runner可用)
-
拥有GitLab个人访问令牌(具有api权限)
步骤1:配置GitLab访问令牌
-
进入你的GitLab项目,点击顶部「Settings → CI/CD → Variables」
-
点击「Add variable」,添加一个变量:
-
变量名: DIFFSENSE_TOKEN
-
值: 具有「api」权限的Personal Access Token(创建令牌时,勾选api权限即可)
-
建议勾选「Mask variable」(隐藏变量值,避免泄露)
✅ 提示:创建Personal Access Token的路径:GitLab个人中心 → Settings → Access Tokens → 创建令牌,勾选api权限,复制保存,一旦关闭页面就看不到了。
步骤2:添加CI配置(核心步骤)
在你的项目根目录下,找到「.gitlab-ci.yml」文件(没有就新建),添加以下job,直接复制粘贴即可:
diffsense_check:
stage: diffsense
image: ghcr.io/goldensupremesaltedfish/diffsense:1.0.0
entrypoint: [""]
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
script:
- diffsense audit --platform gitlab --token "$DIFFSENSE_TOKEN" --project-id "$CI_PROJECT_ID" --mr-iid "$CI_MR_IID" --gitlab-url "$CI_SERVER_URL"
步骤3:可选(推荐):添加缓存,提高后续运行速度
如果你的项目PR提交频繁,可以添加缓存,减少重复下载依赖的时间,进一步提升速度,修改后的配置如下:
diffsense_check:
stage: diffsense
image: ghcr.io/goldensupremesaltedfish/diffsense:1.0.0
entrypoint: [""]
cache:
key: diffsense-cache
paths:
- .diffsense-cache
variables:
DIFFSENSE_CACHE_DIR: "${CI_PROJECT_DIR}/.diffsense-cache"
rules:
- if: $CI_PIPELINE_SOURCE == 'merge_request_event'
script:
- diffsense audit --platform gitlab --token "$DIFFSENSE_TOKEN" --project-id "$CI_PROJECT_ID" --mr-iid "$CI_MERGE_REQUEST_IID" --gitlab-url "${GITLAB_URL:-$CI_SERVER_URL}"
allow_failure: false
必看关键点(避免踩坑)
-
必须设置 entrypoint: [""] :这是最容易踩坑的地方,否则GitLab Runner会将script里的命令当作diffsense的子命令,导致运行失败;
-
镜像地址不要改:使用官方镜像 ghcr.io/goldensupremesaltedfish/diffsense:1.0.0,确保版本一致,避免兼容问题;
-
触发条件:该job仅在合并请求(merge_request_event)时触发,不会影响普通提交,不浪费CI资源;
-
allow_failure: false:设置为false后,只要检测到高危漏洞,PR就无法合并,从源头阻断风险(根据团队需求可调整为true)。
GitHub Action集成(极简版)
如果你的项目用的是GitHub,集成更简单,在项目根目录创建 .github/workflows/diffsense.yml 文件,复制以下内容即可:
name: DiffSense PR Security Audit
on:
pull_request:
branches: [ main, master ]
jobs:
diffsense_audit:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Run DiffSense Audit
uses: docker://ghcr.io/goldensupremesaltedfish/diffsense:1.0.0
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
diffsense audit --platform github --token "$GITHUB_TOKEN" --repo "${{ github.repository }}" --pr-number "${{ github.event.pull_request.number }}"
✅ 提示:GitHub不需要额外创建令牌,直接使用默认的 GITHUB_TOKEN 即可,权限足够。
实际使用效果:5秒拦截高危漏洞
给大家看一个我们团队的真实使用场景:
有同事提交PR时,不小心写了一段存在SQL注入风险的代码(拼接SQL字符串,未使用参数绑定),DiffSense在5秒内检测到,直接在CI中拦截,同时在PR评论区自动生成漏洞描述和修复建议:
-
风险等级:高危
-
漏洞位置:xxx.java:23
-
漏洞描述:SQL语句拼接,存在SQL注入风险,可能导致恶意攻击
-
修复建议:使用PreparedStatement,通过参数绑定方式执行SQL
直到同事修复漏洞,CI才能通过,PR才能合并,从源头避免了线上SQL注入事故。
另外,DiffSense还会生成清晰的HTML检测报告,包含所有漏洞的详细信息、修复建议,方便团队复盘和归档。
适合谁用?不适合谁用?
我做这个工具的初衷,就是服务和我们一样的小团队,所以明确说清楚适用场景,避免浪费大家时间:
✅ 适合
-
10人以下小团队、创业公司,没有专职DevOps;
-
后端开发(Java/Python),需要快速做PR安全检测;
-
讨厌复杂部署、不想折腾SonarQube,只想要“能用、好用、不添乱”的工具;
-
关注线上安全,怕出漏洞半夜救火,想从源头阻断风险。
❌ 不适合
-
中大型团队,需要全量代码质量管控、多语言支持、复杂合规报告;
-
追求“全能工具”,需要代码规范、复杂度、覆盖率等全维度检测;
-
不使用GitHub/GitLab,或没有CI/CD流程的团队。
最后:工具开源,给小团队的专属福利
DiffSense目前已经开源,核心功能永久免费,支持Java和Python两种主流后端语言,后续会根据大家的反馈,逐步增加更多实用功能。
为了感谢掘金的朋友,我准备了专属福利:
👉 私信我,免费领取7天高级版试用权限(支持自定义规则、漏洞优先级排序);
👉 如果你在集成过程中遇到任何问题,私信我,我远程帮你配置,确保5分钟跑通;
👉 项目GitHub地址:github.com/goldensupre…(求star✨,你的支持是我继续更新的动力)
小团队的开发,本来就够忙了,没必要在“安全检测”这件事上浪费太多时间。DiffSense的目标就是:让小团队也能轻松拥有专业的PR安全检测能力,不用折腾、不用花钱,把时间花在真正有价值的业务开发上。
如果你的团队也在被SonarQube折磨,不妨试试DiffSense,5分钟集成,5秒出结果,真正做到“不添乱、真有用”。
最后,欢迎大家在GitHub提issue、贡献代码,一起把这个工具做得更好,帮助更多小团队解决代码安全检测的痛点~