टोकन सुरक्षा मॉडल
L402 टोकन दो भागों से मिलकर बने होते हैं जो: से जुड़े होते हैं:
- Macaroon — base64-एन्कोडेड JSON जिसमें
{hash, exp}है। SHA-256 से हस्ताक्षरित। preimage जाने बिना इसे जाली नहीं बनाया जा सकता। - Preimage — 32-बाइट का रहस्य जो, SHA-256 से हैश होने पर, macaroon में एम्बेड किए गए हैश से मेल खाना चाहिए।
रीप्ले सुरक्षा
l402-kit में बिल्ट-इन रीप्ले सुरक्षा शामिल है। प्रत्येक preimage का उपयोग केवल एक बार किया जा सकता है:401 Token already used लौटाता है।
डिफ़ॉल्ट स्टोर: इन-मेमोरी Set। इसका अर्थ है:
- रीस्टार्ट रीप्ले स्टोर को साफ़ कर देता है (टोकन रीस्टार्ट के बाद पुनः उपयोग योग्य हो जाते हैं)
- एकाधिक इंस्टेंस स्टेट साझा नहीं करते
टोकन एक्सपायरी
टोकन में एकexp फ़ील्ड होती है (Unix timestamp ms में)। SDK स्वचालित रूप से एक्सपायर हुए टोकन को अस्वीकार करता है।
डिफ़ॉल्ट TTL: 1 घंटा (इनवॉइस बनाते समय Lightning provider द्वारा सेट किया जाता है)।
HTTPS आवश्यक है
प्रोडक्शन में कभी भी L402 को सादे HTTP पर उपयोग न करें। macaroon और preimageAuthorization हेडर में ट्रांसमिट होते हैं। HTTP पर, वे नेटवर्क हमलावरों के सामने उजागर हो जाते हैं।
रेट लिमिटिंग
L402 टोकन को क्रिप्टोग्राफिक रूप से सत्यापित करता है, डेटाबेस लुकअप से नहीं — इसलिए यह सस्ता है। लेकिन Lightning इनवॉइस बनाना (402 रिस्पॉन्स) आपके Lightning provider के API को कॉल करता है। DoS से बचाने के लिए इनवॉइस बनाने को रेट लिमिटर से सुरक्षित करें:सीक्रेट्स प्रबंधन
API कुंजियों को कभी भी हार्डकोड न करें। एनवायरनमेंट वेरिएबल्स का उपयोग करें:.env + dotenv (कभी git में कमिट न करें)।
एडमिन एंडपॉइंट प्रमाणीकरण
यदि आप एडमिन या स्टैट्स एंडपॉइंट एक्सपोज़ करते हैं, तो URL क्वेरी पैरामीटर के माध्यम से कभी भी सीक्रेट्स स्वीकार न करें। URL रिवर्स प्रॉक्सी, CDN और क्लाउड प्रदाताओं द्वारा क्वेरी स्ट्रिंग सहित पूरी तरह लॉग किए जाते हैं।Supabase कुंजी स्वच्छता
SUPABASE_SERVICE_KEY (केवल सर्वर-साइड) बनाम SUPABASE_ANON_KEY (क्लाइंट को एक्सपोज़ करने के लिए सुरक्षित) का सही तरीके से उपयोग करें:
| कुंजी | उपयोग | RLS को बायपास करती है? |
|---|---|---|
anon | VS Code एक्सटेंशन, ब्राउज़र क्लाइंट | नहीं |
service_role | सर्वर-साइड API फ़ंक्शन | हाँ |
pro_access) पढ़ते हैं, उन्हें सर्विस कुंजी का उपयोग करना चाहिए — कभी भी anon कुंजी का नहीं। संवेदनशील टेबल पर RLS नीतियां anon एक्सेस प्रदान नहीं करनी चाहिए।
कंटेंट सिक्योरिटी पॉलिसी
यदि आप अपने API के साथ एक फ्रंटएंड भी सर्व करते हैं, तो सुनिश्चित करें कि आपकी CSP L402 फ्लो को ब्लॉक न करे:डेटा प्रबंधन — उपयोगकर्ता डेटा हटाना
उपयोगकर्ता किसी भी समय VS Code एक्सटेंशन से अपना सारा पेमेंट इतिहास और Pro सदस्यता हटा सकते हैं (Settings → Danger Zone)। एक्सटेंशन यह कॉल करता है:paymentsमें वे सभी पंक्तियाँ जहाँowner_address = ?pro_accessमें वे सभी पंक्तियाँ जहाँaddress = ?
एक्सटेंशन के लिए आवश्यक है कि उपयोगकर्ता डिलीट बटन सक्षम होने से पहले अपना Lightning address शब्दशः टाइप करे — विनाशकारी कार्यों के लिए GitHub-शैली की पुष्टि।
गोपनीयता और डेटा न्यूनीकरण
l402-kit को संचालन के लिए आवश्यक न्यूनतम डेटा एकत्र करने के लिए डिज़ाइन किया गया है। यहाँ बताया गया है कि क्या संग्रहीत किया जाता है, क्यों, और प्रत्येक फ़ील्ड को कैसे सख्त किया जाए।क्या संग्रहीत होता है
| टेबल | फ़ील्ड | क्यों | संवेदनशीलता |
|---|---|---|---|
payments | preimage | रीप्ले सुरक्षा + भुगतान का प्रमाण | ⚠️ मध्यम — इसके बजाय हैश करें (नीचे देखें) |
payments | owner_address | Lightning address को राजस्व का श्रेय दें | कम — Lightning addresses सार्वजनिक हैं |
payments | amount_sats | डैशबोर्ड स्टैट्स | कम |
payments | endpoint | प्रति-एंडपॉइंट एनालिटिक्स | कम–मध्यम |
pro_access | address | Pro सदस्यता सत्यापित करें | कम — सार्वजनिक |
waitlist | email | स्वागत + रिलीज़ ईमेल भेजें | ⚠️ उच्च — वास्तविक PII, एन्क्रिप्ट करें या छोड़ें |
waitlist | lightning_address | वैकल्पिक पहचान संकेत | कम |
raw संग्रहीत करने के बजाय preimage को हैश करें
preimage 32-बाइट का रहस्य है जो साबित करता है कि Lightning payment किया गया था। इसे raw संग्रहीत करने का अर्थ है कि डेटाबेस उल्लंघन से हर प्रमाण उजागर हो जाता है। इसके बजाय SHA-256 हैश संग्रहीत करें — यह पहले से ही सार्वजनिक है (BOLT11 इनवॉइस में एम्बेडेड) और रीप्ले सुरक्षा के लिए पर्याप्त है:waitlist ईमेल की सुरक्षा करें
ईमेल पते सिस्टम में एकमात्र वास्तविक PII हैं। बढ़ती सुरक्षा के क्रम में विकल्प:डेटा हटाने से पहले वॉलेट स्वामित्व साबित करें (LNURL-auth)
/api/delete-data एंडपॉइंट को केवल Lightning address के वास्तविक मालिक से अनुरोध स्वीकार करने चाहिए। स्वामित्व को क्रिप्टोग्राफिक रूप से साबित करने के लिए LNURL-auth का उपयोग करें — उपयोगकर्ता अपनी Lightning wallet private key से सर्वर चैलेंज पर हस्ताक्षर करता है, बिना किसी पासवर्ड या अकाउंट की आवश्यकता के:
Supabase स्टेट के साथ पूर्ण अनुक्रम के लिए पूर्ण फ्लो डायग्राम देखें।
यह सुनिश्चित करता है कि कोई भी किसी अन्य उपयोगकर्ता के रिकॉर्ड नहीं हटा सकता, भले ही वे Lightning address जानते हों।
चेकलिस्ट
लाइव जाने से पहले
लाइव जाने से पहले
- सभी एंडपॉइंट पर HTTPS लागू
- API कुंजियाँ एनवायरनमेंट वेरिएबल्स में, सोर्स कोड में नहीं
- एडमिन/स्टैट्स एंडपॉइंट हेडर ऑथ का उपयोग करते हैं,
?secret=URL params का नहीं - Supabase
service_roleकुंजी सर्वर-साइड उपयोग की जाती है;anonकुंजी केवल क्लाइंट पर - संवेदनशील Supabase टेबल में कोई
anonSELECT नीति नहीं - डेटा डिलीशन एंडपॉइंट (
/api/delete-data) सर्विस कुंजी का उपयोग करता है, कभी anon का नहीं - इनवॉइस बनाने पर रेट लिमिटर
- रीप्ले सुरक्षा परीक्षण किया गया (preimage का पुनः उपयोग करने का प्रयास करें → 401 की अपेक्षा करें)
- टोकन एक्सपायरी परीक्षण किया गया (dev में छोटा TTL सेट करें, एक्सपायरी के बाद 401 की पुष्टि करें)
- Preimage SHA-256 हैश के रूप में संग्रहीत, raw सीक्रेट के रूप में नहीं
- Waitlist ईमेल rest में एन्क्रिप्टेड या भेजने के बाद हटाए गए
-
/api/delete-dataके लिए वॉलेट स्वामित्व का LNURL-auth प्रमाण आवश्यक
उच्च-ट्रैफ़िक API के लिए
उच्च-ट्रैफ़िक API के लिए
- Redis-backed रीप्ले स्टोर (इंस्टेंस के बीच साझा)
- 402 रिस्पॉन्स दरों पर मॉनिटरिंग (स्पाइक = संभावित DoS)
- Lightning provider फेलओवर (BlinkProvider → LNbitsProvider फॉलबैक)
- आपके Lightning provider के लिए स्टेटस पेज मॉनिटरिंग (जैसे status.blink.sv)