ক্লাউড স্টোরেজ ভাষার জন্য ফায়ারবেস নিরাপত্তা নিয়মের মূল সিনট্যাক্স শিখুন

Cloud Storage জন্য Firebase Security Rules আপনাকে Cloud Storage বাকেটে সংরক্ষিত বস্তুর অ্যাক্সেস নিয়ন্ত্রণ করতে দেয়। নমনীয় রুলস সিনট্যাক্স আপনাকে আপনার Cloud Storage বাকেটে সমস্ত লেখা থেকে শুরু করে একটি নির্দিষ্ট ফাইলের অপারেশন পর্যন্ত যেকোনো অপারেশন নিয়ন্ত্রণ করার জন্য নিয়ম তৈরি করতে দেয়।

এই নির্দেশিকাটি সম্পূর্ণ নিয়ম সেট তৈরির জন্য Cloud Storage Security Rules মৌলিক বাক্য গঠন এবং কাঠামো বর্ণনা করে।

পরিষেবা এবং ডাটাবেস ঘোষণা

Cloud Storage জন্য Firebase Security Rules সর্বদা নিম্নলিখিত ঘোষণা দিয়ে শুরু হয়:

service firebase.storage {
    // ...
}

service firebase.storage ঘোষণাটি Cloud Storage নিয়মগুলিকে অন্তর্ভুক্ত করে, Cloud Storage Security Rules এবং Cloud Firestore মতো অন্যান্য পণ্যের নিয়মের মধ্যে দ্বন্দ্ব প্রতিরোধ করে।

পঠন/লেখার মৌলিক নিয়ম

মৌলিক নিয়মগুলির মধ্যে রয়েছে Cloud Storage বাকেট শনাক্তকারী একটি match স্টেটমেন্ট, একটি ফাইলের নাম উল্লেখ করে একটি ম্যাচ স্টেটমেন্ট এবং নির্দিষ্ট ডেটা পড়ার সময় অনুমতি দেওয়া হয় এমন একটি allow এক্সপ্রেশন। allow এক্সপ্রেশনগুলি জড়িত অ্যাক্সেস পদ্ধতিগুলি (যেমন, পড়া, লেখা) এবং কোন শর্তগুলির অধীনে অ্যাক্সেস অনুমোদিত বা অস্বীকৃত তা নির্দিষ্ট করে।

আপনার ডিফল্ট রুলসেটের মধ্যে, প্রথম match স্টেটমেন্টটি আপনার প্রোজেক্টের সমস্ত বাকেটের ক্ষেত্রে প্রযোজ্য নিয়মগুলি নির্দেশ করার জন্য একটি {bucket} ওয়াইল্ডকার্ড এক্সপ্রেশন ব্যবহার করে। আমরা পরবর্তী বিভাগে ওয়াইল্ডকার্ড ম্যাচের ধারণাটি আরও আলোচনা করব।

service firebase.storage {
  // The {bucket} wildcard indicates we match files in all Cloud Storage buckets
  match /b/{bucket}/o {
    // Match filename
    match /filename {
      allow read: if <condition>;
      allow write: if <condition>;
    }
  }
}

সকল ম্যাচ স্টেটমেন্ট ফাইলের দিকে নির্দেশ করে। একটি ম্যাচ স্টেটমেন্ট একটি নির্দিষ্ট ফাইলের দিকে নির্দেশ করতে পারে, যেমন match /images/profilePhoto.png

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

একটি ফাইলের দিকে নির্দেশ করার পাশাপাশি, Rules ওয়াইল্ডকার্ড ব্যবহার করে যেকোনো ফাইলের দিকে নির্দেশ করতে পারে যার নামে একটি নির্দিষ্ট স্ট্রিং প্রিফিক্স আছে, যার মধ্যে স্ল্যাশও অন্তর্ভুক্ত, যেমন match /images/{imageId}

উপরের উদাহরণে, ম্যাচ স্টেটমেন্টটি {imageId} ওয়াইল্ডকার্ড সিনট্যাক্স ব্যবহার করে। এর অর্থ হল, এই নিয়মটি /images/ নামের শুরুতে থাকা যেকোনো ফাইলের ক্ষেত্রে প্রযোজ্য, যেমন /images/profilePhoto.png অথবা /images/croppedProfilePhoto.png । যখন ম্যাচ স্টেটমেন্টে allow এক্সপ্রেশনগুলি মূল্যায়ন করা হয়, তখন imageId ভেরিয়েবলটি profilePhoto.png অথবা croppedProfilePhoto.png এর মতো ইমেজ ফাইলের নাম অনুসারে সমাধান হবে।

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

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

শ্রেণিবদ্ধ তথ্য

যেমনটি আমরা আগেই বলেছি, Cloud Storage বাকেটের ভিতরে কোনও শ্রেণিবদ্ধ কাঠামো থাকে না। কিন্তু একটি ফাইল নামকরণ কনভেনশন ব্যবহার করে, যা প্রায়শই ফাইলের নামগুলিতে স্ল্যাশ অন্তর্ভুক্ত করে, আমরা এমন একটি কাঠামো অনুকরণ করতে পারি যা দেখতে ডিরেক্টরি এবং সাব-ডিরেক্টরির একটি নেস্টেড সিরিজের মতো। Firebase Security Rules এই ফাইলের নামগুলির সাথে কীভাবে ইন্টারঅ্যাক্ট করে তা বোঝা গুরুত্বপূর্ণ।

/images/ স্টেম দিয়ে শুরু হওয়া নাম সহ ফাইলের একটি সেটের পরিস্থিতি বিবেচনা করুন। Firebase Security Rules শুধুমাত্র মিলিত ফাইলের নামের ক্ষেত্রে প্রযোজ্য, তাই /images/ স্টেমে সংজ্ঞায়িত অ্যাক্সেস নিয়ন্ত্রণগুলি /mp3s/ স্টেমের ক্ষেত্রে প্রযোজ্য নয়। পরিবর্তে, বিভিন্ন ফাইলের নাম প্যাটার্নের সাথে মেলে এমন স্পষ্ট নিয়ম লিখুন:

service firebase.storage {
  match /b/{bucket}/o {
    match /images/{imageId} {
      allow read, write: if <condition>;
    }

    // Explicitly define rules for the 'mp3s' pattern
    match /mp3s/{mp3Id} {
      allow read, write: if <condition>;
    }
  }
}

match স্টেটমেন্ট নেস্ট করার সময়, ভেতরের match স্টেটমেন্টের পাথ সর্বদা বাইরের match স্টেটমেন্টের পাথের সাথে যুক্ত করা হয়। অতএব, নিম্নলিখিত দুটি নিয়ম সেট সমতুল্য:

service firebase.storage {
  match /b/{bucket}/o {
    match /images {
      // Exact match for "images/profilePhoto.png"
      match /profilePhoto.png {
        allow write: if <condition>;
      }
    }
  }
}
service firebase.storage {
  match /b/{bucket}/o {
    // Exact match for "images/profilePhoto.png"
    match /images/profilePhoto.png {
      allow write: if <condition>;
      }
  }
}

পুনরাবৃত্ত ম্যাচ ওয়াইল্ডকার্ড

ফাইলের নামের শেষে স্ট্রিংগুলির সাথে মেলে এবং ফেরত দেয় এমন ওয়াইল্ডকার্ড ছাড়াও, ওয়াইল্ডকার্ড নামের সাথে =** যোগ করে আরও জটিল মিলের জন্য একাধিক সেগমেন্ট ওয়াইল্ডকার্ড ঘোষণা করা যেতে পারে, যেমন {path=**} :

// Partial match for files that start with "images"
match /images {

  // 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 যেকোনো একটি true হিসেবে মূল্যায়ন করা হয় তাহলে পড়া যাবে, যেখানে "images/users/user:12345/profilePhoto.png" ফাইলটি শুধুমাত্র other_condition এর ফলাফলের উপর নির্ভর করে।

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

সংস্করণ ১

Firebase Security Rules ডিফল্টরূপে সংস্করণ ১ ব্যবহার করে। সংস্করণ ১-এ, রিকার্সিভ ওয়াইল্ডকার্ডগুলি শূন্য বা একাধিক উপাদানের পরিবর্তে এক বা একাধিক ফাইলের নাম উপাদানের সাথে মেলে। সুতরাং, match /images/{filenamePrefixWildcard}/{imageFilename=**} /images/profilePics/profile.png এর মতো ফাইলের নামের সাথে মেলে, কিন্তু /images/badge.png এর সাথে মেলে না। পরিবর্তে /images/{imagePrefixorFilename=**} ব্যবহার করুন।

পুনরাবৃত্ত ওয়াইল্ডকার্ড অবশ্যই ম্যাচ স্টেটমেন্টের শেষে আসতে হবে।

আরও শক্তিশালী বৈশিষ্ট্যের জন্য আমরা আপনাকে সংস্করণ ২ ব্যবহার করার পরামর্শ দিচ্ছি।

সংস্করণ ২

Firebase Security Rules এর সংস্করণ ২-এ, রিকার্সিভ ওয়াইল্ডকার্ডগুলি শূন্য বা তার বেশি পাথ আইটেমের সাথে মেলে। সুতরাং, /images/{filenamePrefixWildcard}/{imageFilename=**} ফাইলের নাম /images/profilePics/profile.png এবং /images/badge.png এর সাথে মেলে।

আপনার নিরাপত্তা নিয়মের উপরে rules_version = '2'; যোগ করে আপনাকে সংস্করণ 2-এ অপ্ট-ইন করতে হবে:

rules_version = '2';
service cloud.storage {
  match /b/{bucket}/o {
   ...
 }
}

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

rules_version = '2';
service firebase.storage {
 match /b/{bucket}/o {
   // Matches any file in a songs "subdirectory" under the
   // top level of your Cloud Storage bucket.
   match /{prefixSegment=**}/songs/{mp3filenames} {
     allow read, write: if <condition>;
   }
  }
}

দানাদার অপারেশন

কিছু পরিস্থিতিতে, read এবং write আরও সূক্ষ্ম ক্রিয়াকলাপে বিভক্ত করা কার্যকর। উদাহরণস্বরূপ, আপনার অ্যাপ ফাইল তৈরির ক্ষেত্রে ফাইল মুছে ফেলার চেয়ে ভিন্ন শর্ত প্রয়োগ করতে চাইতে পারে।

একটি read অপারেশনকে get এবং list এ ভাগ করা যেতে পারে।

একটি write নিয়ম create , update , এবং delete এ বিভক্ত করা যেতে পারে:

service firebase.storage {
  match /b/{bucket}/o {
    // A read rule can be divided into read and list rules
    match /images/{imageId} {
      // Applies to single file read requests
      allow get: if <condition>;
      // Applies to list and listAll requests (Rules Version 2)
      allow list: if <condition>;

    // A write rule can be divided into create, update, and delete rules
    match /images/{imageId} {
      // Applies to writes to file contents
      allow create: if <condition>;

      // Applies to updates to (pre-existing) file metadata
      allow update: if <condition>;

      // Applies to delete operations
      allow delete: if <condition>;
    }
  }
 }
}

ওভারল্যাপিং ম্যাচ স্টেটমেন্ট

একটি ফাইলের নাম একাধিক match স্টেটমেন্টের সাথে মিলতে পারে। যদি একাধিক allow এক্সপ্রেশন একটি অনুরোধের সাথে মিলে যায়, তাহলে নিম্নলিখিত শর্তগুলির মধ্যে যেকোনো একটি true হলে অ্যাক্সেস অনুমোদিত হয়:

service firebase.storage {
  match b/{bucket}/o {
    // Matches file names directly inside of '/images/'.
    match /images/{imageId} {
      allow read, write: if false;
    }

    // Matches file names anywhere under `/images/`
    match /images/{imageId=**} {
      allow read, write: if true;
    }
  }
}

উপরের উদাহরণে, /images/ দিয়ে শুরু হওয়া সকল ফাইলে পড়া এবং লেখার অনুমতি দেওয়া হয় কারণ দ্বিতীয় নিয়মটি সর্বদা true , এমনকি প্রথম নিয়মটি false হলেও।

নিয়মগুলি ফিল্টার নয়

একবার আপনি আপনার ডেটা সুরক্ষিত করে ফাইল অপারেশন শুরু করলে, মনে রাখবেন যে সুরক্ষা নিয়মগুলি ফিল্টার নয়। আপনি একটি ফাইলের নামের প্যাটার্নের সাথে মিলে যাওয়া ফাইলের একটি সেটে অপারেশন করতে পারবেন না এবং আশা করতে পারবেন না যে Cloud Storage কেবলমাত্র সেই ফাইলগুলিতে অ্যাক্সেস পাবে যেগুলি বর্তমান ক্লায়েন্টের অ্যাক্সেসের অনুমতি রয়েছে।

উদাহরণস্বরূপ, নিম্নলিখিত নিরাপত্তা নিয়মটি ধরুন:

service firebase.storage {
  match /b/{bucket}/o {
    // Allow the client to read files with contentType 'image/png'
    match /aFileNamePrefix/{aFileName} {
      allow read: if resource.contentType == 'image/png';
    }
  }
}

Denied : এই নিয়মটি নিম্নলিখিত অনুরোধটি প্রত্যাখ্যান করে কারণ ফলাফল সেটে এমন ফাইল অন্তর্ভুক্ত থাকতে পারে যেখানে contentType image/png নয় :

ওয়েব
filesRef = storage.ref().child("aFilenamePrefix");

filesRef.listAll()
    .then(function(result) {
      console.log("Success: ", result.items);
    })
});

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

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

Cloud Storage জন্য Firebase Security Rules সম্পর্কে আপনার ধারণা আরও গভীর করতে পারেন:

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

  • সাধারণ নিরাপত্তা ব্যবহারের ক্ষেত্রে এবং সেগুলিকে সম্বোধন করে এমন Firebase Security Rules সংজ্ঞা পর্যালোচনা করুন।

আপনি Cloud Storage জন্য নির্দিষ্ট Firebase Security Rules ব্যবহারের ক্ষেত্রে অন্বেষণ করতে পারেন: