يوفّر Cloud Storage for Firebase نموذج أمان بيانًا ومستندًا إلى المسار. تسمى Firebase Security Rules لصالح Cloud Storage والتي تتيح لك بسرعة وسهولة تأمين ملفاتك.
فهم القواعد
يتم استخدام Firebase Security Rules لـ Cloud Storage لتحديد المستخدمين الذين قرأوا ويكتبوا.
حق الوصول إلى الملفات المخزنة في 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 match
مسارات الملفات المستخدمة للوصول إلى الملفات في
Cloud Storage يمكن للقواعد 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، ولا يتم تقييم القواعد إلا عند يتطابق مسار الطلب مع مسار بالقواعد المحدّدة.
طلب تقييم
يتم تقييم عمليات التحميل وعمليات التنزيل وتغييرات البيانات الوصفية وعمليات الحذف باستخدام
تم إرسال مبلغ request
إلى "Cloud Storage". يحتوي المتغير 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 |
الطابع الزمني | طابع زمني يمثّل وقت الخادم الذي يتم تقييم الطلب فيه |
تقييم الموارد
عند تقييم القواعد، قد تحتاج أيضًا إلى تقييم البيانات الوصفية للملف التي يجري تحميلها أو تنزيلها أو تعديلها أو حذفها. يتيح لك ذلك إنشاء قواعد معقدة وفعالة تعمل على تنفيذ إجراءات مثل السماح بالملفات التي تحتوي على أنواع المحتوى التي سيتم تحميلها، أو الملفات التي يزيد حجمها عن حجم معين فقط حذف.
يوفّر Firebase Security Rules للنطاق Cloud Storage البيانات الوصفية للملفات في 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 |
السلسلة | العلامة الإلكترونية المرتبطة بهذا الكائن. |
contentDisposition |
السلسلة | ترتيب المحتوى المرتبط بهذا العنصر |
contentEncoding |
السلسلة | ترميز المحتوى المرتبط بهذا العنصر. |
contentLanguage |
السلسلة | لغة المحتوى المرتبطة بهذا العنصر |
contentType |
السلسلة | نوع المحتوى المرتبط بهذا العنصر |
metadata |
خريطة<string, string> | أزواج المفتاح/القيمة من البيانات الوصفية المخصّصة الإضافية التي يحدّدها المطوِّر |
يحتوي request.resource
على كل ما يلي باستثناء generation
،
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 لمستوى الوصول الدقيق إلى الملفات لكل مستخدم في قسم أمان المستخدم.