Firebase ईमेल ने कहा कि मेरे रियलटाइम डेटाबेस में असुरक्षित नियम हैं



firebase-realtime-database firebase-authentication (1)

मुझे हाल ही में फायरबेस से एक ईमेल मिला, जिसमें बताया गया कि मेरे रियलटाइम डेटाबेस में असुरक्षित नियम हैं। ये मेरे द्वारा निर्धारित नियम हैं:

{
  "rules": {
    ".read": "auth != null",
    ".write": "auth != null"
 }
}

क्या यह एक सुरक्षित नियम नहीं है?

ईमेल / पासवर्ड एकमात्र साइन-इन विधि है जिसे मैंने सक्षम किया है।


यहाँ फायरबैशर

मुझे खेद है कि यदि ईमेल उन नियमों के बारे में सुरक्षित नहीं है, तो यह बहुत स्पष्ट नहीं था। आपके उपयोगकर्ता के डेटा को सुरक्षित रखना किसी भी ऐप के लिए एक महत्वपूर्ण कदम है जो आप उपलब्ध कराते हैं, इसलिए मैं थोड़ा और समझाने की कोशिश करूंगा कि यह कैसे काम करता है।

(डिफ़ॉल्ट) नियम आप किसी को भी अनुमति देते हैं जो आपके बैक-एंड पूर्ण साइन इन / पूरे डेटाबेस तक पहुंच के लिए साइन इन है। यह केवल सुरक्षा की एक बहुत ही मूल परत है।

एक तरफ यह आपके डेटाबेस तक सभी को पहुँच प्रदान करने की तुलना में अधिक सुरक्षित है, कम से कम उन्हें साइन इन करना होगा।

दूसरी ओर, यदि आप फायरबेस प्रमाणीकरण में किसी भी प्रदाता को सक्षम करते हैं, तो कोई भी आपके ऐप का उपयोग किए बिना, आपके बैक-एंड पर भी हस्ताक्षर कर सकता है। प्रदाता के आधार पर, यह आपके ब्राउज़र के डेवलपर कंसोल में जावास्क्रिप्ट के एक बिट को चलाने के रूप में आसान हो सकता है। और एक बार जब वे साइन इन हो जाते हैं, तो वे आपके डेटाबेस में कुछ भी पढ़ और लिख सकते हैं। इसका मतलब है कि वे सभी डेटा को एक साधारण कमांड जैसे firebase.database().ref().delete()

डेटा एक्सेस को अधिक सुरक्षित बनाने के लिए, आप और अधिक कसकर नियंत्रण करना चाहेंगे कि प्रत्येक हस्ताक्षरित उपयोगकर्ता क्या कर सकता है। उदाहरण के लिए, कहें कि आप प्रत्येक उपयोगकर्ता के बारे में /users बारे में जानकारी के साथ एक प्रोफ़ाइल रखते हैं। आप सभी उपयोगकर्ताओं को इन प्रोफाइल तक पहुंचने की अनुमति देना चाहते हैं, लेकिन आप निश्चित रूप से चाहते हैं कि उपयोगकर्ताओं को केवल अपने डेटा को संशोधित करने की अनुमति दी जाए। आप इन नियमों से इसे सुरक्षित कर सकते हैं:

{
  "rules": {
    "users": {
      ".read": true,
      "$user_id": {
        // grants write access to the owner of this user account
        // whose uid must exactly match the key ($user_id)
        ".write": "$user_id === auth.uid"
      }
    }
  }
}

इन नियमों के साथ, सभी (यहां तक ​​कि गैर-प्रमाणित उपयोगकर्ता) सभी प्रोफाइल पढ़ सकते हैं। लेकिन प्रत्येक प्रोफ़ाइल को केवल उस उपयोगकर्ता द्वारा संशोधित किया जा सकता है, जिसकी प्रोफ़ाइल है। इस पर अधिक जानकारी के लिए, उपयोगकर्ता डेटा को सुरक्षित करने के लिए फायरबेस प्रलेखन देखें।

यह सुनिश्चित करने के अलावा कि सभी डेटा तक पहुँच अधिकृत है, आप यह भी सुनिश्चित करना चाहते हैं कि आपके लिए जो भी नियम हैं वे सभी डेटा संग्रहीत हैं जो आपके ऐप के लिए मान्य हैं। उदाहरण के लिए, यह कहें कि आप एक उपयोगकर्ता के लिए दो गुणों को संग्रहीत करना चाहते हैं: उनका नाम, और उनकी आयु (उदाहरण के लिए, वास्तव में आप शायद उनके जन्म-तिथि को उनके स्थान पर संग्रहीत करेंगे)। तो आप इसे कुछ इस तरह से स्टोर कर सकते हैं:

"users": {
  "uidOfPuf": {
    "name": "Frank van Puffelen",
    "age": 48
  }
}

केवल यह सुनिश्चित करने के लिए कि यह डेटा लिखा जा सकता है, आप इस नियम का उपयोग कर सकते हैं:

{
  "rules": {
    "users": {
      ".read": true,
      "$user_id": {
        ".write": "$user_id === auth.uid",
        ".validate": "data.hasChildren('name', 'age')",
        "name": {
          ".validate": "data.isString()",
        },
        "age: {
          ".validate": "data.isNumber()",
        },
        "$other: {
          ".validate": false
        }
      }
    }
  }
}

ये नियम सुनिश्चित करते हैं कि प्रत्येक उपयोगकर्ता प्रोफ़ाइल में क्रमशः एक स्ट्रिंग और संख्यात्मक मान के साथ एक name और age संपत्ति है। यदि कोई अतिरिक्त गुण लिखने का प्रयास करता है, तो लेखन अस्वीकार कर दिया जाता है।

ऊपर एक त्वरित प्राइमर है कि आपके (उपयोगकर्ता) डेटा को सुरक्षित करने के बारे में कैसे सोचा जाए। मेरा सुझाव है कि आप अधिक के लिए फायरबेस सुरक्षा दस्तावेज (और एम्बेडेड वीडियो) देखें।





firebase-security-rules