FixVibe

// docs / security guides / pre-launch SaaS

SaaS प्री-लॉन्च सुरक्षा चेकलिस्ट: 36 आइटम

आप Cursor, Claude Code, Lovable, या Bolt के साथ निर्मित SaaS उत्पाद लॉन्च करने से कुछ ही दिन दूर हैं। यह चेकलिस्ट एक गो/no-go ऑडिट है जिसमें उन सुरक्षा सतहों को शामिल किया गया है जो AI उपकरण लगातार चूक जाते हैं और तेजी से शिपिंग करने वाले संस्थापकों को ग्राहक के पैसे लेने से पहले इस पर ध्यान देने की आवश्यकता होती है। आठ अनुभाग, 36 आइटम, प्रत्येक को 30-90 मिनट में हल किया जा सकता है। इसे प्रिंट करें, काट दें, विश्वास के साथ तैनात करें।

नीचे दी गई प्रत्येक वस्तु आवश्यक है. हरा का अर्थ है भेजा गया और सत्यापित; लाल का अर्थ है अनसुलझा और अवरुद्ध प्रक्षेपण। कोड स्निपेट और वास्तविक विफलता पैटर्न के साथ प्रत्येक श्रेणी की लंबी जानकारी के लिए, How to secure an app built with AI coding tools और The vibe coding security checklist देखें।

ग्राहक डेटा अलगाव

बहु-किरायेदार SaaS में, आपकी पहली सुरक्षा सीमा डेटा अलगाव है। प्रत्येक ग्राहक का डेटा हर दूसरे ग्राहक तक पहुंच योग्य नहीं होना चाहिए, यह डेटाबेस परत पर लागू होता है, न कि एप्लिकेशन परत पर।

  1. Enable Row-Level Security (RLS) on every Supabase table with ALTER TABLE public.table_name ENABLE ROW LEVEL SECURITY; and add a policy per command scoped to the owning user or organization. FORCE ROW LEVEL SECURITY is optional: it only applies RLS to the table owner.
  2. प्रत्येक RLS नीति के लिए, प्रमाणित उपयोगकर्ता या संगठन को विधेय दायरे को सत्यापित करें। उदाहरण: CREATE POLICY "users_see_own" ON public.items FOR SELECT USING (auth.uid() = user_id);. यह पुष्टि करने के लिए कि डेटा अलग रहता है, दूसरे उपयोगकर्ता खाते से परीक्षण करें।
  3. यदि Firebase / फायरस्टोर का उपयोग कर रहे हैं, तो नियम आपके किरायेदार मॉडल से मेल खाने चाहिए। allow read, write: if true; या समयबद्ध परीक्षण नियमों का प्रयोग न करें। allow read, write: if request.auth.uid == resource.data.owner_uid; या समकक्ष ऑर्ग-स्कोप्ड मिलान का उपयोग करें।
  4. फ़ाइल पहुंच के लिए हस्ताक्षरित यूआरएल या अल्पकालिक टोकन का उपयोग करें, सार्वजनिक बकेट का कभी नहीं। Supabase भंडारण: objects तालिका पर ENABLE ROW LEVEL SECURITY सेट करें और लेखक नीतियां जो प्रमाणित उपयोगकर्ता तक फ़ाइल पहुंच का दायरा बढ़ाती हैं। विभिन्न उपयोगकर्ताओं के रूप में डाउनलोड का परीक्षण करें।
  5. आपकी API परत पर, प्रत्येक अनुरोध में auth.uid() या ऑर्ग-आईडी संदर्भ शामिल होना चाहिए। प्रत्येक डेटाबेस क्वेरी को उस संदर्भ के अनुसार फ़िल्टर करना होगा। उदाहरण: नहीं SELECT * FROM items WHERE id = $1; हमेशा SELECT * FROM items WHERE id = $1 AND user_id = auth.uid().

बिलिंग और भुगतान

Stripe एकीकरण वह जगह है जहां ग्राहक का विश्वास वित्तीय सुरक्षा से मिलता है। यहां गलत कॉन्फ़िगरेशन का मतलब चोरी हुए भुगतान, रिफंड लूप या लापता राजस्व है।

  1. उत्पादन में live Stripe keys का प्रयोग करें. स्टेजिंग पर एक अलग परीक्षण-मोड कुंजी के साथ परीक्षण करें। अंतिम लाइव-मोड स्कैन के बिना स्विच को टेस्ट से लाइव पर कभी न पलटें।
  2. प्रत्येक इनबाउंड ईवेंट पर वेबहुक हस्ताक्षर सत्यापित करें: const event = stripe.webhooks.constructEvent(req.body, sig, webhookSecret);। हस्ताक्षर विफल होने पर फेंक दें. वेबहुक रहस्य को केवल पर्यावरण चर में संग्रहित करें, कोड में कभी नहीं।
  3. event.id द्वारा कुंजीबद्ध डेटाबेस तालिका का उपयोग करके वेबहुक हैंडलर पर निष्क्रियता लागू करें। यदि एक ही वेबहुक दो बार आता है (आएगा), तो दूसरा रन नो-ऑप है। राज्य परिवर्तन के समान लेन-देन में निष्क्रियता पंक्ति लिखें।
  4. customer.subscription.updated और customer.subscription.deleted पर, तुरंत पहुंच रद्द करें। क्रॉन की प्रतीक्षा मत करो. Stripe डैशबोर्ड में सदस्यता रद्द करके परीक्षण करें और सत्यापित करें कि उपयोगकर्ता 5 सेकंड के भीतर लॉक हो गया है।
  5. अपने डेटाबेस में केवल Stripe ग्राहक ID और सदस्यता ID संग्रहित करें, कभी भी पूरा कार्ड या API कुंजी संग्रहीत न करें। प्रत्येक प्राधिकरण सीमा पर Stripe से लाइव सदस्यता स्थिति प्राप्त करें (पेज लोड, API कॉल, क्रॉन चेक)। >1 मिनट के लिए सदस्यता स्थिति को कैश न करें।

प्रमाणीकरण और सत्र

SaaS में ऑथ दूसरे क्रम का हमलावर लक्ष्य है। उपयोगकर्ता खाता डेटा और भुगतान विधियों का एक वेक्टर है।

  1. प्रत्येक संरक्षित मार्ग पर supabase.auth.getUser() का प्रयोग करें, कभी भी getSession() का प्रयोग न करें। getSession() एक असत्यापित कुकी पढ़ता है; getUser() JWT सर्वर-साइड को मान्य करता है। संरक्षित सामग्री परोसने से पहले Next.js: const { data: { user } } = await supabase.auth.getUser(); में।
  2. ऑथ कुकीज़ पर SameSite=Lax सेट करें (Supabase ऑथ डिफ़ॉल्ट रूप से ऐसा करता है)। DevTools → एप्लिकेशन → कुकीज़ में सत्यापित करें। यदि आप SameSite=None देखते हैं, तो अपने सत्र कॉन्फ़िगरेशन में sameSite: 'Lax' जोड़ें।
  3. अपने स्वयं के व्यवस्थापक खाते पर MFA सक्षम करें। उपयोगकर्ता-सामना वाले MFA के लिए, लॉन्च से पहले इसका अंत-से-अंत तक परीक्षण करें: साइन अप करें, TOTP डिवाइस को नामांकित करें, साइन आउट करें, TOTP टोकन के साथ वापस साइन इन करें, सत्यापित करें कि यह काम करता है।
  4. मैजिक-लिंक टोकन 15 मिनट के भीतर समाप्त होने चाहिए। पासवर्ड-रीसेट टोकन 1 घंटे के भीतर समाप्त होने चाहिए। सत्र टोकन (JWTs) लंबे समय तक (24 घंटे से 7 दिन) तक जीवित रह सकते हैं, लेकिन उन्हें हर उपयोग पर मान्य किया जाना चाहिए। अपने प्रमाणीकरण प्रदाता के डिफ़ॉल्ट की जाँच करें।
  5. साइन-आउट पूर्णता का परीक्षण करें: उपयोगकर्ता द्वारा साइन-आउट पर क्लिक करने के बाद, ब्राउज़र प्रमाणीकरण सत्र हटा देता है, सर्वर किसी भी टोकन को रद्द कर देता है, और उपयोगकर्ता संरक्षित पृष्ठों तक नहीं पहुंच सकता है। Supabase में: await supabase.auth.signOut() पर कॉल करें और सत्यापित करें कि JWT अब अगले अनुरोध पर मान्य नहीं है।

PII और अनुपालन

यदि आप ईमेल, नाम, भुगतान जानकारी, या कोई PII एकत्र करते हैं, तो आपके पास कानूनी दायित्व हैं: डेटा न्यूनतमकरण, सुरक्षित भंडारण, मांग पर हटाना, और DPA तत्परता।

  1. गोपनीयता नीति लिखें और प्रकाशित करें (वैकल्पिक नहीं, इंडी SaaS के लिए भी)। बताएं कि आप कौन सा डेटा एकत्र करते हैं, क्यों, आप इसे कितने समय तक रखते हैं, और उपयोगकर्ता अधिकार (पहुंच, सुधार, विलोपन)। टर्मली या समान से एक टेम्पलेट का उपयोग करें लेकिन इसे कस्टमाइज़ करें।
  2. एक डिलीट-अकाउंट API एंडपॉइंट लागू करें जो डेटाबेस से PII को हटा देता है। इसका परीक्षण करें: एक खाता बनाएं, डेटा जोड़ें, खाता हटाएं, सत्यापित करें कि डेटा चला गया है (प्रत्यक्ष डेटाबेस निरीक्षण का उपयोग करें)।
  3. GDPR / CCPA अनुपालन के लिए, डेटा-विषय अनुरोधों (पहुंच/सुधार/हटाना) का 30 दिनों के भीतर जवाब दें। अपनी प्रक्रिया का दस्तावेज़ीकरण करें. यदि आपका ऐप EU- आधारित है या EU उपयोगकर्ताओं को सेवा प्रदान करता है, तो Stripe, Supabase, और किसी भी प्रोसेसर के साथ डेटा Proसेसिंग परिशिष्ट (DPA) की आवश्यकता होती है।
  4. संवेदनशील फ़ील्ड को आराम से एन्क्रिप्ट करें (पासवर्ड आपके प्रमाणीकरण प्रदाता द्वारा हैश किए गए हैं; लेकिन क्रेडिट-कार्ड टोकनाइजेशन, API कुंजी, रहस्यों को pgcrypto या बाहरी वॉल्ट का उपयोग करना चाहिए)। कभी भी प्लेनटेक्स्ट क्रेडिट-कार्ड नंबर संग्रहीत न करें (इसके बजाय Stripe टोकननाइजेशन का उपयोग करें)।

परिचालन तत्परता

सुरक्षा निरंतर है. घटना की प्रतिक्रिया, निगरानी और रनबुक पहले दिन से पहले शुरू हो जाती है।

  1. एक स्थिति पृष्ठ सेट करें (Statuspage.io, अपटाइम रोबोट, या एक साधारण index.html)। ग्राहकों को यह जानना आवश्यक है कि क्या आपके पास कोई आउटेज है। इसे हर घटना पर अपडेट करें.
  2. ऑन-कॉल रोटेशन का दस्तावेजीकरण और परीक्षण करें। रात 2 बजे के अलर्ट पर कौन जागता है? परिनियोजन कुंजियाँ किसके पास हैं? समझौता किए गए टोकन को कौन रद्द कर सकता है? इसे प्रलेखित करें और लॉन्च से पहले एक फायर-ड्रिल चलाएं।
  3. एक सुरक्षा घटना प्रतिक्रिया रनबुक लिखें: यदि कोई ग्राहक उल्लंघन की रिपोर्ट करता है, यदि आपकी चाबी खो जाती है, यदि कोई सेवा बंद हो जाती है तो क्या करें। इसे अपनी टीम को वितरित करें. योजना के कार्य को सत्यापित करने के लिए एक परिदृश्य का परीक्षण करें (e.g., एक कुंजी रिसाव का अनुकरण करें)।
  4. बैकअप और पुनर्स्थापना प्रक्रियाओं का परीक्षण किया जाना चाहिए, सैद्धांतिक नहीं। क्या आप बैकअप से पुनर्स्थापित कर सकते हैं? इसे समय दें. Supabase: स्वचालित बैकअप सक्षम करें (मुफ़्त में 7 दिन, भुगतान पर 30 दिन)। त्रैमासिक रूप से एक अलग प्रोजेक्ट में पुनर्स्थापना का परीक्षण करें।
  5. विशेषाधिकार प्राप्त संचालन के लिए ऑडिट लॉगिंग सक्षम करें: Stripe डैशबोर्ड लॉगिन, Supabase व्यवस्थापक API कॉल, डेटाबेस स्कीमा परिवर्तन, भुगतान समाधान। उपकरण: CloudTrail (AWS), Supabase ऑडिट लॉग, PostgreSQL pgaudit एक्सटेंशन।

बाहरी आक्रमण सतह

आपकी API सीमा लगातार हमलावर स्कैन के अधीन है। दुर्भावनापूर्ण ट्रैफ़िक आने से पहले इसे लॉक कर दें।

  1. प्रत्येक सार्वजनिक समापन बिंदु की दर-सीमा तय करें। उदाहरण: साइन-अप पर प्रति IP प्रति मिनट 100 अनुरोध, पासवर्ड रीसेट पर प्रति मिनट 100 अनुरोध। Vercel KV, रेडिस, या समान का उपयोग करें। 429 (बहुत अधिक अनुरोध) के साथ विफल।
  2. बॉट्स को हराने के लिए साइन-अप और पासवर्ड-रीसेट एंडपॉइंट में CAPTCHA (hCaptcha या reCAPTCHA) जोड़ें। अनुरोध स्वीकार करने से पहले टोकन सर्वर-साइड सत्यापित करें।
  3. यदि उपलब्ध हो तो WAF (वेब एप्लिकेशन फ़ायरवॉल) का उपयोग करें: Cloudflare, Vercel वेब एप्लिकेशन फ़ायरवॉल, या AWS WAF। ज्ञात-दुर्भावनापूर्ण आईपी और पैटर्न को स्वचालित रूप से ब्लॉक करें।
  4. खुले API एंडपॉइंट के लिए स्कैन करें। अपने उत्पादन डोमेन के विरुद्ध मासिक रूप से एक निष्क्रिय FixVibe स्कैन चलाएँ। उजागर डिबग मार्गों, GraphQL आत्मनिरीक्षण, API कुंजी रिसाव, या कॉन्फ़िगरेशन एक्सपोज़र के लिए निष्कर्षों की समीक्षा करें।
  5. क्रेडेंशियल्स (API कुंजियाँ, OAuth टोकन, डेटाबेस पासवर्ड) को त्रैमासिक घुमाएँ। रोटेशन प्रक्रिया का दस्तावेजीकरण करें और जहां संभव हो इसे स्वचालित करें।

अवलोकनशीलता और लॉगिंग

जब चीजें गलत हो जाती हैं, तो लॉग आपका फोरेंसिक रिकॉर्ड होते हैं। उन्हें पहले दिन से ही सेट करें.

  1. लॉग को केंद्रीकृत करें: Supabase लॉग, Vercel लॉग, एप्लिकेशन लॉग, और ऑथ लॉग एक ही डैशबोर्ड (डेटाडॉग, लॉगरॉकेट, या स्वयं-होस्टेड ELK) पर। खोजने योग्य, कम से कम 90 दिनों तक रखा जाता है।
  2. सुरक्षा घटनाओं पर चेतावनी: बार-बार विफल लॉगिन (संभावित खाता अधिग्रहण), असामान्य API उपयोग (संभावित स्क्रैपिंग), त्रुटि स्पाइक्स (संभावित हमला या वैध घटना)। थ्रेसहोल्ड और स्लैक एकीकरण सेट करें।
  3. प्रत्येक विशेषाधिकार प्राप्त ऑपरेशन के लिए ऑडिट लॉग उत्सर्जित करें: उपयोगकर्ता भूमिका परिवर्तन, नया व्यवस्थापक खाता निर्माण, भुगतान विधि परिवर्धन, API कुंजियों में दायरा परिवर्तन। इन्हें अपरिवर्तनीय अवधारण के साथ एप्लिकेशन लॉग से अलग संग्रहीत करें।

अंतिम सत्यापन

घोषणा करने से पहले, एक पूर्ण FixVibe स्कैन चलाएं और सुरक्षा दृष्टि से निष्कर्षों की समीक्षा करें।

  1. अपने उत्पादन डोमेन के विरुद्ध FixVibe Pro सक्रिय स्कैन चलाएँ। सक्रिय परीक्षण के लिए अपने डोमेन को कॉन्फ़िगर करें (DNS TXT या HTTP फ़ाइल सत्यापन)। स्कैन को अधिकृत करें और हर निष्कर्ष की समीक्षा करें - विशेष रूप से महत्वपूर्ण और उच्च गंभीरता। प्रत्येक को स्पष्ट रूप से ठीक करें या स्वीकार करें।
  2. निर्धारित पुन: स्कैन सक्षम करें: Pro योजना → 3 घंटे, 6 घंटे, 12 घंटे, या दैनिक। Unlimited योजना → 6 घंटे, 12 घंटे, दैनिक, हर 2 दिन या साप्ताहिक। अपने सत्यापित डोमेन पर IDOR / BOLA, SQL Injection, और Reflected Cross-Site Scripting (XSS) चेक के साथ युग्मित करें।
  3. वेबहुक कॉन्फ़िगर करें: FixVibe को स्लैक से कनेक्ट करें या ईमेल करें ताकि महत्वपूर्ण निष्कर्ष वास्तविक समय में अलर्ट ट्रिगर करें। सेटअप के लिए /docs/webhooks देखें.
  4. /docs/security-guides/ai-generated-code-security-scanner में गोचस पर ध्यान केंद्रित करते हुए अंतिम मैन्युअल कोड समीक्षा करें: बंडलों में रहस्य, RLS/rules, ऑथ सीमाएं, CSP, मिडलवेयर प्लेसमेंट। समीक्षा टेम्पलेट के रूप में vibe coding security checklist का उपयोग करें।

लॉन्च का दिन

आपने चेकलिस्ट साफ़ कर दी है. आत्मविश्वास के साथ तैनात करें. लॉन्च के बाद, सक्रिय रूप से निगरानी करें: पहले सप्ताह के लिए प्रतिदिन FixVibe निष्कर्षों की जांच करें, 1 घंटे के भीतर अलर्ट का जवाब दें, और स्कैन शेड्यूल चालू रखें। कोड स्निपेट के साथ चरण-दर-चरण हार्डनिंग गाइड के लिए, How to secure an app built with AI coding tools देखें।

// scan your app

पढ़ना बंद करें। अपने ऐप की खामियाँ ढूँढना शुरू करें।

Drop in a URL — FixVibe runs every passive check from this guide plus the rest of its 230+ passive checks, usually in under a minute. Free, no install, no card.

  • Free टियर - 3 स्कैन/माह, कोई कार्ड नहीं।
  • किसी भी URL के विरुद्ध निष्क्रिय स्कैन - किसी डोमेन सत्यापन की आवश्यकता नहीं है।
  • Cursor, Claude Code, Lovable, Bolt, v0, रेप्लिट के लिए ट्यून किया गया।
  • Coding-agent prompts for code/config findings, plus operator steps for DNS/provider fixes.
मुफ़्त स्कैन चलाएँ →

साइन-अप की ज़रूरत नहीं

SaaS प्री-लॉन्च सुरक्षा चेकलिस्ट: 36 आइटम · FixVibe