ফাইল সুরক্ষিত করতে শিখুন

Cloud Storage for Firebase Cloud Storage জন্য Firebase Security Rules নামে একটি ঘোষণামূলক পথ-ভিত্তিক নিরাপত্তা মডেল প্রদান করে যা আপনাকে আপনার ফাইলগুলিকে দ্রুত এবং সহজে সুরক্ষিত করতে দেয়।

নিয়ম বুঝুন

Cloud Storage জন্য Firebase Security Rules Cloud Storage সঞ্চিত ফাইলগুলিতে কে পড়ার এবং লেখার অ্যাক্সেস পেয়েছে, সেইসাথে ফাইলগুলি কীভাবে গঠন করা হয় এবং সেগুলিতে কী মেটাডেটা রয়েছে তা নির্ধারণ করতে ব্যবহৃত হয়৷ মৌলিক ধরনের নিয়ম হল allow বিধি, যা একটি ঐচ্ছিকভাবে নির্দিষ্ট শর্ত নির্দিষ্ট করা হলে অনুরোধগুলি read এবং write অনুমতি দেয়, উদাহরণস্বরূপ:

// If no condition is specified, the rule evaluates to true
allow read;

// Rules can optionally specify a condition
allow write: if <condition>;

// Rules can also specify multiple request methods
allow read, write: if <condition>;

ম্যাচিং পাথ

Cloud Storage Security Rules Cloud Storage ফাইল অ্যাক্সেস করতে ব্যবহৃত ফাইল পাথের match । নিয়মগুলি সঠিক পথ বা ওয়াইল্ডকার্ড পাথের match এবং নিয়মগুলিও নেস্ট করা যেতে পারে। যদি কোনো মিল নিয়ম একটি অনুরোধ পদ্ধতির অনুমতি না দেয়, বা শর্তটি false মূল্যায়ন করে, অনুরোধটি অস্বীকার করা হয়।

সঠিক মিল

// Exact match for "images/profilePhoto.png"
match /images/profilePhoto.png {
  allow write: if <condition>;
}

// Exact match for "images/croppedProfilePhoto.png"
match /images/croppedProfilePhoto.png {
  allow write: if <other_condition>;
}

নেস্টেড ম্যাচ

// Partial match for files that start with "images"
match /images {
  // Exact match for "images/profilePhoto.png"
  match /profilePhoto.png {
    allow write: if <condition>;
  }

  // Exact match for "images/croppedProfilePhoto.png"
  match /croppedProfilePhoto.png {
    allow write: if <other_condition>;
  }
}

ওয়াইল্ডকার্ড ম্যাচ

নিয়মগুলিও ওয়াইল্ডকার্ড ব্যবহার করে একটি প্যাটার্ন match জন্য ব্যবহার করা যেতে পারে। একটি ওয়াইল্ডকার্ড হল একটি নামযুক্ত ভেরিয়েবল যা একটি একক স্ট্রিং যেমন profilePhoto.png , অথবা একাধিক পাথ সেগমেন্ট, যেমন images/profilePhoto.png প্রতিনিধিত্ব করে।

ওয়াইল্ডকার্ড নামের চারপাশে কোঁকড়ানো বন্ধনী যোগ করে একটি ওয়াইল্ডকার্ড তৈরি করা হয়, যেমন {string} । ওয়াইল্ডকার্ড নামের সাথে =** যোগ করে একাধিক সেগমেন্ট ওয়াইল্ডকার্ড ঘোষণা করা যেতে পারে, যেমন {path=**} :

// Partial match for files that start with "images"
match /images {
  // Exact match for "images/*"
  // e.g. images/profilePhoto.png is matched
  match /{imageId} {
    // This rule only matches a single path segment (*)
    // imageId is a string that contains the specific segment matched
    allow read: if <condition>;
  }

  // Exact match for "images/**"
  // e.g. images/users/user:12345/profilePhoto.png is matched
  // images/profilePhoto.png is also matched!
  match /{allImages=**} {
    // This rule matches one or more path segments (**)
    // allImages is a path that contains all segments matched
    allow read: if <other_condition>;
  }
}

যদি একাধিক নিয়ম একটি ফাইলের সাথে মিলে যায়, ফলাফলটি সমস্ত নিয়ম মূল্যায়নের ফলাফলের OR । অর্থাৎ, যদি কোনো নিয়মে ফাইলটি true সাথে মূল্যায়ন করে, ফলাফলটি true হয়।

উপরের নিয়মে, "images/profilePhoto.png" ফাইলটি পড়া যাবে যদি হয় condition বা other_condition সত্যে মূল্যায়ন করা হয়, যখন ফাইল "images/users/user:12345/profilePhoto.png" শুধুমাত্র other_condition ফলাফল সাপেক্ষে .

একটি ওয়াইল্ডকার্ড ভেরিয়েবল match মধ্যে থেকে উল্লেখ করা যেতে পারে ফাইলের নাম বা পাথ অনুমোদন প্রদান করে:

// Another way to restrict the name of a file
match /images/{imageId} {
  allow read: if imageId == "profilePhoto.png";
}

Cloud Storage Security Rules ক্যাসকেড করে না, এবং নিয়মগুলি শুধুমাত্র তখনই মূল্যায়ন করা হয় যখন অনুরোধের পথটি নির্দিষ্ট নিয়মগুলির সাথে একটি পাথের সাথে মেলে৷

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

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

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

request বস্তুর বৈশিষ্ট্যগুলির একটি সম্পূর্ণ তালিকা নীচে উপলব্ধ:

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

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

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

Cloud Storage জন্য Firebase Security Rules resource অবজেক্টে ফাইল মেটাডেটা প্রদান করে, যার মধ্যে মেটাডেটার কী/মান পেয়ার থাকে যা একটি Cloud Storage অবজেক্টে দেখা যায়। ডেটা অখণ্ডতা নিশ্চিত করতে এই বৈশিষ্ট্যগুলি read বা write অনুরোধে পরিদর্শন করা যেতে পারে।

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

resource অবজেক্টের বৈশিষ্ট্যগুলির একটি সম্পূর্ণ তালিকা নীচে উপলব্ধ:

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

request.resourcegeneration , metageneration , etag , timeCreated , এবং updated ব্যতীত এই সবই রয়েছে।

সম্পূর্ণ উদাহরণ

এটি সব একসাথে রেখে, আপনি একটি চিত্র স্টোরেজ সমাধানের জন্য নিয়মগুলির একটি সম্পূর্ণ উদাহরণ তৈরি করতে পারেন:

service firebase.storage {
 match /b/{bucket}/o {
   match /images {
     // Cascade read to any image type at any path
     match /{allImages=**} {
       allow read;
     }

     // Allow write files to the path "images/*", subject to the constraints:
     // 1) File is less than 5MB
     // 2) Content type is an image
     // 3) Uploaded content type matches existing content type (if it exists)
     // 4) File name (stored in imageId wildcard variable) is less than 32 characters
     match /{imageId} {
       allow write: if request.resource.size < 5 * 1024 * 1024
                    && request.resource.contentType.matches('image/.*')
                    && (resource == null || request.resource.contentType == resource.contentType)
                    && imageId.size() < 32
     }
   }
 }
}

এখন, ব্যবহারকারী সুরক্ষা বিভাগে দানাদার প্রতি ব্যবহারকারী ফাইল অ্যাক্সেসের জন্য Firebase Authentication একীভূত করি।