Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

ফায়ারবেস ক্লাউড স্টোরেজ সুরক্ষা বিধিগুলিতে শর্তাদি ব্যবহার করুন

এই নির্দেশিকাটি তৈরী করে উপর Firebase সিকিউরিটি রুলস ভাষা কোর সিনট্যাক্স শিখতে ক্লাউড স্টোরেজ জন্য আপনার Firebase সিকিউরিটি রুলস শর্ত যোগ করার জন্য কিভাবে দেখানোর জন্য গাইড।

ক্লাউড স্টোরেজ সিকিউরিটি রুলস প্রাথমিক বিল্ডিং ব্লক অবস্থা। একটি শর্ত হল একটি বুলিয়ান অভিব্যক্তি যা নির্ধারণ করে যে একটি নির্দিষ্ট অপারেশন অনুমোদিত বা অস্বীকার করা উচিত। সাধারণ নিয়ম জন্য ব্যবহার true এবং false অবস্থা লিটারেল prefectly ভাল কাজ করে। কিন্তু ক্লাউড স্টোরেজ ভাষার জন্য ফায়ারবেস সিকিউরিটি রুলস আপনাকে আরও জটিল শর্তাবলী লেখার উপায় দেয় যা পারে:

  • ব্যবহারকারীর প্রমাণীকরণ পরীক্ষা করুন
  • ইনকামিং ডেটা যাচাই করুন

প্রমাণীকরণ

ক্লাউড স্টোরেজের জন্য ফায়ারবেস সিকিউরিটি রুলস ক্লাউড স্টোরেজে শক্তিশালী ব্যবহারকারী ভিত্তিক প্রমাণীকরণ প্রদানের জন্য ফায়ারবেস প্রমাণীকরণের সাথে একীভূত হয়। এটি একটি Firebase প্রমাণীকরণ টোকেনের দাবির উপর ভিত্তি করে দানাদার অ্যাক্সেস নিয়ন্ত্রণের অনুমতি দেয়।

যখন একটি ক্লাউড স্টোরেজ বিরুদ্ধে অনুরোধ প্রমাণীকৃত ব্যবহারকারী সম্পাদন করে, request.auth পরিবর্তনশীল ব্যবহারকারীর দিয়ে পূর্ণ করা uid ( request.auth.uid ) ভাল Firebase প্রমাণীকরণ JWT (দাবি যত request.auth.token )।

উপরন্তু, যখন কাস্টম প্রমাণীকরণ ব্যবহার করে, অতিরিক্ত দাবির মধ্যে নিবেশ করা হয় request.auth.token ক্ষেত্র।

একটি অবিশ্বস্ত ব্যবহারকারী একটি অনুরোধ সঞ্চালিত হলে, request.auth পরিবর্তনশীল null

এই ডেটা ব্যবহার করে, ফাইলগুলি সুরক্ষিত করার জন্য প্রমাণীকরণ ব্যবহার করার বেশ কয়েকটি সাধারণ উপায় রয়েছে:

  • সার্বজনীন: উপেক্ষা করা request.auth
  • ব্যক্তিগত প্রমাণীকৃত: চেক request.auth নয় null
  • ব্যবহারকারী ব্যক্তিগত: চেক request.auth.uid একটি পাথ সমান uid
  • গ্রুপ প্রাইভেট: কাস্টম টোকেনের দাবিগুলি একটি নির্বাচিত দাবির সাথে মেলে, অথবা একটি মেটাডেটা ক্ষেত্র বিদ্যমান কিনা তা দেখতে ফাইল মেটাডেটা পড়ুন

পাবলিক

কোন নিয়ম যে বিবেচনা না request.auth প্রসঙ্গ একটি বিবেচনা করা যেতে পারে public , নিয়ম যেহেতু এটি ব্যবহারকারীর প্রমাণীকরণ প্রসঙ্গ বিবেচনা করে না। এই নিয়মগুলি পাবলিক ডেটা যেমন গেম সম্পদ, সাউন্ড ফাইল বা অন্যান্য স্ট্যাটিক সামগ্রী প্রকাশের জন্য দরকারী হতে পারে।

// Anyone to read a public image if the file is less than 100kB
// Anyone can upload a public file ending in '.txt'
match /public/{imageId} {
  allow read: if resource.size < 100 * 1024;
  allow write: if imageId.matches(".*\\.txt");
}

অনুমোদিত ব্যক্তিগত

নির্দিষ্ট কিছু ক্ষেত্রে, আপনি আপনার অ্যাপ্লিকেশনের সকল অনুমোদিত ব্যবহারকারীদের দ্বারা ডেটা দেখতে চাইবেন, কিন্তু অননুমোদিত ব্যবহারকারীদের দ্বারা নয়। যেহেতু request.auth পরিবর্তনশীল null সব অবিশ্বস্ত ব্যবহারকারীদের জন্য, সমস্ত আপনাকে যা করতে হবে চেক request.auth পরিবর্তনশীল অর্ডার প্রমাণীকরণের প্রয়োজন হবে বিদ্যমান:

// Require authentication on all internal image reads
match /internal/{imageId} {
  allow read: if request.auth != null;
}

ব্যবহারকারী ব্যক্তিগত

দ্বারা পর্যন্ত সবচেয়ে সাধারণ ব্যবহারের ক্ষেত্রে request.auth ব্যক্তিগত নথি পড়া আপলোড প্রোফাইল ছবি থেকে: তাদের ফাইল উপর ঝুরা অনুমতিসহ স্বতন্ত্র ব্যবহারকারীর প্রদান করা হবে।

যেহেতু Cloud Storage এ ফাইল ফাইলের একটি পূর্ণ "পথ" আছে, সব একটি ফাইল একটি ব্যবহারকারী দ্বারা নিয়ন্ত্রিত করতে লাগে ফাইলের নাম উপসর্গ অনন্য, ব্যবহারকারী শনাক্তকরণ তথ্য এক টুকরা (যেমন ব্যবহারকারীর হিসাবে uid ) যে চেক করা যাবে যখন নিয়ম মূল্যায়ন করা হয়:

// Only a user can upload their profile picture, but anyone can view it
match /users/{userId}/profilePicture.png {
  allow read;
  allow write: if request.auth.uid == userId;
}

গ্রুপ প্রাইভেট

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

  • পুদিনা একটি Firebase প্রমাণীকরণ কাস্টম টোকেন যে (যেমন একটি গোষ্ঠী ID) একটি গ্রুপ সদস্য সম্পর্কে অতিরিক্ত তথ্য উপস্থিত রয়েছে
  • (যেমন একটি গ্রুপ আইডি বা অনুমোদিত তালিকা যেমন গ্রুপ তথ্য অন্তর্ভুক্ত করুন uid মধ্যে গুলি) ফাইলগুলির মেটাডেটা

একবার এই ডেটা টোকেন বা ফাইল মেটাডেটাতে সংরক্ষিত হলে, এটি একটি নিয়মের মধ্যে থেকে উল্লেখ করা যেতে পারে:

// Allow reads if the group ID in your token matches the file metadata's `owner` property
// Allow writes if the group ID is in the user's custom token
match /files/{groupId}/{fileName} {
  allow read: if resource.metadata.owner == request.auth.token.groupId;
  allow write: if request.auth.token.groupId == groupId;
}

মূল্যায়নের অনুরোধ করুন

আপলোড, ডাউনলোড, মেটাডেটা পরিবর্তন এবং মোছাগুলিকে ব্যবহার মূল্যায়ন করা হয় request ক্লাউড স্টোরেজ পাঠানো হয়েছে। ব্যবহারকারীর অনন্য আইডি এবং মধ্যে Firebase প্রমাণীকরণ পে লোড ছাড়াও request.auth বস্তুর উপরে বর্ণিত হিসাবে, request পরিবর্তনশীল ফাইল পাথ যেখানে অনুরোধ সম্পাদিত হচ্ছে, যখন অনুরোধ গৃহীত হয়, এবং নতুন ধারণ resource মান যদি অনুরোধ একটি লেখা। HTTP হেডার এবং প্রমাণীকরণ অবস্থাও অন্তর্ভুক্ত করা হয়েছে।

request বস্তুর ব্যবহারকারীর অনন্য আইডি এবং মধ্যে Firebase প্রমাণীকরণ পে লোড রয়েছে request.auth বস্তু, যার আরও ব্যাখ্যা করা হবে ব্যবহারকারী-ভিত্তিক নিরাপত্তা ডক্সের অধ্যায়।

এ সম্পত্তি এর একটি পূর্ণ তালিকা request বস্তুর নিচে পাওয়া যায়:

সম্পত্তি প্রকার বর্ণনা
auth মানচিত্র <string, string> একটি ব্যবহারকারী লগ ইন থাকলেও, উপলব্ধ যখন uid , ব্যবহারকারীর অনন্য আইডি, এবং token , Firebase প্রমাণীকরণ JWT দাবির একটি মানচিত্র। অন্যথায়, এটি হতে হবে null
params মানচিত্র <string, string> অনুরোধের ক্যোয়ারী প্যারামিটার সম্বলিত মানচিত্র।
path পথ একটি path পাথ অনুরোধে সঞ্চালিত হচ্ছে উপস্থাপন করে।
resource মানচিত্র <string, string> নতুন রিসোর্স মান, শুধুমাত্র উপস্থিত write অনুরোধ।
time টাইমস্ট্যাম্প একটি টাইমস্ট্যাম্প যা সার্ভারের সময় উপস্থাপন করে অনুরোধটি মূল্যায়ন করা হয়।

সম্পদ মূল্যায়ন

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

ক্লাউড স্টোরেজ জন্য Firebase সিকিউরিটি রুলস ফাইল মেটাডাটা প্রদান করে resource বস্তু, যার মেটাডেটা চাবি / মান জোড়া একটি ক্লাউড স্টোরেজ বস্তু surfaced ধারণ করে। এই বৈশিষ্ট্য পরিদর্শন করা যেতে পারে read বা write অনুরোধ তথ্য অখণ্ডতা নিশ্চিত করতে হবে।

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

এ সম্পত্তি এর একটি পূর্ণ তালিকা resource বস্তুর নিচে পাওয়া যায়:

সম্পত্তি প্রকার বর্ণনা
name স্ট্রিং বস্তুর পুরো নাম
bucket স্ট্রিং এই বস্তুর নাম যে বস্তুর মধ্যে থাকে।
generation int Google মেঘ সংগ্রহস্থল বস্তুর প্রজন্ম এই বস্তুর।
metageneration int Google মেঘ সংগ্রহস্থল বস্তুর metageneration এই বস্তুর।
size int বাইটে বস্তুর আকার।
timeCreated টাইমস্ট্যাম্প একটি বস্তু তৈরি হওয়ার সময়কে উপস্থাপন করে একটি টাইমস্ট্যাম্প।
updated টাইমস্ট্যাম্প একটি বস্তু সর্বশেষ আপডেট করা সময় প্রতিনিধিত্বকারী একটি টাইমস্ট্যাম্প।
md5Hash স্ট্রিং বস্তুর একটি MD5 হ্যাশ।
crc32c স্ট্রিং বস্তুর একটি crc32c হ্যাশ।
etag স্ট্রিং এই বস্তুর সাথে যুক্ত ইটাগ।
contentDisposition স্ট্রিং এই বস্তুর সাথে যুক্ত বিষয়বস্তু স্বভাব।
contentEncoding স্ট্রিং এই বস্তুর সাথে সম্পর্কিত বিষয়বস্তু এনকোডিং।
contentLanguage স্ট্রিং এই বস্তুর সাথে যুক্ত বিষয়বস্তু ভাষা।
contentType স্ট্রিং এই বস্তুর সাথে যুক্ত বিষয়বস্তুর ধরন।
metadata মানচিত্র <string, string> কী/মান জোড়া অতিরিক্ত, ডেভেলপার নির্দিষ্ট কাস্টম মেটাডেটা।

request.resource বাদ দিয়ে এই সব রয়েছে generation , metageneration , etag , timeCreated , এবং updated

ডেটা যাচাই করুন

ক্লাউড স্টোরেজ জন্য Firebase সিকিউরিটি রুলস এছাড়াও ডেটা যাচাইকরণ ব্যবহার করা যেতে পারে, ফাইল নাম এবং পাথ সেইসাথে যেমন ফাইলগুলির মেটাডেটা বৈশিষ্ট্য যাচাই সহ contentType এবং size

service firebase.storage {
  match /b/{bucket}/o {
    match /images/{imageId} {
      // Only allow uploads of any image file that's less than 5MB
      allow write: if request.resource.size < 5 * 1024 * 1024
                   && request.resource.contentType.matches('image/.*');
    }
  }
}

কাস্টম ফাংশন

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

  • কার্যাবলী শুধুমাত্র একটি একক ধারণ করতে পারে return বিবৃতি। তারা কোন অতিরিক্ত যুক্তি ধারণ করতে পারে না। উদাহরণস্বরূপ, তারা লুপ চালাতে পারে না বা বাহ্যিক পরিষেবাগুলিতে কল করতে পারে না।
  • ফাংশনগুলি স্বয়ংক্রিয়ভাবে ফাংশন এবং ভেরিয়েবলগুলিকে যে সুযোগে সংজ্ঞায়িত করা হয়েছে সেখান থেকে অ্যাক্সেস করতে পারে। উদাহরণস্বরূপ, একটি ফাংশন মধ্যে সংজ্ঞায়িত service firebase.storage সুযোগ অ্যাক্সেস আছে resource পরিবর্তনশীল, এবং ক্লাউড Firestore শুধুমাত্র আপনিই দেখতে বিল্ট-ইন ফাংশন যেমন get() এবং exists()
  • ফাংশন অন্যান্য ফাংশন কল করতে পারে কিন্তু recurse নাও হতে পারে। মোট কল স্ট্যাকের গভীরতা 10 এর মধ্যে সীমাবদ্ধ।
  • সংস্করণে rules2 , ফাংশন ব্যবহার করে ভেরিয়েবল নির্ধারণ করতে পারবেন let শব্দ। ফাংশনগুলোতে লেট বাইন্ডিং এর সংখ্যা থাকতে পারে, কিন্তু রিটার্ন স্টেটমেন্ট দিয়ে শেষ করতে হবে।

একটি ফাংশন সংজ্ঞায়িত করা হয় function শব্দ এবং শূন্য বা তার বেশি আর্গুমেন্ট লাগে। উদাহরণস্বরূপ, আপনি উপরের উদাহরণগুলিতে ব্যবহৃত দুটি ধরণের শর্তকে একক ফাংশনে একত্রিত করতে চাইতে পারেন:

service firebase.storage {
  match /b/{bucket}/o {
    // True if the user is signed in or the requested data is 'public'
    function signedInOrPublic() {
      return request.auth.uid != null || resource.data.visibility == 'public';
    }
    match /images/{imageId} {
      allow read, write: if signedInOrPublic();
    }
    match /mp3s/{mp3Ids} {
      allow read: if signedInOrPublic();
    }
  }
}

আপনার ফায়ারবেস সিকিউরিটি রুলস -এ ফাংশন ব্যবহার করলে সেগুলি আরও রক্ষণাবেক্ষণযোগ্য হয় কারণ আপনার নিয়মগুলির জটিলতা বৃদ্ধি পায়।

পরবর্তী পদক্ষেপ

শর্তগুলির এই আলোচনার পরে, আপনি বিধিগুলির আরও পরিশীলিত উপলব্ধি পেয়েছেন এবং এর জন্য প্রস্তুত:

মূল ব্যবহারের ক্ষেত্রে কীভাবে পরিচালনা করতে হয় তা শিখুন এবং নিয়মগুলি বিকাশ, পরীক্ষা এবং স্থাপনের জন্য কর্মপ্রবাহ শিখুন: