জ্যাঙ্গো সেটিংয়ের উদ্দেশ্য 'SECRET_KEY'


157

জাঙ্গোতে ঠিক কী কথা SECRET_KEY? আমি কয়েকটি গুগল অনুসন্ধান করেছি এবং ডক্সগুলি পরীক্ষা করে দেখেছি ( https://docs.djangoproject.com/en/dev/ref/settings/#secret-key ), তবে আমি এর আরও গভীরতর ব্যাখ্যা খুঁজছিলাম, এবং এটি কেন প্রয়োজন।

উদাহরণস্বরূপ, কীটি আপোস করা হলে / অন্যরা জানত যে এটি কী ছিল? ধন্যবাদ.


4
আপনার যদি কোনও গোপন কী থাকে এবং এটি আপস করে অন্যের কাছে ছেড়ে দেওয়া হয়, আপনার একটি সমস্যা আছে। আপনি জ্যাঙ্গো ব্যবহার করছেন কিনা তা বিবেচ্য নয়।
জেরেদ ফারিশ 0

35
তবে ঠিক কী সমস্যা?
tobych

7
আমি একটি পুঙ্খানুপুঙ্খ উত্তর দিতে হয়নি এখানে (লজ্জাহীন প্লাগ)
sberder

4
@ এসবার্ডার সম্ভবত আপনার এই প্রশ্নের উত্তরও লিখতে হবে। আমি কল্পনা করেছি আপনি গ্রহণযোগ্য উত্তর-উত্তরের চেয়ে এটি আরও ভাল করতে পারবেন।
কাস্পার্ড

উত্তর:


92

এটি হ্যাশ তৈরির জন্য ব্যবহৃত হয়। দেখুন:

>grep -Inr SECRET_KEY *
conf/global_settings.py:255:SECRET_KEY = ''
conf/project_template/settings.py:61:SECRET_KEY = ''
contrib/auth/tokens.py:54:        hash = sha_constructor(settings.SECRET_KEY + unicode(user.id) +
contrib/comments/forms.py:86:        info = (content_type, object_pk, timestamp, settings.SECRET_KEY)
contrib/formtools/utils.py:15:    order, pickles the result with the SECRET_KEY setting, then takes an md5
contrib/formtools/utils.py:32:    data.append(settings.SECRET_KEY)
contrib/messages/storage/cookie.py:112:        SECRET_KEY, modified to make it unique for the present purpose.
contrib/messages/storage/cookie.py:114:        key = 'django.contrib.messages' + settings.SECRET_KEY
contrib/sessions/backends/base.py:89:        pickled_md5 = md5_constructor(pickled + settings.SECRET_KEY).hexdigest()
contrib/sessions/backends/base.py:95:        if md5_constructor(pickled + settings.SECRET_KEY).hexdigest() != tamper_check:
contrib/sessions/backends/base.py:134:        # Use settings.SECRET_KEY as added salt.
contrib/sessions/backends/base.py:143:                       settings.SECRET_KEY)).hexdigest()
contrib/sessions/models.py:16:        pickled_md5 = md5_constructor(pickled + settings.SECRET_KEY).hexdigest()
contrib/sessions/models.py:59:        if md5_constructor(pickled + settings.SECRET_KEY).hexdigest() != tamper_check:
core/management/commands/startproject.py:32:        # Create a random SECRET_KEY hash, and put it in the main settings.
core/management/commands/startproject.py:37:        settings_contents = re.sub(r"(?<=SECRET_KEY = ')'", secret_key + "'", settings_contents)
middleware/csrf.py:38:                % (randrange(0, _MAX_CSRF_KEY), settings.SECRET_KEY)).hexdigest()
middleware/csrf.py:41:    return md5_constructor(settings.SECRET_KEY + session_id).hexdigest()

9
তারা কেন তখন এটিকে নুন বলেনি? ;)
ডেটনওল্ফ

29
এটি অনুমান, তবে আমি মনে করি যে "আপনার নিজের কাছে শেয়ার করা উচিত নয় এমন একটি গোপনীয় চাবিকাঠি SECRET_KEY" এর বিপরীতে লোকেরা "আপনার ভাগ করে নেবেন না" বলা সহজ is SALT
রওশন ম্যাথিউজ

12
যে পার্থক্য খুব গুরুত্বপূর্ণ। ক্রিপ্টোগ্রাফিতে, লবণগুলি গোপন নয়, তবে SECRET_KEYঅবশ্যই এটি সুরক্ষিত রাখতে হবে। এর ব্যবহারটি SECRET_KEYএইচএমএসি (যেমন, যদি পারফরম্যান্স বিবেচনা না করা হত, সম্ভবত পরিবর্তে ব্যবহৃত হত) হিসাবে স্বাক্ষরিত হ্যাশগুলিতে একটি কী ব্যবহারের অনুরূপ।
ট্র্যাভিস জেনসেন

32
এটি আমার কাছে উত্তর বলে মনে হচ্ছে না। এটির যে কোনওটি কী করে তা ব্যাখ্যা না করে আপনি যা কিছু করেছিলেন তা একক গ্রেপ কমান্ড ছিল। "কীটি আপস করা হলে কী হতে পারে?" এর উত্তর কোথায়?
কাস্পার্ড

এছাড়াও যেহেতু SECRET_KEY গোপনীয়, তাই কীতে একটি SECRET উপসর্গ করা নিশ্চিত করে যে জ্যাঙ্গো যেখানে প্রয়োজন সেখানে মানগুলি এনক্রিপ্ট / মাস্ক করবে।
লিনাস_30

36

ক্রিপ্টোগ্রাফিক স্বাক্ষর জন্য জ্যাঙ্গো ডকুমেন্টেশন 'SECRET_KEY' সেটিং ব্যবহার জুড়ে:

এই মানটি [ SECRET_KEYসেটিং] স্বাক্ষরিত ডেটা সুরক্ষিত করার মূল চাবিকাঠি - আপনি এটিকে সুরক্ষিত রাখাই অত্যাবশ্যক, অথবা আক্রমণকারীরা তাদের স্বাক্ষরিত মানগুলি তৈরি করতে এটি ব্যবহার করতে পারে।

(এই বিভাগটি 'SECRET_KEY' সেটিংয়ের জন্য জ্যাঙ্গো ডকুমেন্টেশন থেকেও উল্লেখ করা হয়েছে ))

জাজানোতে ক্রিপ্টোগ্রাফিক স্বাক্ষরকারী এপিআই মানগুলিতে ক্রিপ্টোগ্রাফিক-সুরক্ষিত স্বাক্ষরের জন্য যে কোনও অ্যাপের কাছে উপলব্ধ। জ্যাঙ্গো নিজেই বিভিন্ন উচ্চ-স্তরের বৈশিষ্ট্যে এটি ব্যবহার করে:

  • সিরিয়ালযুক্ত ডেটাতে সাইন ইন করা (যেমন জেএসওএন ডকুমেন্টস)।

  • ব্যবহারকারীর সেশনের জন্য অনন্য টোকেন, পাসওয়ার্ড পুনরায় সেট করার অনুরোধ, বার্তা ইত্যাদি

  • অনুরোধের জন্য অনন্য মান যুক্ত করে (এবং তারপরে প্রত্যাশা করা) ক্রস-সাইট বা পুনরায় খেলানো আক্রমণ প্রতিরোধ।

  • হ্যাশ ফাংশনগুলির জন্য একটি অনন্য লবণ তৈরি করা।

সুতরাং, সাধারণ উত্তরটি হ'ল: জ্যাঙ্গো অ্যাপে অনেকগুলি জিনিস রয়েছে যার জন্য একটি ক্রিপ্টোগ্রাফিক স্বাক্ষর প্রয়োজন এবং 'এসইসিআরইকি' সেটিংটি সেইগুলির জন্য ব্যবহৃত কী। এটিতে একটি ক্রিপ্টোগ্রাফিকভাবে শক্তিশালী পরিমাণে এনট্রপি থাকা (কম্পিউটারগুলির পক্ষে অনুমান করা শক্ত) এবং সমস্ত জাজানো দৃষ্টান্তের মধ্যে স্বতন্ত্র।


1
"এবং সমস্ত জ্যাঙ্গোর উদাহরণগুলির মধ্যে অনন্য।" - এর অর্থ কি যদি বোঝা যায় যে আমার কাছে লোড ব্যালেন্সারের পিছনে একই ধরণের জ্যাঙ্গো অ্যাপ্লিকেশনটি চালাচ্ছে আমার 3 টি পৃথক SECRET_KEYসেটিংস থাকা উচিত ?
আদম পার্কিন

2
@ অ্যাডাম পারকিন, এটি একটি নতুন প্রশ্নের নিজের উত্তর পাওয়ার জন্য একটি ভাল সূচনা বলে মনে হচ্ছে ।
বিগনোজ দিন

2
দুর্দান্ত পরামর্শ, সম্পন্ন: স্ট্যাকওভারফ্লো.com
অ্যাডাম পার্কিন

19

জ্যাঙ্গো ডকুমেন্টেশন অনুসারেSECRET_KEY :

গোপন কীটি এর জন্য ব্যবহৃত হয়:

  • আপনি যদি django.contrib.sessions.backends.cacheডিফল্ট ব্যতীত অন্য কোনও সেশন ব্যাকএন্ড ব্যবহার করেন তবে সমস্ত সেশন get_session_auth_hash()
  • সমস্ত বার্তা আপনি ব্যবহার করছেন CookieStorageবা যদি FallbackStorage
  • সমস্ত পাসওয়ার্ডসেটভিউ টোকেন।
  • কোনও আলাদা কী সরবরাহ না করা অবধি ক্রিপ্টোগ্রাফিক স্বাক্ষরের কোনও ব্যবহার।

আপনি যদি নিজের গোপন কীটি ঘোরান, তবে উপরের সমস্তটি অবৈধ হয়ে যাবে। ব্যবহারকারীর পাসওয়ার্ডের জন্য গোপন কীগুলি ব্যবহার করা হয় না এবং কী ঘোরানো এগুলিকে প্রভাবিত করবে না।


5
SECRET_KEYঘোরানো হলে কী হয় সে সম্পর্কিত দরকারী তথ্য । +1
হাসান বৈগ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.