ऑराबेस लोगो
aurabaseडॉक्स
डॉक्स›Edge Functions›Security model

Edge Functions सुरक्षा मॉडल

वे नियम जो आपके कार्यों, उनके कोड और उनके रहस्यों को निजी रखते हैं, और वे स्थान जहां आप जिम्मेदार रहते हैं।

7 मि॰ पढ़ें·स्तर मध्यवर्ती·12 अक्टू॰ 2026 पर संशोधित
यह अंग्रेजी पाठ फ़्रेंच मूल से स्वचालित रूप से उत्पन्न हुआ था और अभी तक इसकी समीक्षा नहीं की गई है।
इस अनुवाद के बाद से अंग्रेजी स्रोत बदल गया है। कुछ जानकारी पुरानी हो सकती है.
यह पृष्ठ स्वचालित रूप से अनुवादित किया गया था. अंग्रेजी संस्करण प्रामाणिक है.
#
भूमिकाएँ

1. कुंजी और भूमिकाएँ

भूमिकाचाबीकर सकता है
anonसार्वजनिक कुंजी, ब्राउज़र में सुरक्षितकिसी फ़ंक्शन का आह्वान करें
authenticatedसार्वजनिक कुंजी और साइन-इन उपयोगकर्ता का JWTउपयोगकर्ता की पहचान के साथ एक फ़ंक्शन शुरू करें
service_roleगुप्त कुंजी, सर्वर केवलसब कुछ: तैनात करें, कोड और रहस्य पढ़ें, नौकरियां, क्रॉन, अलर्ट
adminस्टूडियो में एक कंसोल सत्रसब कुछ, स्टूडियो से

भूमिका कुंजी और टोकन से आती है, जिसे प्लेटफ़ॉर्म मान्य करता है। कोई ग्राहक इसे नहीं चुन सकता: सार्वजनिक कुंजी और हेडर x-aura-role: service_role के साथ कॉल अभी भी आपके फ़ंक्शन तक anon के रूप में पहुंचती है।

प्रत्येक मार्ग और उसकी भूमिका HTTP API संदर्भ में सूचीबद्ध है।

#
सिद्धांत

2. केवल मंगलाचरण ही सार्वजनिक क्यों है?

आपके वेब या मोबाइल ऐप में एक सार्वजनिक कुंजी प्रकाशित की जाती है, ताकि कोई भी इसे पढ़ सके। जो कुछ भी अनुमति देता है, हर किसी को अनुमति है। किसी फ़ंक्शन को लागू करना उसके लिए डिज़ाइन किया गया एक ऑपरेशन है: आपका कोड तय करता है कि कॉल करने वाला क्या कर सकता है।

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

वही विभाजन अन्यत्र भी मौजूद है। Supabase किसी एज फ़ंक्शन के डिफ़ॉल्ट रूप से चलने से पहले उपयोगकर्ता के JWT को मान्य करता है (verify_jwt = true) और इसके CLI और प्लेटफ़ॉर्म (डॉक्स) के माध्यम से फ़ंक्शन को तैनात करता है। Firebase IAM अनुमति (डॉक्स) के साथ एडमिन SDK के माध्यम से एक विश्वसनीय सर्वर वातावरण से कार्यों को सूचीबद्ध करता है। Cloudflare केवल एक कार्यकर्ता को बाइंडिंग (दस्तावेज़) के माध्यम से कतार में भेजने की सुविधा देता है।

सुधार से पहले, एक सार्वजनिक कुंजी परिभाषाएँ पढ़ सकती थी

सेवा के पुराने संस्करणों ने किसी भी कुंजी का उत्तर GET /v1/functions और GET /v1/functions/{name} दिया। यदि आपका प्रोजेक्ट किसी ऐसे परिनियोजन पर चलता है जो इस सुधार से पहले का है, तो अपने कार्यों के कोड और वेरिएबल्स को उजागर मानें और उनमें मौजूद रहस्यों को घुमाएँ। को 0.6 में अपग्रेड करें देखें।

#
पहचान

3. पहचान जाली नहीं हो सकती

आपका फ़ंक्शन x-aura-role, x-aura-user-id और x-aura-project-id से कॉलर को पढ़ता है। कुंजी और टोकन को मान्य करने के बाद प्लेटफ़ॉर्म उन्हें सेट करता है।

  • कॉल करने वाला उन्हें आपूर्ति नहीं कर सकता. प्लेटफ़ॉर्म authorization, apikey, x-request-id और किसी आह्वान के headers में भेजे गए किसी भी x-aura-* हेडर को हटा देता है, चाहे उनका मामला कुछ भी हो। एक वास्तविक परीक्षण में, x-aura-role: service_role और जाली authorization के साथ एक कॉल authorization के बिना role: "anon" के रूप में फ़ंक्शन तक पहुंची।
  • अन्य कस्टम हेडर अछूते रहते हैं। उन्हें उपयोगकर्ता इनपुट के रूप में मानें।
  • जॉब्स और क्रॉन फायरिंग आपके फ़ंक्शन तक बिना पहचान हेडर के पहुंचते हैं। वे किसी उपयोगकर्ता द्वारा नहीं, बल्कि प्लेटफ़ॉर्म द्वारा ट्रिगर किए जाते हैं।

इसलिए x-aura-role और x-aura-user-id पर अधिकृत करें, कभी भी बॉडी के मूल्य पर नहीं:

aurabase/functions/delete-account/index.tstypescript
Deno.serve((req) => {
  const userId = req.headers.get('x-aura-user-id')
  if (req.headers.get('x-aura-role') !== 'authenticated' || !userId) {
    return new Response('Forbidden', { status: 403 })
  }
  // `userId` का खाता हटाएं, मुख्य भाग से ली गई किसी आईडी का नहीं
  return new Response('ok')
})
#
एकांत

4. सैंडबॉक्स

प्लेटफ़ॉर्म आपको क्या देता है:

  • प्रत्येक कॉल अपनी स्वयं की मेमोरी सीमा और वॉल-क्लॉक टाइमआउट के साथ, अपने स्वयं के V8 आइसोलेट में चलती है। एक कॉल में क्रैश या अनंत लूप दूसरे को प्रभावित नहीं करता है।
  • होस्ट के पर्यावरण चर अदृश्य हैं: Deno.env.get('PATH') ने वास्तविक रन में undefined लौटाया। केवल आपके फ़ंक्शन के वेरिएबल और प्लेटफ़ॉर्म के AURABASE_* वेरिएबल मौजूद हैं।
  • एक प्रोजेक्ट का कोड दूसरे द्वारा नहीं पढ़ा जा सकता है: जो सेवा इसे प्रदान करती है उसे आंतरिक टोकन की आवश्यकता होती है।
  • जो प्रतिक्रियाएँ स्क्रिप्ट चला सकती हैं, उन्हें सैंडबॉक्सिंग सामग्री सुरक्षा नीति के साथ प्रस्तुत किया जाता है, और फ़ंक्शन से Set-Cookie और CORS हेडर हटा दिए जाते हैं। प्रतिक्रियाएँ देखें।

यह नहीं आपको क्या देता है:

  • जब तक आप प्रतिबंधित नहीं करते, आउटबाउंड नेटवर्क खुला रहता है। जब permissions.allow_net में कम से कम एक होस्ट सूचीबद्ध होता है, तो रनटाइम किसी अन्य होस्ट पर fetch को अस्वीकार कर देता है (Requires net access to "host:443")। खाली सूची, जो डिफ़ॉल्ट है, कुछ भी प्रतिबंधित नहीं करती। फ़ंक्शन को जिन सभी होस्ट की ज़रूरत है उन्हें सूचीबद्ध करें; यदि वह प्लेटफ़ॉर्म को कॉल करता है तो अपने प्रोजेक्ट का URL भी शामिल करें। सूची होने पर भी उपयोगकर्ता इनपुट से आए किसी भी URL को सत्यापित करें।
  • लॉग में आपके अपने रहस्यों की कोई सुरक्षा नहीं। आपका फ़ंक्शन console.log के साथ जो कुछ भी लिखता है वह रनटाइम के लॉग में चला जाता है।
  • प्रति उपयोगकर्ता कोई सीमा नहीं। आमंत्रण दर सीमा प्रति ग्राहक आईपी है। यदि एक उपयोगकर्ता को किसी फ़ंक्शन को कुछ बार से अधिक कॉल नहीं करना चाहिए तो अपना स्वयं का चेक जोड़ें।
#
जांच सूची

5. चेकलिस्ट

  • service_role कुंजी केवल आपके सर्वर और आपके सीआई रहस्यों में मौजूद है।
  • ब्राउज़र बंडल में केवल सार्वजनिक कुंजी होती है। SDK डिफ़ॉल्ट रूप से ब्राउज़र में service_role कुंजी को अस्वीकार कर देता है।
  • प्रत्येक फ़ंक्शन कुछ भी संवेदनशील करने से पहले x-aura-role की जांच करता है।
  • रहस्य फ़ंक्शन के चर हैं, index.ts में कभी नहीं।
  • बाहरी यूआरएल को कॉल करने वाले फ़ंक्शन गंतव्य को मान्य करते हैं।
  • आप स्टूडियो में एक नई कुंजी बनाकर उसे घुमाते हैं, उसे एक रहस्य के रूप में तैनात करते हैं, फिर पुरानी कुंजी को निरस्त करते हैं।