یکی از خطرناک‌ترین اشتباهاتی که در پروژه‌های نرم‌افزاری رخ می‌دهد، نشت اطلاعات محرمانه Secrets داخل مخازن Git است. این اطلاعات می‌توانند شامل رمز عبور، API Key، توکن‌ها یا حتی connection stringهای دیتابیس باشند. مشکل اصلی اینجاست که حتی اگر این اطلاعات را در commit بعدی حذف کنید، همچنان در تاریخچه Git باقی می‌مانند و قابل بازیابی هستند.

ابزار GitLeaks دقیقاً برای حل این مشکل طراحی شده است. این ابزار به شما کمک می‌کند تا secrets را در کد، تاریخچه Git و حتی ورودی‌های دیگر شناسایی کنید و قبل از اینکه به یک تهدید امنیتی تبدیل شوند، آن‌ها را مدیریت کنید.

بر اساس مستندات رسمی، GitLeaks یک ابزار برای تشخیص secrets مانند password، API key و token در repository، فایل‌ها و حتی stdin است GitHub1.

در این مقاله، تمام قابلیت‌ها، دستورات، تنظیمات و نحوه استفاده از GitLeaks را دقیق و ساختاریافته بررسی می‌کنیم.


1.GitLeaks چیست؟

GitLeaks یک ابزار CLI متن‌باز است که برای پیدا کردن اطلاعات حساس در موارد زیر استفاده می‌شود:

مخازن Git
فایل‌ها و دایرکتوری‌ها
ورودی‌های stream stdin

طبق مستندات رسمی:

GitLeaks می‌تواند secrets را در گذشته و حال کد شناسایی کند

 

نحوه کار GitLeaks طبق مستندات رسمی

GitLeaks با استفاده از:

تحلیل commitها
بررسی تغییرات patch
و استفاده از الگوهای تشخیص rulebased detection

اطلاعات حساس را پیدا می‌کند.

مثلاً:

bash
gitleaks git v

نمونه خروجی واقعی:

Finding: "export BUNDLE...=cafebabe:deadbeef"
Secret: cafebabe:deadbeef
RuleID: sidekiqsecret
File: ...
Line: 23
Commit: ...

این خروجی نشان می‌دهد:

secret دقیقاً چیست
در چه فایل و خطی است
مربوط به کدام commit است GitHub1

مفهوم خطر نشت Secrets در Git👇

مفهوم خطر نشت Secrets در Git

2. دستورات اصلی GitLeaks

GitLeaks چند حالت اصلی اسکن دارد:

2.1 . اسکن مخزن Git

bash
gitleaks git path/to/repo

📌 این حالت از git log p استفاده می‌کند برای بررسی commitها 

 

2.2 . اسکن فایل یا دایرکتوری

bash
gitleaks dir path/to/code

📌 برای زمانی که Git ندارید یا فقط فایل مهم است

 

2.3 . اسکن از طریق stdin

bash
cat file.txt | gitleaks stdin

📌 مناسب pipelineها و پردازش داده

 

نصب GitLeaks روش‌های رسمی

Homebrew
bash
brew install gitleaks

 

Docker

bash
docker run v ${path}:/path zricethezav/gitleaks:latest COMMAND

 

Build از سورس

bash
git clone https://github.com/gitleaks/gitleaks.git
cd gitleaks
make build

📌 تمام این روش‌ها در مستندات رسمی ذکر شده‌اند .

ترمینال GitLeaks با تشخیص secrets👇

ترمینال GitLeaks با تشخیص secrets

3. قابلیت‌های پیشرفته GitLeaks

3.1. Baseline نادیده گرفتن نتایج قبلی

bash
gitleaks git reportpath report.json
gitleaks git baselinepath report.json

📌 فقط secrets جدید گزارش می‌شوند GitHub1

 

3.2. فایل ignore

می‌توانید secrets خاصی را نادیده بگیرید:

text
.gitleaksignore

📌 هر secret یک Fingerprint دارد که قابل ignore است GitHub1

 

3.3. Allow کردن secret خاص

python
password = "123456" gitleaks:allow

📌 برای تست یا موارد خاص

 

3.4 Decode کردن داده‌ها

bash
maxdecodedepth

📌 برای کشف secrets encode شده GitHub1

 

3.5. اسکن آرشیوها

bash
maxarchivedepth

📌 حتی داخل zip و tar هم جستجو می‌کند GitHub1

 

گزارش‌گیری Reporting

GitLeaks از فرمت‌های مختلف پشتیبانی می‌کند:

JSON
CSV
JUnit
SARIF

مثال:

bash
gitleaks dir . reportpath report.json

📌 همچنین می‌توانید template سفارشی بسازید GitHub1

 

مثال عملی واقعی سناریوی واقعی

یک پروژه Node.js داری و اینو commit کردی:

js
const DB_PASSWORD = "supersecretpassword";

اجرای GitLeaks:

bash
gitleaks git .

نتیجه:

پیدا کردن password
نمایش commit
نمایش مسیر فایل

📌 دقیقاً قبل از اینکه به production برسد، جلوی leak گرفته می‌شود

 

استفاده در CI/CD

GitLeaks به‌صورت رسمی به عنوان:

GitHub Action
Precommit hook

قابل استفاده است GitHub1

مثال:

yaml
name: Run GitLeaks
 uses: gitleaks/gitleaksaction@v2

📌 باعث می‌شود:

commitهای خطرناک reject شوند

 

نکات حرفه‌ای بر اساس مستندات

همیشه fetchdepth: 0 بزن برای اسکن کامل

از baseline برای پروژه‌های قدیمی استفاده کن

rules سفارشی بساز

ignore رو بی‌رویه استفاده نکن

اینفوگرافیک روش‌های نصب👇

اینفوگرافیک روش‌های نصب

سوالات متداول & FAQ Schema

GitLeaks چه چیزی را اسکن می‌کند؟

مخازن Git، فایل‌ها و حتی stdin را بررسی می‌کند.

آیا GitLeaks تاریخچه Git را هم بررسی می‌کند؟

بله، با استفاده از git log تمام commitها را اسکن می‌کند.

آیا می‌توان secrets خاصی را نادیده گرفت؟

بله، با `.gitleaksignore` یا `gitleaks:allow`.

آیا GitLeaks از فایل‌های فشرده پشتیبانی می‌کند؟

بله، با تنظیمات archive depth.

آیا خروجی قابل سفارشی‌سازی است؟

بله، با templateهای گزارش.


نتیجه‌گیری & Call To Action

GitLeaks یک ابزار ساده نیست 
یک خط دفاعی حیاتی در برابر یکی از رایج‌ترین آسیب‌پذیری‌های امنیتی است.

اگر فقط یک کار باید امروز انجام بدهی، این است:

bash
gitleaks git .

زمان شروع همین حالا است😉

یک Product بسازید، اولین اسکن را Import کنید و ببینید چگونه GitLeaks امنیت شما را از حالت واکنشی به یک فرآیند proactive، measurable و قابل رقابت تبدیل می‌کند.