ফ্লাস্ক অ্যাপ্লিকেশনটিকে সরান


127

যদি app.secret_keyসেট না করা থাকে তবে ফ্লাস্ক আপনাকে সেশন অভিধান সেট করতে বা অ্যাক্সেস করার অনুমতি দেবে না।

এই ফ্ল্যাশ ব্যবহারকারী নির্দেশিকাতে বিষয়টিতে যা বলতে হবে তা সমস্তই ।

আমি ওয়েব বিকাশে খুব নতুন এবং কোনও সুরক্ষা সামগ্রী কীভাবে / কেন কাজ করে তা আমার কোনও ধারণা নেই। আমি বুঝতে চাই ফ্লাস্ক হুডের নীচে কী করছে।

  • ফ্লাস্ক কেন আমাদের এই secret_keyসম্পত্তি সেট করতে বাধ্য করে ?
  • ফ্লাস্ক কিভাবে secret_keyসম্পত্তি ব্যবহার করে ?

উত্তর:


102

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

secret_keySECRET_KEYকনফিগারেশন কীর জন্য নিছক মান সেট , বা আপনি এটি সরাসরি সেট করতে পারেন।

দ্রুতশুরু মধ্যে দায়রা অধ্যায় কি সার্ভার সাইড গোপন ধরনের সেট উচিত ভাল, বিবেকী পরামর্শ হয়েছে।

এনক্রিপশন গোপন উপর নির্ভর করে; আপনি যদি এনক্রিপশনটি ব্যবহারের জন্য কোনও সার্ভার সাইড সিক্রেট সেট না করেন তবে প্রত্যেকে আপনার এনক্রিপশনটি ভেঙে ফেলতে সক্ষম হবে; এটি আপনার কম্পিউটারের পাসওয়ার্ডের মতো। গোপন প্লাস ডেটা-টু-সাইন একটি স্বাক্ষরযুক্ত স্ট্রিং তৈরি করতে ব্যবহৃত হয়, একটি ক্রিপ্টোগ্রাফিক হ্যাশিং অ্যালগরিদম ব্যবহার করে একটি হার্ড-টু-পুনরায় তৈরি করা মান ; কেবলমাত্র যদি আপনার কাছে একই একই গোপনীয়তা থাকে এবং মূল ডেটা আপনি এই মানটি পুনরায় তৈরি করতে পারেন, ফ্লস্ককে অনুমতি ব্যতীত কোনও কিছু পরিবর্তন করা হয়েছে কিনা তা সনাক্ত করতে detect যেহেতু এই ফ্ল্যাশ ক্লায়েন্টকে প্রেরণ করা ডেটার সাথে গোপনীয়তা কখনই অন্তর্ভুক্ত হয় না, তাই কোনও ক্লায়েন্ট সেশন ডেটা নিয়ে ছাপ ফেলতে পারে না এবং একটি নতুন, বৈধ স্বাক্ষর উত্পাদন আশা করে।

ফ্লাস্ক সমস্ত কঠোর পরিশ্রম করতে itsdangerousলাইব্রেরি ব্যবহার করে ; সেশনগুলি কাস্টমাইজড জেএসএন সিরিয়ালাইজার সহ itsdangerous.URLSafeTimedSerializerক্লাসটি ব্যবহার করে ।


91

নীচের উত্তরটি মূলত স্বাক্ষরিত কুকিজের সাথে সম্পর্কিত , সেশনগুলির ধারণার একটি বাস্তবায়ন (ওয়েব অ্যাপ্লিকেশনগুলিতে ব্যবহৃত হিসাবে)। ফ্লাস্ক সাধারণ (স্বাক্ষরযুক্ত) কুকিজ (মাধ্যমে request.cookiesএবং response.set_cookie()) এবং স্বাক্ষরিত কুকিজ (মাধ্যমে flask.session) উভয়ই সরবরাহ করে । উত্তরের দুটি অংশ রয়েছে, প্রথমটি কীভাবে একটি স্বাক্ষরিত কুকি তৈরি হয় তা বর্ণনা করে এবং দ্বিতীয়টি কিউএ আকারে উপস্থাপিত হয় যা প্রকল্পের বিভিন্ন দিক সম্বোধন করে। উদাহরণগুলির জন্য ব্যবহৃত সিনট্যাক্সটি পাইথন 3, তবে ধারণাগুলি পূর্ববর্তী সংস্করণগুলিতেও প্রযোজ্য।

কি SECRET_KEY(অথবা কিভাবে একটি স্বাক্ষরিত কুকি তৈরি করতে)?

কুকি সাইন ইন কুকি টেম্পারিং বিরুদ্ধে একটি প্রতিরোধমূলক ব্যবস্থা। কোনও কুকিতে স্বাক্ষর করার প্রক্রিয়া চলাকালীন, এটি SECRET_KEYএকটি জাতীয় ব্যবহার করা হয় যেমন একটি "নুন" পাসওয়ার্ড হ্যাশ করার আগে কীভাবে ব্যবহৃত হত m ধারণাটির একটি (বন্যভাবে) সরলিকৃত বর্ণনা এখানে। উদাহরণগুলিতে কোডটি বোঝানো হয়েছে rative অনেকগুলি পদক্ষেপ বাদ দেওয়া হয়েছে এবং সমস্ত কার্যকারিতা আসলে বিদ্যমান নেই। এখানে লক্ষ্যটি হ'ল সাধারণ ধারণাটি বোঝার জন্য, প্রকৃত বাস্তবায়নগুলি আরও কিছুটা জড়িত থাকবে। এছাড়াও, মনে রাখবেন যে ফ্লাস্ক আপনার জন্য ব্যাকগ্রাউন্ডে এটি বেশিরভাগ ক্ষেত্রে করে। সুতরাং, আপনার কুকিতে মান নির্ধারণের পাশাপাশি (সেশন এপিআইয়ের মাধ্যমে) এবং এটি সরবরাহ করার পাশাপাশি 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....

(4) এখন 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 --> 

ব্রাউজার থেকে কুকি পাওয়ার পরে:

(৫) যখন ব্রাউজারটি এই কুকিটি সার্ভারে 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)

()) SECRET_KEY৩ য় ধাপের মতো একই পদ্ধতি ব্যবহার করে স্বাক্ষরটি পুনরায় গণনার জন্য অ্যাপ্লিকেশনটির সাথে মূল কুকি ব্যবহার করুন।

# 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 বলা হয় এবং এটি উপরের সাধারণ ধাপে ধাপের চেয়ে কিছুটা বেশি জড়িত। সাধারণ ধারণাটি একই, তবে এই আলোচনার পরিধি ছাড়িয়ে যাওয়ার কারণে, গণনার সিরিজটি আরও বেশি জটিল। আপনি যদি এখনও ডিআইওয়াই কারুকাজে আগ্রহী হন, তবে এটি সাধারণত হয়, আপনাকে শুরু করতে সাহায্য করার জন্য পাইথনের কিছু মডিউল রয়েছে :) এখানে একটি প্রারম্ভিক ব্লক রয়েছে:

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()

জন্য documentaton hmac এবং hashlib


এর "ক্ষয়ক্ষতি" SECRET_KEY:)

এই প্রসঙ্গে একটি "স্বাক্ষর" কী?

এটি নিশ্চিত করার একটি পদ্ধতি যে কোনও ব্যক্তি বা এটির জন্য অনুমোদিত সত্তা ব্যতীত অন্য কারও দ্বারা কোনও সামগ্রী সংশোধিত হয়নি।

স্বাক্ষরের সহজতম ফর্মগুলির মধ্যে একটি হ'ল " চেকসাম ", যা কেবলমাত্র যাচাই করে যে দুটি টুকরোগুলি একই রকম are উদাহরণস্বরূপ, উত্স থেকে সফ্টওয়্যার ইনস্টল করার সময় প্রথমে আপনার উত্স কোডের অনুলিপিটি লেখকের অনুরূপ কিনা তা নিশ্চিত হওয়া গুরুত্বপূর্ণ। এটি করার একটি সাধারণ পদ্ধতি হ'ল ক্রিপ্টোগ্রাফিক হ্যাশ ফাংশনটির মাধ্যমে উত্সটি চালানো এবং প্রকল্পের হোম পৃষ্ঠায় প্রকাশিত চেকসামের সাথে আউটপুটটির তুলনা করা।

উদাহরণস্বরূপ বলা যাক যে আপনি একটি ওয়েব আয়না থেকে একটি জিপিড ফাইলটিতে একটি প্রকল্পের উত্স ডাউনলোড করতে চলেছেন। প্রকল্পের ওয়েব পৃষ্ঠায় প্রকাশিত 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 শিরোনামগুলির মাধ্যমে। তথ্য একটি কুকি অন্তর্ভুক্ত অনুকরণ কি বলা হচ্ছে ব্যবহার করা যেতে পারে 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_KEY। এটি SECRET_KEYহল রেফারেন্স ফিঙ্গারপ্রিন্ট। কুকিজ একটি স্বাক্ষর নিয়ে ভ্রমণ করে যে তারা বৈধ বলে দাবি করে। আইনতত্ত্বটির অর্থ হ'ল স্বাক্ষরটি কুকির মালিক দ্বারা জারি করা হয়েছিল, এটিই অ্যাপ্লিকেশন এবং এই ক্ষেত্রে এটি দাবি করে যে আপনি বিশ্বাস করেন না এবং আপনাকে বৈধতার জন্য স্বাক্ষর পরীক্ষা করতে হবে check আপনি স্বাক্ষর শুধুমাত্র আপনি পরিচিত একটি উপাদান যে অন্তর্ভুক্ত করতে হবে কাজের জন্য SECRET_KEY। কেউ একটি কুকি পরিবর্তন করতে পারে, তবে যেহেতু বৈধ স্বাক্ষরটি সঠিকভাবে গণনা করার মতো গোপন উপাদান তাদের কাছে নেই তারা এটিকে ছলনা করতে পারে না। কিছুটা আগে এই ধরণের ফিঙ্গারপ্রিন্টিংয়ের আগে যেমন বলা হয়েছে, যেখানে চেকসামের উপরে একটি গোপন কীও সরবরাহ করে,

সেশনস সম্পর্কে কি?

তাদের শাস্ত্রীয় বাস্তবায়নের সেশনগুলি কুকিজ যা contentক্ষেত্রের মধ্যে কেবল একটি আইডি বহন করে session_id। সেশনের উদ্দেশ্য হ'ল স্বাক্ষরিত কুকিজের সমান, যেমন কুকি টেম্পারিং প্রতিরোধ করা। যদিও ক্লাসিকাল সেশনগুলির আলাদা পদ্ধতি রয়েছে। একটি সেশন কুকি পাওয়ার পরে সার্ভারটি তার নিজস্ব স্থানীয় স্টোরেজে সেশন ডেটা সন্ধান করতে আইডি ব্যবহার করে যা কোনও ডাটাবেস, একটি ফাইল বা মেমরির মাঝে মাঝে ক্যাশে হতে পারে। ব্রাউজারটি বন্ধ হয়ে গেলে সাধারণত সেশন কুকির মেয়াদ শেষ হয়ে যায়। স্থানীয় স্টোরেজ দেখার ধাপের কারণে, সেশনের এই প্রয়োগটি সাধারণত একটি কার্যকারিতা হিট করে। স্বাক্ষরিত কুকিগুলি একটি পছন্দসই বিকল্প হয়ে উঠছে এবং এভাবেই ফ্লাস্কের সেশনগুলি কার্যকর করা হয়। অন্য কথায়, ফ্লাস্ক সেশনগুলি হয়স্বাক্ষরিত কুকিজ, এবং ফ্লাস্কে স্বাক্ষরিত কুকিগুলি ব্যবহার করতে কেবল এর Sessionএপিআই ব্যবহার করুন ।

কুকিগুলিও এনক্রিপ্ট করবেন না কেন?

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

আমি পরিবর্তন হলে কি হবে SECRET_KEY?

পরিবর্তন করে SECRET_KEYআপনি পূর্ববর্তী কী দিয়ে স্বাক্ষরিত সমস্ত কুকিজকে অবৈধ করছেন । যখন অ্যাপ্লিকেশনটি কোনও কুকির সাথে অনুরোধটি পেয়েছে যা আগেরটির সাথে স্বাক্ষরিত হয়েছিল SECRET_KEY, তখন এটি নতুনটির সাথে স্বাক্ষরটি গণনা করার চেষ্টা করবে SECRET_KEYএবং উভয় স্বাক্ষর মিলবে না, এই কুকি এবং এর সমস্ত তথ্য প্রত্যাখ্যান করা হবে, এটি এমন হবে যেন ব্রাউজারটি প্রথমবার সার্ভারের সাথে সংযুক্ত হচ্ছে। ব্যবহারকারীদের লগ আউট করা হবে এবং ভিতরে পুরানো কুকি সহ তাদের পুরানো কুকি ভুলে যাবে। মনে রাখবেন যে মেয়াদোত্তীর্ণ কুকি হ্যান্ডল করার থেকে এটি আলাদা different মেয়াদোত্তীর্ণ কুকিটির স্বাক্ষরটি চেক আউট হলে এর লিজ বাড়ানো থাকতে পারে। একটি অবৈধ স্বাক্ষর কেবল একটি সাধারণ অবৈধ কুকিকে বোঝায়।

সুতরাং আপনি যদি স্বাক্ষরিত সমস্ত কুকিজ অকার্যকর না করতে চান, তবে 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()

প্রতিবার আপনার অ্যাপ্লিকেশনটি পুনরায় চালু করা হলে এটি একটি নতুন কী দেওয়া হবে, যাতে পূর্ববর্তীটি অকার্যকর হয়।

পরিবর্তে, একটি ইন্টারেক্টিভ পাইথন শেলটি খুলুন এবং কী উত্পন্ন করার জন্য ফাংশনটিতে কল করুন, তারপরে এটি অনুলিপি করুন এবং এটি কনফিগে আটকে দিন।

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