اگر کار می کنید روی یک پروژه Django ، شما احتمالاً با SECRET_KEY در پرونده تنظیمات خود این ممکن است فقط یک خط کد دیگر به نظر برسد ، اما این یکی از مهمترین بخش های پروژه شما است.

SECRET_KEY با امضای کوکی ها ، رمزهای عبور و سایر داده های حساس ، برنامه خود را ایمن نگه می دارد. و اگر تا به حال در معرض دید یا فاش شدن باشد – بله ، این یک مشکل است.

تغییر Django SECRET_KEY کاری است که شما باید با دقت انجام دهید. شاید کلید شما به GitHub متعهد باشد (همه ما آنجا بوده ایم) ، یا شما فقط می خواهید آن را برای امنیت بهتر تازه کنید.

به هر دلیلی ، من شما را طی می کنم که چگونه این کار را با خیال راحت انجام دهید بدون اینکه چیزی را بشکنید. من همه چیز را به زبان انگلیسی ساده توضیح خواهم داد ، بنابراین شما تعجب نمی کنید که تازه اتفاق افتاده است.

بیایید وارد آن شویم.

جنگو چیست SECRET_KEY؟

در SECRET_KEY یک رشته طولانی از شخصیت های تصادفی است که در شما ذخیره شده است settings.py پرونده از آن توسط Django به:

  • کوکی های جلسه ایمن را امضا کنید

  • بازنشانی رمز عبور را ایجاد کنید

  • از داده ها با استفاده از امضای رمزنگاری محافظت کنید

در اینجا به نظر می رسد که در پروژه Django شما به نظر می رسد:

# settings.py
SECRET_KEY = 'django-insecure-12345supersecretrandomstring'

اگر کسی به شما دسترسی پیدا کند SECRET_KEY، آنها به طور بالقوه می توانند:

  • کوکی های جلسه را جعل کنید و کاربران را جعل هویت کنید

  • رمزهای عبور یا دستکاری با داده های امضا شده

  • کل برنامه را سازش کنید

پیشنهاد می‌کنیم بخوانید:  روش تقسیم رشته در جاوا اسکریپت جاوا اسکریپت متدهای داخلی بسیار مفیدی برای دستکاری رشته ها دارد، یکی از این روش ها متد split() است. در این مقاله نگاهی دقیق‌تر به متد split() خواهیم داشت و اینکه چگونه می‌توانیم از آن در ارتباط با عبارات منظم برای تقسیم یک رشته طولانی فقط ...

بنابراین بله – این یک نوع کار بزرگ است.

چه زمانی باید کلید مخفی Django خود را تغییر دهید؟

شما باید خود را تغییر دهید SECRET_KEY if:

  • شما آن را به طور تصادفی در کد عمومی به اشتراک گذاشتید (مانند GitHub)

  • در یک فایل سخت شده بود و می خواهید به متغیرهای محیط تغییر دهید

  • شما به عنوان بخشی از یک سیاست امنیتی کلیدها را می چرخانید

  • شما گمان می کنید که به خطر افتاده است

هنوز مطمئن نیستید که آیا لازم است؟ اگر کلید تا کنون به اشتراک گذاشته شده یا ذخیره شده است که شخص دیگری بتواند به آن دسترسی داشته باشد ، فقط آن را تغییر دهید.

چگونه Django خود را تغییر دهیم SECRET_KEY با خیال راحت

1 یک کلید مخفی جدید ایجاد کنید

کلید باید طولانی ، تصادفی و ایمن باشد. Django برای این خارج از جعبه فرمان ارائه نمی دهد ، اما می توانید با استفاده از پایتون یکی از آنها را تولید کنید.

در اینجا یک فیلمنامه ساده وجود دارد:

from django.core.management.utils import get_random_secret_key

print(get_random_secret_key())

برای اجرای این کار:

  1. خود را باز کنید terminal

  2. پوسته Django را با آن اجرا کنید python manage.py shell

  3. چسباندن در فیلمنامه

این چیزی مانند:

x3%6kn$mlg58+as!rcvnmvd8%(2p!p#&yk@r)+tdlj*w9kx!5gx

این را کپی کنید شما در یک ثانیه به آن احتیاج دارید.

2 کلید را به صورت ایمن ذخیره کنید (آن را سخت نکنید)

به جای چسباندن آن به settings.py، بهتر است از متغیر محیط استفاده کنید. به این ترتیب ، اگر کد خود را به اشتراک بگذارید ، خطر در معرض خطر آن را ندارید.

در اینجا چگونه:

  1. خود را باز کنید .env پرونده (اگر وجود نداشته باشد یکی را ایجاد کنید):
# .env
SECRET_KEY='x3%6kn$mlg58+as!rcvnmvd8%(2p!p#&yk@r)+tdlj*w9kx!5gx'
  1. نصب کردن python-decouple اگر قبلاً چنین نکرده اید:
pip install python-decouple
  1. خود را به روز کنید settings.py:
from decouple import config

SECRET_KEY = config('SECRET_KEY')

اکنون کلید شما در خارج از کد شما ذخیره شده است. بسیار ایمن تر

پیشنهاد می‌کنیم بخوانید:  چگونه خودhost الف Container رجیستری

3 با دقت

مطمئن شوید:

  • شما .env پرونده به .gitignore

  • شما هرگز آن را به مخزن خود سوق نمی دهید

در اینجا چگونه است .gitignore باید نگاه کند:

# .gitignore
.env

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

4 برنامه خود را مجدداً راه اندازی کنید

پس از تغییر کلید ، سرور خود را مجدداً راه اندازی کنید. اگر از سکویی مانند Heroku یا Docker استفاده می کنید ، حتماً این موارد را به روز کنید SECRET_KEY در داشبورد متغیرهای محیط زیست.

برای هروکو:

heroku config:set SECRET_KEY='your-new-key'

برای داکر:

# docker-compose.yml
environment:
  - SECRET_KEY=your-new-key

5 دوباره وارد شوید (و از کاربران بخواهید که همین کار را انجام دهند)

تغییر کلید مخفی همه جلسات قدیمی را باطل می کند. بنابراین ، همه (از جمله شما) از سیستم خارج می شوند. این رفتار مورد انتظار است. اگر در حال اداره یک سایت عمومی هستید ، ایده خوبی است که از قبل به کاربران اطلاع دهید.

اگر آن را تغییر ندهید چه اتفاقی می افتد؟

اگر کلید شما به خطر بیفتد ، مهاجمان می توانند:

  • داده های جعل

  • حساب های ربوده شده

  • سیستم احراز هویت را بشکنید

این فقط مربوط به بهترین شیوه ها نیست. این در مورد امنیت در دنیای واقعی است.

متداول

آیا این برنامه من را می شکند؟

نه ، تا زمانی که برنامه خود را مجدداً راه اندازی کنید و کلید را به درستی ذخیره کنید ، همه چیز خوب خواهد بود. فقط به یاد داشته باشید: همه کاربران از سیستم خارج می شوند.

آیا می توانم از همان کلید برای چندین پروژه استفاده کنم؟

نه هر پروژه باید کلید مخفی منحصر به فرد خود را داشته باشد.

آیا می توانم به طور مرتب کلید را بچرخانم؟

بله ، فقط توجه داشته باشید که تغییر بیش از حد آن اغلب کاربران را به طور مکرر وارد می کند.

فراموش کردم اضافه کنم .env به .gitignoreبشر حالا چی؟

کلید را بازسازی کنید ، پروژه خود را به روز کنید و مطمئن شوید که جدید .env پرونده ردیابی نمی شود.

افکار نهایی

تغییر Django SECRET_KEY ممکن است بار اول احساس ارعاب کند ، اما وقتی آن را تجزیه می کنید بسیار ساده است. تا زمانی که یک کلید امن ایجاد کنید ، آن را با خیال راحت ذخیره کنید و آن را به صورت عمومی در معرض دید قرار ندهید ، شما عالی عمل می کنید.

یک چیز آخر –آخرین باری که بررسی کردید که آیا کلید مخفی شما به طور تصادفی به Github منتقل شده است؟ ممکن است زمان خوبی برای نگاهی سریع باشد.

منابع مفید

  • Django Docs – Secret_Key

  • Gitguardian – Secrets Detection

  • برنامه 12 فاکتور – پیکربندی

  • پیتون-دکوپل github