// docs / security guides / cursor checklist
Cursor सुरक्षा चेकलिस्ट: शिप करने से पहले 28 आइटम
Cursor के साथ बिल्डिंग? Cursor के स्वत: पूर्ण, संगीतकार मोड और एजेंट सुविधाएँ असाधारण रूप से शक्तिशाली हैं - और पूर्वानुमानित सुरक्षा ब्लाइंड स्पॉट बनाते हैं। यह चेकलिस्ट Cursor-विशिष्ट पैटर्न को लक्षित करती है: सेवा-भूमिका कुंजी इनलाइनिंग, समीक्षा के बिना संगीतकार-जनित संपूर्ण फ़ाइलें, एजेंट-मोड टर्मिनल कमांड, और आपकी पहली सुरक्षा रेलिंग के रूप में <code>.cursorrules</code> फ़ाइल। रहस्य, डेटाबेस, प्रमाणीकरण, हेडर, परिनियोजन, और Cursor-विशिष्ट गोचस में 28 आइटम।
PRE = पूर्व-तैनाती (अपने स्रोत का ऑडिट करें)। DEPLOY = तैनाती के समय। POST = तैनाती के बाद सत्यापन। आइटम संदर्भ FixVibe जहां प्रासंगिक हो वहां category.check-id फॉर्म में आईडी जांचें।
रहस्य और API कुंजियाँ (5 आइटम)
Cursor के स्वत: पूर्ण को ओपन-सोर्स कोड पर प्रशिक्षित किया जाता है जहां रहस्य आम हैं। मॉडल उन्हें स्वतंत्र रूप से सुझाव देता है, विशेष रूप से असफल प्रमाणीकरण प्रयास के बाद।
- PRE — Write security rules into
.cursorrules. एक पंक्ति जोड़ें: "कभी भी क्लाइंट-साइड कोड में प्रदाता के संक्षिप्त नाम से शुरू होने वालेSUPABASE_SERVICE_ROLE_KEY,sk_live_*, या किसी भी एनवी संस्करण को इनलाइन न करें। हमेशा केवल सर्वर आयात का उपयोग करें।" Cursor.cursorrulesपढ़ता है और इसे प्रत्येक सुझाव में शामिल करता है। - PRE — Audit Composer-generated files. जब Cursor का कंपोजर एक संपूर्ण फ़ाइल बनाता है (विशेषकर ऑथ हैंडलर), तो उसकी पंक्ति-दर-पंक्ति समीक्षा करें। संगीतकार कभी-कभी ऐसे एनवी वर्र्स को इनलाइन करता है जो केवल सर्वर पर ही रहना चाहिए। घटक आयात में
NEXT_PUBLIC_या सेवा कुंजियों के प्रत्यक्ष संदर्भ देखें। - PRE — Reject auto-imports of service clients into client components. यदि कंपोज़र
import { supabase } from '@/lib/supabase/service'को रिएक्ट फ़ाइल में आयात करता है, तो इसे तुरंत हटा दें और इसके बजाय API एंडपॉइंट के माध्यम से रूट करें। केवल-सर्वर आयात स्पष्ट रूप से चिह्नित हैं - उन्हें छोड़ें नहीं। - PRE — Scan Agent-mode commits. एजेंट मोड टर्मिनल कमांड चलाता है और सीधे प्रतिबद्ध हो सकता है। यह सुनिश्चित करने के लिए
git log --oneline -20औरgit diff HEAD~5का ऑडिट करें कि एजेंट रन के दौरान कोई गुप्त दिखने वाली स्ट्रिंग प्रतिबद्ध न हो। - POST — Run secrets.browser-storage. तैनात URL पर निष्क्रिय स्कैन। यदि JS बंडल में कोई सेवा कुंजी दिखाई देती है, तो उसे तुरंत घुमाएं - Cursor के स्वत: पूर्ण होने से संभवतः यह इनलाइन हो जाएगा।
डेटाबेस अभिगम नियंत्रण (4 आइटम)
कंपोज़र अक्सर वर्किंग ऑथ कोड जेनरेट करता है लेकिन RLS को छोड़ देता है - "यह काम करता है" पल लोगों को लापता नीति प्रवर्तन के प्रति अंधा कर देता है।
- PRE — Force Cursor to generate migrations with RLS.
.cursorrulesमें: "प्रत्येकCREATE TABLE public.*माइग्रेशन मेंALTER TABLE ... ENABLE ROW LEVEL SECURITYऔरFORCE ROW LEVEL SECURITYशामिल होना चाहिए।" फिर कंपोजर से माइग्रेशन जेनरेट करने के लिए कहें। - PRE — Review Composer-generated policies. संगीतकार कभी-कभी
auth.uid()की जांच किए बिना नीतियां लिखते हैं।usingखंड के बिनाallow select on public.itemsजैसी नीतियां खतरनाक रूप से व्यापक हैं। user_id मिलान की आवश्यकता है. - DEPLOY — Confirm
FORCE ROW LEVEL SECURITYis live. Supabase स्टूडियो खोलें, प्रत्येक तालिका का RLS टॉगल जांचें। यदि संगीतकार के माइग्रेशन मेंENABLEथा लेकिनFORCEभूल गया, तो टेबल मालिक (आपका माइग्रेशन) RLS को बायपास कर देंगे। यह एक वास्तविक अंतर है. - POST — Run the baas.supabase-rls active check. यह एनॉन कुंजी के साथ लिखने का प्रयास करता है। यदि यह सफल होता है, तो RLS वास्तव में लागू नहीं हो रहा है - संभवतः
FORCEकीवर्ड गायब है।
प्रमाणीकरण और सत्र (4 आइटम)
Cursor तेजी से प्रमाणीकरण प्रवाह उत्पन्न करता है लेकिन अक्सर सूक्ष्म सर्वर-साइड सत्यापन छूट जाता है जो टोकन को सुरक्षित रखता है।
- PRE — Ensure all auth routes use
getUser(). अपने API मार्गों मेंgetSession()खोजें औरawait supabase.auth.getUser()से बदलें।getSession()एक असत्यापित कुकी पढ़ता है;getUser()Supabase बैकएंड के साथ मान्य होता है। - PRE — Check Composer auth handlers for token expiry. मैजिक-लिंक टोकन को सर्वर-प्रवर्तन की आवश्यकता है
expires_at। डिफ़ॉल्ट Supabase 1 घंटा है - Cursor को बिना किसी वास्तविक कारण के इसे ओवरराइड करने के लिए न कहें। - PRE — Audit the sign-in redirect guard. साइन-इन के बाद
nextक्वेरी परम रीडायरेक्ट को मान्य किया जाना चाहिए:/से शुरू होना चाहिए,//से कभी नहीं। संगीतकार कभी-कभी इसे छोड़ देता है। गुम होने पर इसे मैन्युअल रूप से जोड़ें। - POST — Test logout server-side state destruction. साइन इन करें, साइन आउट करें, कुकीज़ का निरीक्षण करें (DevTools → एप्लिकेशन → कुकीज़)। सत्र कुकी को तुरंत साफ़ किया जाना चाहिए. यदि यह बना रहता है, तो लॉगआउट हैंडलर स्थिति को नष्ट नहीं कर रहा है।
HTTP सुरक्षा हेडर और CSP (3 आइटम)
Cursor डिफ़ॉल्ट रूप से शायद ही कभी मिडलवेयर उत्पन्न करता है। यदि आप स्पष्ट रूप से नहीं पूछते हैं, तो CSP और HSTS आमतौर पर वहां नहीं होते हैं।
- PRE — Demand CSP in
.cursorrules. जोड़ें: "Content-Security-Policy के साथsrc/middleware.tsजेनरेट करें। स्क्रिप्ट-src के लिए नॉन का उपयोग करें, कोई असुरक्षित-इनलाइन नहीं।" फिर इसे उत्पन्न करने के लिए Cursor से पूछें। इस संकेत के बिना, मिडलवेयर को छोड़ दिया जाता है। - PRE — Verify
src/middleware.tsexists.src/निर्देशिका लेआउट के साथ, Next.js केवलsrc/middleware.tsको चुनता है। रूट-स्तरmiddleware.tsको चुपचाप अनदेखा कर दिया जाता है। यदि CSP लैंडिंग नहीं हो रही है, तो जांचें कि फ़ाइल सही जगह पर है। - POST — Run headers.security-headers. निष्क्रिय स्कैन रिपोर्ट गायब हैं CSP, HSTS, एक्स-फ़्रेम-विकल्प, एक्स-सामग्री-प्रकार-विकल्प। रिपोर्ट खोलें और अपने परिनियोजन प्लेटफ़ॉर्म के लिए फ़िक्स मार्गदर्शन का पालन करें।
परिनियोजन स्वच्छता (5 आइटम)
Cursor ऐप्स अक्सर Vercel पर आते हैं, जिसमें अच्छे डिफॉल्ट होते हैं लेकिन बिल्ड/deploy सीमा के लिए स्पष्ट रूप से सख्त होने की आवश्यकता होती है।
- DEPLOY — Check Vercel env-var scoping. सेटिंग्स → पर्यावरण चर → प्रत्येक रहस्य को केवल Proडक्शन तक ही सीमित किया जाना चाहिए। पूर्वावलोकन या विकास के साथ कभी भी
sk_live_*साझा न करें। - DEPLOY — Disable build-log secret echo. यदि आपके
vercel.jsonया GitHub एक्शन वर्कफ़्लो मेंecho $SECRETहै, तो इसे हटा दें। बिल्ड लॉग सार्वजनिक रूप से संग्रहीत हैं; लॉग में रहस्यों से समझौता किया जाता है। - DEPLOY — Use Vercel's managed secrets, not inline workflow vars. Vercel की सेटिंग्स → पर्यावरण चर को बाकी समय एन्क्रिप्ट किया गया है। GitHub क्रियाओं के रहस्य कुछ भी नहीं से बेहतर हैं, लेकिन CI के लिए डिज़ाइन किए गए हैं, परिनियोजन प्लेटफ़ॉर्म एकीकरण के लिए नहीं।
- POST — Verify CSP nonce on the deployed preview. ब्राउज़र में Vercel पूर्वावलोकन लिंक खोलें, DevTools → Network → रूट HTML प्रतिक्रिया खोलें। CSP हेडर मौजूद होना चाहिए और प्रति अनुरोध एक अद्वितीय गैर के साथ
'strict-dynamic'शामिल होना चाहिए। - POST — Rotate any key that ever shipped, even to Preview. यदि कोई कुंजी 10 मिनट के लिए भी उत्पादन बंडल तक पहुंच गई, तो यह समझौता हो गया है। तुरंत घुमाएँ.
Cursor-विशिष्ट गोचर (4 आइटम)
Cursor के वर्कफ़्लो के लिए अद्वितीय पैटर्न जो सुरक्षा जोखिम पैदा करते हैं:
- Agent mode auto-fixes propagate old patterns. यदि आप एजेंट से "ऑथ त्रुटियों को ठीक करने" के लिए कहते हैं, तो यह एक ही ऑथ फ़ाइल को कई बार पुन: उत्पन्न कर सकता है, यदि यह कोडबेस संदर्भ में है तो हर बार एक ही सेवा कुंजी को इनलाइन कर सकता है। पहले मूल को साफ़ करें, फिर एजेंट से ठीक करने के लिए कहें।
- Cursor Index leaks intent. Cursor की
@codebaseअनुक्रमणिका शक्तिशाली है लेकिन यदि आपकी.cursorनिर्देशिका कभी उजागर होती है (गलत कॉन्फ़िगर S3, git इतिहास), तो सूचकांक आपके आर्किटेक्चर और गुप्त पैटर्न को प्रकट करता है।.cursorस्थानीय रखें. - Composer mode loses context between files. कंपोजर द्वारा तैयार की गई प्रत्येक फ़ाइल ताज़ा है। यदि आप इसे क्लाइंट फ़ाइल जेनरेट करने के लिए कहते हैं, तो एक API रूट, वे अलग-अलग Supabase क्लाइंट कॉन्फ़िगरेशन का उपयोग कर सकते हैं। दोनों की समीक्षा करें और सुनिश्चित करें कि वे आपकी वास्तुकला से मेल खाते हों।
- Autocomplete bias toward "working" over "secure". Cursor सबसे तेज़ कोड सुझाता है जो आपके वर्तमान संदर्भ को पार करता है। यदि आपके परीक्षण में
NEXT_PUBLIC_SERVICE_KEYहै, तो स्वत: पूर्ण इसे याद रखता है और इसे फिर से सुझाता है। मॉडल के साथ कोड साझा करने से पहले परीक्षण फिक्स्चर को साफ करें।
अगले चरण
एक बार जब आप Cursor-विशिष्ट पैटर्न को लॉक कर लें, तो general vibe coding security checklist (44 आइटम) और फिर step-by-step hardening के विरुद्ध क्रॉस-चेक करें। यदि आप उपकरण मिश्रण कर रहे हैं तो Claude Code checklist भी देखें।
