نحوهٔ حذف اطلاعات حساس از ریپازیتوری GitHub

نحوهٔ حذف اطلاعات حساس از ریپازیتوری GitHub

یکی از آسیب‌پذیری‌هایی که شاید کمتر کسی به آن توجه دارد این است که اطلاعات حساس و محرمانه مربوط به نرم‌افزار -مثل نام‌کاربری و رمزعبور دیتابیس- داخل سورس‌کد نرم‌افزار رها شده باشند و بالتبع درون یک Version Controlling System یا VCS پابلیک قرار داده شده باشند (منظور از پابلیک این است که هر دولوپر دیگری به‌راحتی می‌تواند به سورس‌کد مدنظر دسترسی پیدا کند!) در این صورت فرد یا شرکت سازندهٔ آن نرم‌افزار اطلاعات حساس و یا حتی مجوزهای لازم را با دست خود در اختیار سودجویان قرار می‌دهد که ممکن است امنیت نرم‌افزاری ایشان را تحت‌الشعاع قرار دهد. امروزه Git به یکی از پرکاربردترین و محبوب‌ترین سیستم‌های ورژن کنترل تبدیل شده است و در این مقاله قصد داریم آموزش دهیم که به چه شکل می‌توان اطلاعات حساسی که ممکن است در گذشته سهوا در ریپازیتوری خود منتشر کرده‌ایم را در گیت حذف کنیم. در ادامه با سکان آکادمی همراه باشید.

شاید بگویید که هنگامی نرم‌افزار به صورت تجاری ریلیس شد، آن تکه کد حساس را از اپلیکیشن حذف می‌کنیم و شاید هم این کار را بکنید، ولی دولوپرهایی هستند که یا بلد نیستند این کار را انجام دهند یا فراموش می‌کنند که این کار را انجام داده و نتیجه آن می‌شود که یک آسیب‌پذیری جدی به‌صورت کاملاً اختصاصی را در اختیار هکرها گذاشته می‌شود!

حذف اطلاعات حساس از یک VCS پابلیک مانند GitHub کار ساده‌ای است تنها کافی است فایل مورد نظر خود را از ریپازیتوری کد گیت‌هاب حذف کنید و همچنین نام آن فایل را در فایل gitignore. اضافه نمایید (فایل gitignore. یک فایل متنی ساده است که می‌توان لیست فایل‌ها و یا فولدرهایی که دوست نداریم منتشر شوند را در آن قرار داده و این لیست در کلیهٔ Push و Pull‌ها نادیده گرفته می‌شود.)

برای انجام این کار نخست آخرین تغییراتی که باید در پروژه اصطلاحاً Merge شوند را انجام دهید تا خدایی نکرده حاصل زحمات همکارانتان از دست نرود! و بعد تاریخچه فایل مورد نظر را از گیت‌هاب حذف نمایید؛ حذف تاریخچه با دستور filter-branch به‌صورت زیر انجام می‌شود:

git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch PATH-TO-YOUR-FILE-WITH-SENSITIVE-DATA' \
--prune-empty --tag-name-filter cat -- --all

شاید در نگاه اول کامندهای بالا ترسناک به‌نظر برسند، اما این کامندها در داکیومنت‌های گیت هاب موجود است. پس از این‌که دستور فوق با‌موفقیت به پایان رسید، چند کار دیگر هم باید انجام دهید که اولین آن‌ها افزودن فایل/فایل‌های مورد نظر به فایل gitignore. است که در بالا به آن اشاره شد سپس استفاده از دستور زیر است که این وظیفه را دارا است تا کلیهٔ تغییرات لوکال را روی ریپازیتوری مد نظرتان اعمال کند:

git push origin --force --all

در پایان از همکاران خود بخواهید تا پروژه را مجدداً از گیت‌هاب کلون کنند تا مجدداً این اطلاعات حساس بر روی ریپازیتوری آپلود نشوند؛ همچنین اگر پروژهٔ خود را بر روی VCSهای پابلیک قرار داده‌اید، باید کلیه پسوردها را تغییر دهید تا خطر نشت اطلاعات را به حداقل برسانید. 

البته یک راه ساده‌تر هم برای حذف اطلاعات حساس از مخزن گیت‌هاب وجود دارد و آن‌هم استفاده از دستور bfg به‌جای دستور filter-branch است. برای مثال برای حذف یک فایل حساس از ریپازیتوری مدنظر، از دستور زیر استفاده نمایید:

bfg --delete-files YOUR-FILE-WITH-SENSITIVE-DATA

YOUR-FILE-WITH-SENSITIVE-DATA هم نام فایلی است که اطلاعات حساس‌تان در آن قرار گرفته است.

منبع