FutureForgeFutureForge

خدمات FutureForge

  • طراحی و ساخت محصولاز شناخت نیاز تا انتشار محصول، یک مسیر روشن پیش رو دارید.
  • توسعه فول‌استکوب‌اپلیکیشن، API و داده را هماهنگ و یکپارچه توسعه دهید.
  • ممیزی مهندسیپیش از هزینه‌ی بیشتر، از وضعیت واقعی محصول‌تان باخبر شوید.
  • مشاوره معماریپیش از یک تصمیم فنی پرهزینه، گزینه‌ها را درست بسنجید.
  • زیرساخت و استقرارمحصول را با خیال راحت منتشر کنید و پایدار نگه دارید.
  • هوش مصنوعی در محصولهوش مصنوعی را فقط جایی به کار می‌گیریم که مسئله‌ای را حل کند.
نمونه‌کارهایادداشت‌هاقیمت‌گذاریدرباره ما
شروع گفتگو
  1. خانه
  2. /یادداشت‌ها
  3. /یادداشت‌ها
FutureForge

استودیوی مهندسی محصول — طراحی، ساخت و استقرار نرم‌افزار.

خدمات

طراحی سایت با وردپرستوسعه اختصاصیمهندسی محصولزیرساخت و استقرارمشاوره معماریهوش مصنوعی در محصول

راهنمای انتخاب

یادداشت‌هاقیمت‌گذاریتخمین هزینه پروژهمقایسه روش‌هانمونه‌کارهادرباره ماتماس

ارتباط

hello@futureforge.ir

ایده‌ای برای ساخت دارید؟

نیازتان را مطرح کنید تا درباره مسیر توسعه و قدم بعدی صحبت کنیم.

شروع گفتگو

© 2026 FutureForge. همه حقوق محفوظ است.

حریم خصوصیشرایط استفاده
خانهنمونه‌کارشروعتماس
واژه‌نامه

secret روی GitHub لو رفت: پاسخ به حادثه گام‌به‌گام

سا
سهیل ابراهیم‌پور
·۲۹ شهریور ۱۴۰۵·6 دقیقه مطالعه
نشت secret گیت‌هابrevoke tokenrotate credentialsgit-filter-reposecret scanning alertforce push risk
هشدار امنیتی و چک‌لیست revoke و rotate

اول revoke و rotate، بعد ارزیابی دامنه، محدودیت دسترسی، و فقط در صورت نیاز پاک‌سازی تاریخچه با git-filter-repo طبق مستندات رسمی GitHub.

هشدار secret scanning آمده، همکار در چت نوشته «توکن را اشتباه push کردم»، یا رباتی از کلید شما سوءاستفاده کرده. در این لحظه اولویت «پاک کردن فایل از آخرین commit» نیست. اولویت قطع دسترسی مهاجم است. مستندات رسمی GitHub صریحاً می‌گوید اگر دادهٔ حساس یک secret است، اولین قدم revoke یا rotate است؛ بعد تازه دربارهٔ بازنویسی تاریخچه تصمیم بگیرید.

این مقاله runbook است: ترتیب کار، چه چیزی را ثبت کنید، کی تاریخچه را لمس کنید، و چرا force push تنها کافی نیست.

revoke تا rotate تا purge تاریخچه تا notify

پاسخ کوتاه

۱) همان secret را فوراً باطل/چرخش دهید. ۲) دسترسی‌های وابسته و لاگ مصرف را بررسی کنید. ۳) دامنهٔ افشا را مشخص کنید (عمومی/خصوصی، fork، PR، Actions). ۴) از استفادهٔ مجدد همان مقدار جلوگیری کنید. ۵) فقط اگر سیاست و ریسک ایجاب کرد، با git-filter-repo تاریخچه را پاک و با هماهنگی force-push کنید و از Support برای پاک‌سازی کش/PR کمک بگیرید. ۶) کنترل پیشگیرانه را روشن کنید.

کلید زنده را بچرخانید؛ تاریخچهٔ تمیز بدون revoke امنیت نمی‌آورد.

دقیقهٔ صفر تا پانزده: مهار

  1. نوع secret را شناسایی کنید: توکن GitHub، کلید ابر، DB password، webhook، private key.
  2. در پنل صادرکننده revoke/rotate کنید؛ نسخهٔ جدید را فقط از کانال امن توزیع کنید.
  3. اگر توکن GitHub بود، sessionها و SSH keyهای مشکوک را هم مرور کنید.
  4. اگر کلید ابر بود، هزینه‌ها، ایجاد منبع جدید، و IAM را چک کنید.
  5. کانال حادثه باز کنید: چه کسی، چه مخزن، چه SHA، چه زمان.

در همین مرحله، commit پاک‌سازی ظاهری بدون revoke فقط حس امنیت کاذب می‌دهد.

ارزیابی دامنه

سؤالچرا مهم است
مخزن عمومی بود یا خصوصی؟اسکنرهای عمومی سرعت سوءاستفاده را بالا می‌برند
چند وقت در تاریخچه بوده؟پنجرهٔ سوءاستفاده
fork و mirror وجود دارد؟کپی خارج از کنترل شما
در PR، issue، wiki، gist هم آمده؟secret scanning این‌ها را هم پوشش می‌دهد
در لاگ Actions چاپ شده؟بازدیدکنندگان و artifact

طبق GitHub، حتی پس از بازنویسی محلی و push، داده ممکن است در کلون‌ها، forkها، مشاهدهٔ کش‌شده، و ارجاع PR باقی بماند.

اقدامات هم‌زمان روی مخزن

  • دسترسی collaboratorها را مرور کنید؛ حساب مشکوک را حذف کنید.
  • branch protection و قوانین force push را بشناسید قبل از هر rewrite.
  • اگر workflow مخرب یا مشکوک اضافه شده، آن را متوقف و بررسی کنید.
  • alertهای secret scanning را در تب Security دنبال و مستند کنید.

آیا باید تاریخچه را پاک کنید؟

GitHub تأکید می‌کند پس از revoke، بازنویسی تاریخچه ممکن است دیگر ارزش ریسک عملیاتی را نداشته باشد. بازنویسی side effect دارد:

  • ریسک بازگشت secret با push کلون قدیمی.
  • تغییر hash همهٔ commitهای بعدی و شکستن ابزار وابسته.
  • نیاز به خاموش کردن موقت محدودیت force push.
  • اثر روی PRها، امضای commit، و هماهنگی همهٔ کلون‌ها.

اگر secret هنوز در تاریخچه است ولی باطل شده، اولویت مستندسازی و پیشگیری است. اگر دادهٔ حساس غیرقابل‌چرخش (مثلاً دادهٔ شخصی مشتری) است، مسیر پاک‌سازی و هماهنگی با Support جدی‌تر می‌شود.

اگر تصمیم به پاک‌سازی تاریخچه گرفتید

مسیر توصیه‌شدهٔ فعلی GitHub استفاده از git-filter-repo با پرچم sensitive-data-removal است — نه دستورهای قدیمی filter-branch به‌عنوان پیش‌فرض آموزشی.

bash

# خلاصهٔ مفهومی مراحل رسمی — جزئیات را از Docs بخوانید git clone https://github.com/ORG/REPO cd REPO # حذف فایل از تمام تاریخچه: git-filter-repo --sensitive-data-removal --invert-paths --path PATH/TO/SECRET_FILE # یا جایگزینی متن‌ها از فایل passwords.txt: # git-filter-repo --sensitive-data-removal --replace-text ../passwords.txt git push --force --mirror origin

قبل از mirror push برگشت‌ناپذیر، تعداد PRهای متأثر را از خروجی filter-repo بررسی کنید. ممکن است موقتاً branch protection را شل کنید. سپس با همکاران هماهنگ کنید که کلون‌های آلوده را merge نکنند — merge می‌تواند تاریخچهٔ آلوده را برگرداند؛ باید rebase/بازکلون طبق راهنما انجام شود.

برای پاک شدن کامل از سمت GitHub (کش، ارجاع PR، GC)، طبق Docs باید از طریق GitHub Support درخواست دهید و اطلاعات مخزن، تعداد PR متأثر، و First Changed Commit را بفرستید. Support برای دادهٔ غیرحساس این کار را نمی‌کند و وقتی چرخش credential ریسک را کم کند ممکن است کمک حذف را لازم نداند.

چک‌لیست بعد از مهار

  1. تأیید کنید secret قدیم هیچ‌جا کار نمی‌کند.
  2. رمز جدید در همهٔ محیط‌ها (اپ، CI، همکاران) به‌روز شده.
  3. علت ریشه‌ای: add بی‌دقت، نبود gitignore، نبود push protection، کپی در تست.
  4. فعال‌سازی/بازبینی push protection و secret scanning.
  5. آموزش کوتاه در تیم و به‌روزرسانی runbook.
  6. ثبت زمان‌خط حادثه برای یادگیری.

آنچه نباید بکنید

  • فقط delete کردن فایل در commit جدید و بستن تیکت.
  • force push بدون هماهنگی روی شاخهٔ فعال تیم.
  • fort کردن کلید جدید داخل همان PR عمومی با توضیح واضح مقدار.
  • نادیده گرفتن forkها.
  • فرض اینکه «مخزن خصوصی بود پس هیچ‌کس ندید».

نقش هشدارها و شریک‌های scanning

برای برخی انواع secret، GitHub با ارائه‌دهنده شریک است و ممکن است خود ارائه‌دهنده را مطلع کند. این کمک است نه جایگزین revoke توسط شما. validity checkها در طرح‌های پیشرفته کمک می‌کنند بفهمید کلید هنوز فعال است یا نه.

تمرین بدون بحران

در محیط آزمایشی یک‌بار سناریوی «توکن تست لو رفت» را با تیم مرور کنید: چه کسی revoke می‌کند، کانال اطلاع چیست، کی Security وارد می‌شود. اولین‌بار بودن این کار در production ساعت طلایی را می‌سوزاند.

خلاصه

پاسخ به نشت secret روی GitHub با مهار دسترسی شروع می‌شود، با ارزیابی دامنه ادامه می‌یابد، و فقط در صورت نیاز به پاک‌سازی تاریخچه با ابزار و هماهنگی رسمی می‌رسد. موفقیت یعنی کلید قدیم مرده، کلید جدید امن توزیع شده، و مسیر ورود دوباره بسته شده است.

سوالات متداول

commit را از تاریخچه پاک کردم؛ تمام شد؟

خیر تا revoke نشده و کپی‌ها و کش‌ها بررسی نشده‌اند.

آیا باید مخزن را خصوصی کنم؟

کاهش دید عمومی گاهی مفید است ولی جایگزین چرخش کلید نیست؛ پیامد تغییر visibility را از Docs بخوانید.

push protection بعد از حادثه چه کمکی می‌کند؟

از تکرار ورود secretهای شناخته‌شده جلوگیری می‌کند؛ برای گذشته کافی نیست.

منابع و مراجع

  • GitHub Docs — Removing sensitive data from a repository: https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository
  • GitHub Docs — About secret scanning: https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning
  • GitHub Docs — Push protection: https://docs.github.com/en/code-security/secret-scanning/introduction/about-push-protection
  • GitHub Support portal: https://support.github.com/
  • git-filter-repo project: https://github.com/newren/git-filter-repo

نویسنده

سا

سهیل ابراهیم‌پور بنیان‌گذار FutureForge است. روی طراحی محصول، معماری و استقرار نرم‌افزار سفارشی کار می‌کند.

یادداشت‌های مرتبط

یادداشت‌های مرتبط

دسته‌بندی‌ها

خدمات مرتبط

از یادداشت تا پروژه

اگر با مسئله‌ای شبیه این روبه‌رو هستید، درباره‌ی شرایط پروژه‌تان با هم صحبت کنیم.

برای انتخاب مسیر فنی پروژه‌تان کمک می‌خواهید؟

از مسئله و محدودیت‌هایتان بگویید؛ اگر بتوانیم همراهی‌تان کنیم، برای گفت‌وگو هماهنگ می‌کنیم.

سهیل ابراهیم‌پور
یادداشت‌ها
prompt injection در RAG
Embedding چیست؟
نمایش منبع در پاسخ هوش مصنوعی
RAG یا Fine Tuning؟ چارچوب انتخاب
خروجی ساختاریافته JSON از LLM

مهندسی محصول

prompt injection در RAG

۱۳ آبان ۱۴۰۵

معماری نرم‌افزار

Embedding چیست؟

۱۳ آبان ۱۴۰۵

مهندسی محصول

نمایش منبع در پاسخ هوش مصنوعی

۱۲ آبان ۱۴۰۵

معماری نرم‌افزار

RAG یا Fine Tuning؟ چارچوب انتخاب

۱۲ آبان ۱۴۰۵

معماری نرم‌افزار

خروجی ساختاریافته JSON از LLM

۱۱ آبان ۱۴۰۵
همه یادداشت‌ها315
معماری نرم‌افزار31
واژه‌نامه37
عملیات و استقرار94
مهندسی محصول122
راهنمای وب31
طراحی و ساخت محصول
توسعه فول‌استک
ممیزی مهندسی
مشاوره معماری
زیرساخت و استقرار
شروع گفتگو
ابزارهای رایگان
شروع گفتگو