निःशुल्क फ्लास्क app.secret_key ध्वस्त


127

यदि app.secret_keyसेट नहीं किया गया है, तो फ्लास्क आपको सत्र शब्दकोश सेट या एक्सेस करने की अनुमति नहीं देगा।

यह सब कुछ है कि फ्लास्क उपयोगकर्ता गाइड का कहना है इस विषय पर ।

मैं वेब विकास के लिए बहुत नया हूं और मुझे पता नहीं है कि कोई सुरक्षा सामान कैसे / क्यों काम करता है। मैं यह समझना चाहूंगा कि फ्लास्क हुड के नीचे क्या कर रहा है।

  • फ्लास्क हमें इसे सेट करने के लिए क्यों मजबूर करता है secret_key संपत्ति है?
  • फ्लास्क secret_keyसंपत्ति का उपयोग कैसे करता है?

जवाबों:


102

जो कुछ भी एन्क्रिप्शन की आवश्यकता होती है (हमलावरों द्वारा छेड़छाड़ के खिलाफ सुरक्षित रखने के लिए) को सेट करने के लिए गुप्त कुंजी की आवश्यकता होती है। के लिए सिर्फ बोतल ही है, कि 'कुछ भी' है Sessionवस्तु है, लेकिन अन्य एक्सटेंशन एक ही रहस्य का उपयोग कर सकते।

secret_keySECRET_KEYकॉन्फ़िगरेशन कुंजी के लिए केवल मान सेट है , या आप इसे सीधे सेट कर सकते हैं।

त्वरित प्रारंभ में सत्र अनुभाग क्या सर्वर साइड रहस्य की तरह आप स्थापित करना चाहिए पर अच्छा है, समझदार सलाह है।

एन्क्रिप्शन रहस्यों पर निर्भर करता है; यदि आपने एन्क्रिप्शन का उपयोग करने के लिए सर्वर-साइड रहस्य सेट नहीं किया है, तो हर कोई आपके एन्क्रिप्शन को तोड़ने में सक्षम होगा; यह आपके कंप्यूटर के पासवर्ड की तरह है। गुप्त प्लस डेटा-टू-साइन का उपयोग एक हस्ताक्षर स्ट्रिंग बनाने के लिए किया जाता है, एक क्रिप्टोग्राफिक ब्रिंग एल्गोरिथ्म का उपयोग करके हार्ड-टू-रिक्रिएट वैल्यू ; केवल अगर आपके पास एक ही रहस्य है और मूल डेटा आप इस मूल्य को फिर से बना सकते हैं, तो फ्लास्क का पता लगाने के बिना अगर कुछ भी बिना अनुमति के बदल दिया गया है। चूंकि गुप्त डेटा के साथ कभी शामिल नहीं होता है फ्लास्क क्लाइंट को भेजता है, एक ग्राहक सत्र डेटा के साथ छेड़छाड़ नहीं कर सकता है और एक नया, वैध हस्ताक्षर बनाने की उम्मीद कर सकता है।

फ्लास्क पूरी मेहनत करने के लिए itsdangerousपुस्तकालय का उपयोग करता है ; सत्र एक अनुकूलित JSON धारावाहिक के साथ itsdangerous.URLSafeTimedSerializerकक्षा का उपयोग करते हैं ।


91

नीचे दिए गए जवाब मुख्य रूप से हस्ताक्षरित कुकीज़ , सत्रों की अवधारणा का कार्यान्वयन (जैसा कि वेब अनुप्रयोगों में उपयोग किया जाता है) से संबंधित है। कुप्पी प्रदान करता है दोनों सामान्य (अहस्ताक्षरित) कुकीज़ (के माध्यम से request.cookiesऔर response.set_cookie()) और हस्ताक्षर किए कुकीज़ (के माध्यम से flask.session)। उत्तर के दो भाग हैं, पहला वर्णन करता है कि एक हस्ताक्षरित कुकी कैसे बनाई जाती है, और दूसरा एक क्यूए के रूप में प्रस्तुत किया जाता है जो योजना के विभिन्न पहलुओं को संबोधित करता है। उदाहरणों के लिए प्रयुक्त सिंटैक्स Python3 है, लेकिन अवधारणाएं पिछले संस्करणों पर भी लागू होती हैं।

क्या है SECRET_KEY(या कैसे एक हस्ताक्षरित कुकी बनाने के लिए)?

कुकीज़ पर हस्ताक्षर करना कुकी से छेड़छाड़ के खिलाफ एक निवारक उपाय है। कुकी पर हस्ताक्षर करने की प्रक्रिया के दौरान, SECRET_KEYइसका उपयोग एक तरह से किया जाता है कि कैसे "नमक" का उपयोग पासवर्ड को हिंग करने से पहले करने के लिए किया जाएगा। यहाँ अवधारणा का (बेतहाशा) सरलीकृत वर्णन है। उदाहरणों में कोड चित्रण करने के लिए है। कई चरणों को छोड़ दिया गया है और सभी कार्य वास्तव में मौजूद नहीं हैं। यहां लक्ष्य सामान्य विचार की समझ प्रदान करना है, वास्तविक कार्यान्वयन थोड़ा अधिक शामिल होगा। इसके अलावा, ध्यान रखें कि फ्लास्क आपके लिए बैकग्राउंड में ऐसा करता है। इसलिए, अपने कुकी (सत्र API के माध्यम से) को मान सेट करने और प्रदान करने के अलावा SECRET_KEY, यह न केवल अपने आप को इसे लागू करने की सलाह दी जाती है, लेकिन ऐसा करने की कोई आवश्यकता नहीं है:

एक गरीब आदमी का कुकी हस्ताक्षर

ब्राउज़र पर प्रतिक्रिया भेजने से पहले:

(1) सबसे पहले SECRET_KEYस्थापित है। यह केवल आवेदन के लिए जाना जाना चाहिए और आवेदन के पुनरारंभ के माध्यम से आवेदन के जीवन चक्र के दौरान अपेक्षाकृत स्थिर रखा जाना चाहिए।

# choose a salt, a secret string of bytes
>>> SECRET_KEY = 'my super secret key'.encode('utf8')

(२) कुकी बनाना

>>> cookie = make_cookie(
...     name='_profile', 
...     content='uid=382|membership=regular',
...     ...
...     expires='July 1 2030...'
... )

>>> print(cookie)
name: _profile
content: uid=382|membership=regular...
    ...
    ...
expires: July 1 2030, 1:20:40 AM UTC

(3) SECRET_KEYकुकी बाइट स्ट्रिंग में एक हस्ताक्षर, परिशिष्ट (या प्रीपेंड) बनाने के लिए, फिर उस संयोजन के लिए एक हैश उत्पन्न करें।

# encode and salt the cookie, then hash the result
>>> cookie_bytes = str(cookie).encode('utf8')
>>> signature = sha1(cookie_bytes+SECRET_KEY).hexdigest()
>>> print(signature)
7ae0e9e033b5fa53aa....

(४) अब contentमूल कुकी के क्षेत्र के एक छोर पर हस्ताक्षर चिपकाएँ ।

# include signature as part of the cookie
>>> cookie.content = cookie.content + '|' + signature
>>> print(cookie)
name: _profile
content: uid=382|membership=regular|7ae0e9...  <--- signature
domain: .example.com
path: /
send for: Encrypted connections only
expires: July 1 2030, 1:20:40 AM UTC

और यही ग्राहक को भेजा जाता है।

# add cookie to response
>>> response.set_cookie(cookie)
# send to browser --> 

ब्राउज़र से कुकी प्राप्त करने पर:

(5) जब ब्राउज़र इस कुकी को सर्वर पर वापस लाता है, contentतो मूल कुकी वापस पाने के लिए कुकी के क्षेत्र से हस्ताक्षर को छीन लें।

# Upon receiving the cookie from browser
>>> cookie = request.get_cookie()
# pop the signature out of the cookie
>>> (cookie.content, popped_signature) = cookie.content.rsplit('|', 1)

(6) आवेदन के साथ मूल कुकी SECRET_KEYका उपयोग करें चरण 3 में के रूप में उसी विधि का उपयोग कर हस्ताक्षर पुनर्गणना करने के लिए।

# recalculate signature using SECRET_KEY and original cookie
>>> cookie_bytes = str(cookie).encode('utf8')
>>> calculated_signature = sha1(cookie_bytes+SECRET_KEY).hexdigest()

(() पहले प्राप्त कुकी में से पहले से भरे हुए हस्ताक्षर के साथ परिकलित परिणाम की तुलना करें। यदि वे मेल खाते हैं, तो हम जानते हैं कि कुकी के साथ गड़बड़ नहीं की गई है। लेकिन अगर कुकी में सिर्फ एक स्थान जोड़ा गया है, तो हस्ताक्षर मेल नहीं खाएंगे।

# if both signatures match, your cookie has not been modified
>>> good_cookie = popped_signature==calculated_signature

(() यदि वे मेल नहीं खाते हैं, तो आप किसी भी संख्या के साथ प्रतिक्रिया कर सकते हैं, घटना को लॉग इन कर सकते हैं, कुकी को छोड़ सकते हैं, एक ताजा जारी कर सकते हैं, एक लॉगिन पृष्ठ पर पुनर्निर्देशित कर सकते हैं, आदि।

>>> if not good_cookie:
...     security_log(cookie)

हैश-आधारित संदेश प्रमाणीकरण कोड (HMAC)

ऊपर उत्पन्न हस्ताक्षर के प्रकार को कुछ सामग्रियों की अखंडता को सुनिश्चित करने के लिए एक गुप्त कुंजी की आवश्यकता होती है जिसे क्रिप्टोग्राफी में एक संदेश प्रमाणीकरण कोड या मैक कहा जाता है ।

मैंने पहले निर्दिष्ट किया था कि ऊपर दिया गया उदाहरण उस अवधारणा का निरीक्षण है और यह कि आपके स्वयं के हस्ताक्षर को लागू करने के लिए एक अच्छा विचार नहीं था। ऐसा इसलिए है क्योंकि फ्लास्क में कुकीज़ पर हस्ताक्षर करने के लिए उपयोग किए जाने वाले एल्गोरिदम को एचएमएसी कहा जाता है और उपरोक्त सरल चरण-दर-चरण की तुलना में थोड़ा अधिक शामिल है। सामान्य विचार समान है, लेकिन इस चर्चा के दायरे से परे कारणों के कारण, संगणना की श्रृंखला कुछ अधिक जटिल है। यदि आप अभी भी एक DIY क्राफ्टिंग में रुचि रखते हैं, जैसा कि यह आमतौर पर होता है, तो पायथन में आपके शुरू होने में मदद करने के लिए कुछ मॉड्यूल हैं :) यहां एक शुरुआती ब्लॉक है:

import hmac
import hashlib

def create_signature(secret_key, msg, digestmod=None):
    if digestmod is None:
        digestmod = hashlib.sha1
    mac = hmac.new(secret_key, msg=msg, digestmod=digestmod)
    return mac.digest()

एचएएमएसी और हैशलीब के लिए दस्तावेज़टन ।


"डिमिस्टिफ़िकेशन" SECRET_KEY:)

इस संदर्भ में "हस्ताक्षर" क्या है?

यह सुनिश्चित करने की एक विधि है कि कुछ सामग्री को किसी व्यक्ति या संस्था के अलावा किसी अन्य व्यक्ति द्वारा संशोधित नहीं किया गया है।

हस्ताक्षर के सबसे सरल रूपों में से एक " चेकसम " है, जो केवल पुष्टि करता है कि डेटा के दो टुकड़े समान हैं। उदाहरण के लिए, स्रोत से सॉफ़्टवेयर इंस्टॉल करते समय यह पहले पुष्टि करना महत्वपूर्ण है कि स्रोत कोड की आपकी प्रतिलिपि लेखक के समान है। ऐसा करने के लिए एक सामान्य दृष्टिकोण स्रोत को क्रिप्टोग्राफ़िक हैश फ़ंक्शन के माध्यम से चलाना और आउटपुट की तुलना प्रोजेक्ट के होम पेज पर प्रकाशित चेकसम के साथ करना है।

उदाहरण के लिए मान लें कि आप वेब दर्पण से gzipped फ़ाइल में प्रोजेक्ट के स्रोत को डाउनलोड करने वाले हैं। परियोजना के वेब पेज पर प्रकाशित SHA1 चेकसम 'eb84e8da7ca23e9f83 ....' है।

# so you get the code from the mirror
download https://mirror.example-codedump.com/source_code.tar.gz
# you calculate the hash as instructed
sha1(source_code.tar.gz)
> eb84e8da7c....

दोनों हैश समान हैं, आप जानते हैं कि आपके पास एक समान प्रतिलिपि है।

एक कुकी क्या है?

कुकीज़ पर एक व्यापक चर्चा इस प्रश्न के दायरे से परे होगी। मैं यहां एक सिंहावलोकन प्रदान करता हूं, क्योंकि न्यूनतम समझ कैसे और क्यों उपयोगी है, इसकी बेहतर समझ रखने के SECRET_KEYलिए उपयोगी हो सकती है। मैं आपको HTTP कुकीज़ पर कुछ व्यक्तिगत रीडिंग के साथ आने के लिए प्रोत्साहित करता हूं।

वेब एप्लिकेशन में एक सामान्य अभ्यास क्लाइंट (वेब ​​ब्राउज़र) को हल्के कैश के रूप में उपयोग करना है। कुकीज़ इस अभ्यास का एक कार्यान्वयन है। कुकी आमतौर पर सर्वर द्वारा HTTP हेडर के माध्यम से HTTP रिस्पॉन्स में जोड़े गए कुछ डेटा होते हैं। इसे ब्राउज़र द्वारा रखा जाता है जो बाद में अनुरोध जारी करते समय सर्वर पर वापस भेज देता है, वह भी HTTP हेडर के माध्यम से। डेटा एक कुकी में निहित अनुकरण करने के लिए क्या कहते हैं इस्तेमाल किया जा सकता statefulness, यह भ्रम कि सर्वर क्लाइंट के साथ चल रहे संबंध को बनाए रख रहा है। केवल, इस मामले में, कनेक्शन को "जीवित" रखने के लिए एक तार के बजाय, आपके पास क्लाइंट के अनुरोध को संभालने के बाद बस आवेदन की स्थिति का स्नैपशॉट है। ये स्नैपशॉट क्लाइंट और सर्वर के बीच आगे और पीछे किए जाते हैं। अनुरोध प्राप्त करने पर, सर्वर पहले क्लाइंट के साथ अपनी बातचीत के संदर्भ को फिर से स्थापित करने के लिए कुकी की सामग्री को पढ़ता है। यह तब उस संदर्भ में अनुरोध को संभालता है और क्लाइंट को प्रतिक्रिया देने से पहले, कुकी को अपडेट करता है। इस प्रकार चल रहे सत्र का भ्रम बना रहता है।

कुकी कैसा दिखता है?

एक विशिष्ट कुकी इस तरह दिखाई देगी:

name: _profile
content: uid=382|status=genie
domain: .example.com
path: /
send for: Encrypted connections only
expires: July 1 2030, 1:20:40 AM UTC

कुकीज़ किसी भी आधुनिक ब्राउज़र से उपयोग करने के लिए तुच्छ हैं। उदाहरण के लिए फ़ायरफ़ॉक्स पर प्राथमिकताएँ> गोपनीयता> इतिहास> अलग-अलग कुकीज़ निकालें

contentक्षेत्र आवेदन करने के लिए सबसे अधिक प्रासंगिक है। अन्य क्षेत्रों में प्रभाव के विभिन्न क्षेत्रों को निर्दिष्ट करने के लिए ज्यादातर मेटा निर्देश हैं।

कुकीज़ का उपयोग क्यों करें?

संक्षिप्त उत्तर प्रदर्शन है। कुकीज़ का उपयोग करना, विभिन्न डेटा स्टोर (मेमोरी कैश, फाइलें, डेटाबेस, आदि) में चीजों को देखने की आवश्यकता को कम करता है, इस प्रकार सर्वर एप्लिकेशन के पक्ष में चीजों को गति देता है। ध्यान रखें कि कुकी जितना बड़ा होता है, नेटवर्क पर पेलोड उतना ही अधिक होता है, इसलिए आप जो सर्वर पर डेटाबेस लुकअप में सेव करते हैं, वह नेटवर्क पर खो सकता है। ध्यान से विचार करें कि आपके कुकीज़ में क्या शामिल है।

कुकीज़ पर हस्ताक्षर करने की आवश्यकता क्यों होगी?

सभी प्रकार की जानकारी रखने के लिए कुकीज़ का उपयोग किया जाता है, जिनमें से कुछ बहुत संवेदनशील हो सकती हैं। वे स्वभाव से भी सुरक्षित नहीं हैं और इसके लिए आवश्यक है कि दोनों पक्षों, ग्राहक और सर्वर दोनों के लिए किसी भी तरह से सहायक सावधानियों को सुरक्षित माना जाए। कुकीज़ पर हस्ताक्षर करना विशेष रूप से उस समस्या को संबोधित करता है जिसे वे सर्वर अनुप्रयोगों को मूर्ख बनाने के प्रयासों के साथ छेड़छाड़ कर सकते हैं। अन्य प्रकार की कमजोरियों को कम करने के लिए अन्य उपाय हैं, मैं आपको कुकीज़ पर अधिक पढ़ने के लिए प्रोत्साहित करता हूं।

एक कुकी के साथ कैसे छेड़छाड़ की जा सकती है?

कुकीज़ पाठ रूप में क्लाइंट पर रहती हैं और बिना किसी प्रयास के संपादित की जा सकती हैं। आपके सर्वर एप्लिकेशन द्वारा प्राप्त एक कुकी को कई कारणों से संशोधित किया जा सकता था, जिनमें से कुछ निर्दोष नहीं हो सकते हैं। एक वेब एप्लिकेशन की कल्पना करें जो कुकीज़ और अनुदान सूचनाओं पर अपने उपयोगकर्ताओं के बारे में जानकारी के आधार पर अनुमति देता है। अगर कुकी टिंकर प्रूफ नहीं है, तो कोई भी अपनी स्थिति को "भूमिका = आगंतुक" से "भूमिका = व्यवस्थापक" तक बढ़ाने के लिए संशोधित कर सकता है और आवेदन कोई भी समझदार नहीं होगा।

SECRET_KEYकुकीज़ पर हस्ताक्षर करना क्यों आवश्यक है?

कुकीज़ को सत्यापित करना स्रोत कोड को सत्यापित करने की तुलना में थोड़ा अलग है जो पहले वर्णित है। स्रोत कोड के मामले में, मूल लेखक संदर्भ फ़िंगरप्रिंट (चेकसम) का ट्रस्टी और स्वामी होता है, जिसे सार्वजनिक रखा जाएगा। आप जिस पर भरोसा नहीं करते हैं वह स्रोत कोड है, लेकिन आप सार्वजनिक हस्ताक्षर पर भरोसा करते हैं। तो स्रोत की अपनी प्रति को सत्यापित करने के लिए आप बस अपनी गणना की गई हैश को सार्वजनिक हैश से मिलाना चाहते हैं।

कुकी के मामले में, हालांकि आवेदन हस्ताक्षर का ट्रैक नहीं रखता है, यह इसका ट्रैक रखता है SECRET_KEYSECRET_KEYसंदर्भ फ़िंगरप्रिंट है। कुकीज़ एक हस्ताक्षर के साथ यात्रा करती हैं जिसे वे वैध होने का दावा करते हैं। यहां वैधता का मतलब है कि हस्ताक्षर कुकी के मालिक द्वारा जारी किया गया था, जो कि आवेदन है, और इस मामले में, यह दावा है कि आपको भरोसा नहीं है और आपको वैधता के लिए हस्ताक्षर की जांच करने की आवश्यकता है। ऐसा करने के लिए आपको हस्ताक्षर में एक तत्व शामिल करना होगा जो केवल आपको ज्ञात हो, यही है SECRET_KEY। कोई कुकी को बदल सकता है, लेकिन चूंकि उनके पास एक वैध हस्ताक्षर की गणना करने के लिए गुप्त घटक नहीं है, इसलिए वे इसे खराब नहीं कर सकते। जैसा कि पहले कहा गया है कि इस प्रकार की फिंगरप्रिंटिंग, जहां चेकसम के शीर्ष पर एक गुप्त कुंजी भी प्रदान करता है,

सत्रों के बारे में क्या?

उनके शास्त्रीय कार्यान्वयन में सत्र कुकीज़ कि में केवल एक आईडी ले रहे हैं content, क्षेत्र session_id। सत्रों का उद्देश्य बिल्कुल हस्ताक्षरित कुकीज़ के समान है, अर्थात कुकी छेड़छाड़ को रोकने के लिए। शास्त्रीय सत्रों का एक अलग तरीका होता है। एक सत्र कुकी प्राप्त करने पर सर्वर अपने स्वयं के स्थानीय भंडारण में सत्र डेटा देखने के लिए आईडी का उपयोग करता है, जो डेटाबेस, फ़ाइल या कभी-कभी मेमोरी में कैश हो सकता है। सत्र कुकी आमतौर पर तब समाप्त हो जाती है जब ब्राउज़र बंद हो जाता है। स्थानीय संग्रहण लुकअप चरण के कारण, सत्रों का यह कार्यान्वयन आम तौर पर एक प्रदर्शन हिट होता है। हस्ताक्षरित कुकीज़ पसंदीदा विकल्प बन रही हैं और इसी तरह फ्लास्क के सत्रों को लागू किया जाता है। दूसरे शब्दों में, फ्लास्क सत्र हैंहस्ताक्षरित कुकीज़, और फ्लास्क में हस्ताक्षरित कुकीज़ का उपयोग करने के लिए बस इसके Sessionएपीआई का उपयोग करें ।

कुकीज़ भी एन्क्रिप्ट क्यों नहीं?

कभी-कभी हस्ताक्षर किए जाने से पहले कुकीज़ की सामग्री को एन्क्रिप्ट भी किया जा सकता है । ऐसा तब किया जाता है जब उन्हें ब्राउज़र से दिखाई देने के लिए संवेदनशील माना जाता है (एन्क्रिप्शन सामग्री को छुपाता है)। हालाँकि, कुकीज़ पर हस्ताक्षर करना, एक अलग ज़रूरत को संबोधित करता है, एक जहाँ ब्राउज़र पर कुकीज़ को दृश्यता और प्रयोज्य की डिग्री बनाए रखने की इच्छा होती है, जबकि यह रोकता है कि उनके साथ ध्यान रखा जाएगा।

अगर मैं बदलूं तो क्या होगा SECRET_KEY?

पिछली कुंजी के साथ हस्ताक्षरित सभी कुकीज़ को SECRET_KEYअमान्य करके आप बदल रहे हैं । जब एप्लिकेशन को एक कुकी के साथ एक अनुरोध प्राप्त होता है जिसे पिछले के साथ हस्ताक्षरित किया गया था , तो यह नए के साथ हस्ताक्षर की गणना करने का प्रयास करेगा , और दोनों हस्ताक्षर मेल नहीं खाएंगे, यह कुकी और इसके सभी डेटा को अस्वीकार कर दिया जाएगा, यह ऐसा होगा जैसे ब्राउज़र पहली बार सर्वर से कनेक्ट हो रहा है। उपयोगकर्ताओं को लॉग आउट किया जाएगा और उनकी पुरानी कुकी को भूल जाएगा, साथ ही अंदर संग्रहीत कुछ भी। ध्यान दें कि यह एक तरह से समाप्त हो चुकी कुकी को संभालने के तरीके से अलग है। यदि कोई हस्ताक्षर हस्ताक्षर करता है, तो एक समय सीमा समाप्त कुकी का पट्टा विस्तारित हो सकता है। एक अवैध हस्ताक्षर का तात्पर्य सादे अवैध कुकी से है।SECRET_KEYSECRET_KEY

इसलिए जब तक आप सभी हस्ताक्षरित कुकीज़ को अमान्य नहीं करना चाहते, SECRET_KEYविस्तारित अवधि के लिए समान रखने का प्रयास करें ।

क्या अच्छा है SECRET_KEY?

एक गुप्त कुंजी का अनुमान लगाना कठिन होना चाहिए। सत्र पर प्रलेखन यादृच्छिक कुंजी पीढ़ी के लिए एक अच्छा नुस्खा है:

>>> import os
>>> os.urandom(24)
'\xfd{H\xe5<\x95\xf9\xe3\x96.5\xd1\x01O<!\xd5\xa2\xa0\x9fR"\xa1\xa8'

आप कुंजी को कॉपी करते हैं और इसे अपने कॉन्फ़िगरेशन फ़ाइल में चिपकाते हैं SECRET_KEY

बेतरतीब ढंग से उत्पन्न एक कुंजी का उपयोग करने के लिए, आप शब्दों, संख्याओं और प्रतीकों के एक जटिल वर्गीकरण का उपयोग कर सकते हैं, शायद आपको केवल एक वाक्य में व्यवस्थित किया गया है, जो बाइट के रूप में एन्कोडेड है।

एक फ़ंक्शन के साथ सीधे सेट करें SECRET_KEYजो प्रत्येक बार एक अलग कुंजी उत्पन्न करता है जिसे यह कहा जाता है। उदाहरण के लिए, ऐसा न करें:

# this is not good
SECRET_KEY = random_key_generator()

हर बार जब आपके आवेदन को पुनः आरंभ किया जाता है, तो उसे एक नई कुंजी दी जाएगी, इस प्रकार पिछले को अमान्य कर दिया जाएगा।

इसके बजाय, एक इंटरैक्टिव अजगर खोल खोलें और कुंजी उत्पन्न करने के लिए फ़ंक्शन को कॉल करें, फिर इसे कॉपी करें और इसे कॉन्फ़िगर करें।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.