14 KiB
Supabase सुरक्षा
{{#include ../banners/hacktricks-training.md}}
मूल जानकारी
उनके लैंडिंग पृष्ठ के अनुसार: Supabase एक ओपन-सोर्स Firebase विकल्प है। अपने प्रोजेक्ट को एक Postgres डेटाबेस, प्रमाणीकरण, तात्कालिक APIs, Edge Functions, रीयलटाइम सब्सक्रिप्शन, स्टोरेज, और वेक्टर एम्बेडिंग के साथ शुरू करें।
उपडोमेन
बुनियादी रूप से जब एक प्रोजेक्ट बनाया जाता है, तो उपयोगकर्ता को एक supabase.co उपडोमेन प्राप्त होगा जैसे: jnanozjdybtpqgcwhdiz.supabase.co
डेटाबेस कॉन्फ़िगरेशन
Tip
इस डेटा को एक लिंक से एक्सेस किया जा सकता है जैसे
https://supabase.com/dashboard/project/<project-id>/settings/database
यह डेटाबेस कुछ AWS क्षेत्र में तैनात किया जाएगा, और इससे कनेक्ट करने के लिए इसे कनेक्ट करना संभव होगा: postgres://postgres.jnanozjdybtpqgcwhdiz:[YOUR-PASSWORD]@aws-0-us-west-1.pooler.supabase.com:5432/postgres (यह us-west-1 में बनाया गया था)।
पासवर्ड वह पासवर्ड है जो उपयोगकर्ता ने पहले डाला था।
इसलिए, चूंकि उपडोमेन एक ज्ञात है और इसका उपयोग उपयोगकर्ता नाम के रूप में किया जाता है और AWS क्षेत्र सीमित हैं, यह संभव हो सकता है कि पासवर्ड को ब्रूट फोर्स करने की कोशिश की जाए।
इस अनुभाग में निम्नलिखित विकल्प भी शामिल हैं:
- डेटाबेस पासवर्ड रीसेट करें
- कनेक्शन पूलिंग कॉन्फ़िगर करें
- SSL कॉन्फ़िगर करें: प्लेन-टेक्स्ट कनेक्शनों को अस्वीकार करें (डिफ़ॉल्ट रूप से ये सक्षम होते हैं)
- डिस्क आकार कॉन्फ़िगर करें
- नेटवर्क प्रतिबंध और प्रतिबंध लागू करें
API कॉन्फ़िगरेशन
Tip
इस डेटा को एक लिंक से एक्सेस किया जा सकता है जैसे
https://supabase.com/dashboard/project/<project-id>/settings/api
आपके प्रोजेक्ट में Supabase API तक पहुँचने के लिए URL होगा: https://jnanozjdybtpqgcwhdiz.supabase.co।
एनोन API कुंजी
यह एक एनोन API कुंजी (role: "anon"), जैसे: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk उत्पन्न करेगा, जिसका उपयोग एप्लिकेशन को हमारे उदाहरण में प्रदर्शित API कुंजी से संपर्क करने के लिए करना होगा।
इस API से संपर्क करने के लिए API REST को डॉक्स में पाया जा सकता है, लेकिन सबसे दिलचस्प एंडपॉइंट होंगे:
साइनअप (/auth/v1/signup)
``` POST /auth/v1/signup HTTP/2 Host: id.io.net Content-Length: 90 X-Client-Info: supabase-js-web/2.39.2 Sec-Ch-Ua: "Not-A.Brand";v="99", "Chromium";v="124" Sec-Ch-Ua-Mobile: ?0 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Safari/537.36 Content-Type: application/json;charset=UTF-8 Apikey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk Sec-Ch-Ua-Platform: "macOS" Accept: */* Origin: https://cloud.io.net Sec-Fetch-Site: same-site Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: https://cloud.io.net/ Accept-Encoding: gzip, deflate, br Accept-Language: en-GB,en-US;q=0.9,en;q=0.8 Priority: u=1, i{"email":"test@exmaple.com","password":"SomeCOmplexPwd239."}
</details>
<details>
<summary>लॉगिन (/auth/v1/token?grant_type=password)</summary>
POST /auth/v1/token?grant_type=password HTTP/2 Host: hypzbtgspjkludjcnjxl.supabase.co Content-Length: 80 X-Client-Info: supabase-js-web/2.39.2 Sec-Ch-Ua: "Not-A.Brand";v="99", "Chromium";v="124" Sec-Ch-Ua-Mobile: ?0 Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.6367.60 Safari/537.36 Content-Type: application/json;charset=UTF-8 Apikey: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6ImFub24iLCJpYXQiOjE3MTQ5OTI3MTksImV4cCI6MjAzMDU2ODcxOX0.sRN0iMGM5J741pXav7UxeChyqBE9_Z-T0tLA9Zehvqk Sec-Ch-Ua-Platform: "macOS" Accept: / Origin: https://cloud.io.net Sec-Fetch-Site: same-site Sec-Fetch-Mode: cors Sec-Fetch-Dest: empty Referer: https://cloud.io.net/ Accept-Encoding: gzip, deflate, br Accept-Language: en-GB,en-US;q=0.9,en;q=0.8 Priority: u=1, i
{"email":"test@exmaple.com","password":"SomeCOmplexPwd239."}
</details>
तो, जब भी आप किसी क्लाइंट को supabase का उपयोग करते हुए पाते हैं, जो उपडोमेन उन्हें दिया गया है (यह संभव है कि कंपनी का एक उपडोमेन उनके supabase उपडोमेन पर CNAME हो), आप **supabase API का उपयोग करके प्लेटफॉर्म में एक नया खाता बनाने की कोशिश कर सकते हैं**।
### गुप्त / सेवा_भूमिका API कुंजी
एक गुप्त API कुंजी भी **`role: "service_role"`** के साथ उत्पन्न होगी। यह API कुंजी गुप्त होनी चाहिए क्योंकि यह **Row Level Security** को बायपास कर सकेगी।
API कुंजी इस तरह दिखती है: `eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6ImpuYW5vemRyb2J0cHFnY3doZGl6Iiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTcxNDk5MjcxOSwiZXhwIjoyMDMwNTY4NzE5fQ.0a8fHGp3N_GiPq0y0dwfs06ywd-zhTwsm486Tha7354`
### JWT गुप्त
एक **JWT गुप्त** भी उत्पन्न होगा ताकि एप्लिकेशन **कस्टम JWT टोकन बना और साइन कर सके**।
## प्रमाणीकरण
### साइनअप
> [!TIP]
> **डिफ़ॉल्ट** रूप से supabase आपके प्रोजेक्ट पर **नए उपयोगकर्ताओं को खाते बनाने की अनुमति देगा** जो पहले उल्लेखित API एंडपॉइंट्स का उपयोग करते हैं।
हालांकि, इन नए खातों को, डिफ़ॉल्ट रूप से, **अपने ईमेल पते को मान्य करना होगा** ताकि वे खाते में लॉगिन कर सकें। यह संभव है कि **"अनाम साइन-इन की अनुमति दें"** सक्षम किया जाए ताकि लोग बिना अपने ईमेल पते को मान्य किए लॉगिन कर सकें। इससे **अप्रत्याशित डेटा** तक पहुंच मिल सकती है (उन्हें `public` और `authenticated` भूमिकाएँ मिलती हैं)।\
यह एक बहुत बुरी विचार है क्योंकि supabase सक्रिय उपयोगकर्ता के लिए शुल्क लेता है, इसलिए लोग उपयोगकर्ता बना सकते हैं और लॉगिन कर सकते हैं और supabase उन पर शुल्क लेगा:
<figure><img src="../images/image (1) (1) (1) (1) (1) (1).png" alt=""><figcaption></figcaption></figure>
### पासवर्ड और सत्र
यह न्यूनतम पासवर्ड लंबाई (डिफ़ॉल्ट द्वारा), आवश्यकताओं (डिफ़ॉल्ट द्वारा कोई नहीं) और लीक हुए पासवर्ड का उपयोग करने से रोकने के लिए संकेत देने की संभावना है।\
यह अनुशंसा की जाती है कि **डिफ़ॉल्ट आवश्यकताओं को सुधारें क्योंकि वे कमजोर हैं**।
- उपयोगकर्ता सत्र: यह निर्धारित करना संभव है कि उपयोगकर्ता सत्र कैसे काम करते हैं (टाइमआउट, प्रति उपयोगकर्ता 1 सत्र...)
- बॉट और दुरुपयोग सुरक्षा: कैप्चा सक्षम करना संभव है।
### SMTP सेटिंग्स
ईमेल भेजने के लिए SMTP सेट करना संभव है।
### उन्नत सेटिंग्स
- एक्सेस टोकन के लिए समाप्ति समय सेट करें (डिफ़ॉल्ट 3600)
- संभावित रूप से समझौता किए गए रिफ्रेश टोकन का पता लगाने और रद्द करने के लिए सेट करें और टाइमआउट
- MFA: यह इंगित करें कि प्रति उपयोगकर्ता एक बार में कितने MFA कारक पंजीकृत किए जा सकते हैं (डिफ़ॉल्ट 10)
- अधिकतम डायरेक्ट डेटाबेस कनेक्शन: प्रमाणीकरण के लिए उपयोग किए जाने वाले कनेक्शनों की अधिकतम संख्या (डिफ़ॉल्ट 10)
- अधिकतम अनुरोध अवधि: अधिकतम समय जो एक प्रमाणीकरण अनुरोध के लिए अनुमति दी जाती है (डिफ़ॉल्ट 10 सेकंड)
## संग्रहण
> [!TIP]
> Supabase **फाइलों को स्टोर करने** और उन्हें URL के माध्यम से सुलभ बनाने की अनुमति देता है (यह S3 बकेट का उपयोग करता है)।
- अपलोड फ़ाइल आकार सीमा सेट करें (डिफ़ॉल्ट 50MB)
- S3 कनेक्शन एक URL के साथ दिया गया है जैसे: `https://jnanozjdybtpqgcwhdiz.supabase.co/storage/v1/s3`
- यह **S3 एक्सेस कुंजी** का अनुरोध करना संभव है जो एक `access key ID` (जैसे `a37d96544d82ba90057e0e06131d0a7b`) और एक `secret access key` (जैसे `58420818223133077c2cec6712a4f909aec93b4daeedae205aa8e30d5a860628`) द्वारा बनाई जाती है।
## एज फ़ंक्शंस
यह संभव है कि **supabase में गुप्त जानकारी** भी स्टोर की जा सके जो **एज फ़ंक्शंस द्वारा सुलभ होगी** (इन्हें वेब से बनाया और हटाया जा सकता है, लेकिन इनका मूल्य सीधे एक्सेस करना संभव नहीं है)।
{{#include ../banners/hacktricks-training.md}}