// docs / security guides / claude code checklist
Claude Code सुरक्षा चेकलिस्ट: 26 आइटम
Claude Code (एंथ्रोपिक का CLI एजेंट) स्लैश कमांड के माध्यम से संपूर्ण कोडबेस बनाता है, मल्टी-फ़ाइल रिफैक्टरिंग का प्रबंधन करता है, और बैश के माध्यम से /writes फ़ाइलों को पढ़ता है। यह चेकलिस्ट Claude Code के विशिष्ट जोखिमों को लक्षित करती है: कोई डिफ़ॉल्ट सुरक्षा नीतियां नहीं, दर-सीमितता शायद ही कभी जोड़ी जाती है, <code>.claude/CLAUDE.md</code> आपकी सुरक्षा-गार्डरेल फ़ाइल के रूप में, और <code>.env</code> या कैश्ड टोकन का जोखिम। रहस्य, डेटाबेस, प्रमाणीकरण, हेडर, परिनियोजन, और Claude Code-विशिष्ट गोचस में 26 आइटम।
PRE = पूर्व-तैनाती (अपने स्रोत का ऑडिट करें)। DEPLOY = तैनाती के समय। POST = तैनाती के बाद सत्यापन। आइटम संदर्भ FixVibe जहां प्रासंगिक हो वहां category.check-id फॉर्म में आईडी जांचें।
रहस्य और API कुंजियाँ (5 आइटम)
Claude Code संपूर्ण स्रोत वृक्षों को पढ़ता है और संपूर्ण फ़ाइलों को आउटपुट करता है। आपके संदर्भ में रहस्य आउटपुट में रहस्य बन जाते हैं।
- PRE — Create
.claude/CLAUDE.mdwith security policies. जोड़ें: "Security Rules: क्लाइंट बंडलों में कभी भी service_role कुंजियाँ इनलाइन न करें। हमेशा संवेदनशील संचालन को सर्वर-केवल एंडपॉइंट के माध्यम से रूट करें। सत्यापित करें कि NEXT_PUBLIC_* एनवी संस्करण में केवल सुरक्षित मान हैं (कोई कुंजी नहीं, कोई टोकन नहीं)।" प्रोजेक्ट मार्गदर्शन के लिए Claude Code पढ़ता है.claude/CLAUDE.md। - PRE — Ensure
.env.localis in.gitignore. Claude Code रिफैक्टर के दौरान गलती से.env.localहो सकता है। क्या ट्रैक किया गया है यह जाँचने के लिएgit ls-files .env*चलाएँ। यदि.env.localमौजूद है, तो यह उजागर हो गया है। - PRE — Audit generated API routes for env-var verification. Claude Code कभी-कभी यह सत्यापित करना भूल जाता है कि
process.env.SECRETइसका उपयोग करने से पहले सर्वर-साइड मौजूद है। यदि कोई env var गायब है तो रूट तेजी से विफल होने चाहिए, डिफ़ॉल्ट में नहीं आना चाहिए। - PRE — Check the
.claudecache directory. Claude Code वार्तालाप संदर्भ को.claude/cacheया.claude/historyमें कैश करता है। ये फ़ाइलें प्रतिबद्ध नहीं होनी चाहिए..claude/को.gitignoreमें जोड़ें। - POST — Run secrets.browser-storage on the deployed app. यदि Claude Code एक कुंजी इनलाइन है, तो निष्क्रिय स्कैन इसे प्रस्तुत बंडल में ढूंढ लेगा।
डेटाबेस अभिगम नियंत्रण (4 आइटम)
Claude Code स्कीमा तैयार करने में उत्कृष्ट है, लेकिन RLS नीतियों को स्पष्ट निर्देश की आवश्यकता है।
- PRE — Instruct Claude Code on RLS in
.claude/CLAUDE.md. जोड़ें: "प्रत्येक माइग्रेशन मेंALTER TABLE ... ENABLE ROW LEVEL SECURITYऔरFORCE ROW LEVEL SECURITYशामिल होना चाहिए। प्रत्येक नीति को उपयोगकर्ता केauth.uid()को मान्य करना होगा।" - PRE — Review generated migrations for
FORCE ROW LEVEL SECURITY. Claude CodeENABLEउत्पन्न हो सकता है लेकिनFORCEभूल जाओ।FORCEके बिना, टेबल मालिक (माइग्रेशन रनर) RLS को बायपास कर देते हैं। गुम होने पर इसे मैन्युअल रूप से जोड़ें। - DEPLOY — Test RLS enforcement after deploy. Supabase स्टूडियो खोलें, एक टेबल चुनें, पुष्टि करें कि RLS टॉगल ON है। यदि Claude Code का माइग्रेशन
FORCEके बिनाENABLEका उपयोग किया जाता है, तो टॉगल ON कहेगा लेकिन प्रवर्तन अधूरा है। - POST — Run the baas.supabase-rls active check. यह एनॉन कुंजी के साथ लिखने का प्रयास करता है। यदि यह सफल होता है, तो RLS अधूरा है। माइग्रेशन और पुनः तैनाती में
FORCEजोड़ें।
प्रमाणीकरण और सत्र (4 आइटम)
Claude Code प्रमाणीकरण प्रवाह अच्छी तरह से उत्पन्न करता है लेकिन स्वचालित रूप से दर-सीमित नहीं जोड़ता है या सभी टोकन दावों को सर्वर-साइड सत्यापित नहीं करता है।
- PRE — Mandate server-only auth verification in
.claude/CLAUDE.md. जोड़ें: "हर API रूट जो डेटा को बदलता है, उसे सर्वर परawait supabase.auth.getUser()के साथ उपयोगकर्ता को सत्यापित करना होगा। अनुरोध निकाय से कभी भीgetSession()या उपयोगकर्ता ID पर भरोसा न करें।" - PRE — Check generated auth handlers for token expiry. मैजिक-लिंक और पासवर्ड-रीसेट टोकन को सर्वर-प्रवर्तन की आवश्यकता है
expires_at। पूछें Claude Code: "एक चेक जोड़ें जो 1 घंटे से अधिक पुराने टोकन को अस्वीकार कर देता है।" - PRE — Verify sign-in redirect guards.
nextपरम रीडायरेक्ट/से शुरू होना चाहिए न कि//से।.claude/CLAUDE.mdमें जोड़ें: "nextपैरामीटर को मान्य करें:/से शुरू होना चाहिए, अगर यह//से शुरू होता है या इसमें कोई प्रोटोकॉल है तो इसे अस्वीकार कर दें।" - POST — Test logout clears cookies. साइन इन करें, साइन आउट करें, एप्लिकेशन का निरीक्षण करें → कुकीज़। सत्र कुकी साफ़ होनी चाहिए. यदि यह बना रहता है, तो लॉगआउट समापन बिंदु स्थिति को नष्ट नहीं कर रहा है।
HTTP हेडर और CSP (3 आइटम)
जब तक आप न पूछें Claude Code डिफ़ॉल्ट रूप से मिडलवेयर उत्पन्न नहीं करता है।
- PRE — Add middleware request to
.claude/CLAUDE.md. शामिल करें: "प्रति-अनुरोध नॉन्स, HSTS, एक्स-फ़्रेम-ऑप्शंस, और एक्स-कंटेंट-टाइप-ऑप्शंस हेडर का उपयोग करके Content-Security-Policy के साथsrc/middleware.tsजेनरेट करें।" फिर इसे लागू करने के लिए Claude Code से पूछें। - PRE — Verify
src/middleware.tsexists and has CSP. Next.jssrc/लेआउट के साथ, मिडलवेयरsrc/middleware.tsपर होना चाहिए, प्रोजेक्ट रूट पर नहीं। सत्यापित करें कि CSP हेडर में'strict-dynamic'और एक गैर शामिल है। - POST — Run headers.security-headers on the deployed URL. चेक गुम हेडर की रिपोर्ट करता है और आपके प्लेटफ़ॉर्म के लिए समाधान सुझाता है।
परिनियोजन स्वच्छता (4 आइटम)
Claude Code आपके परिनियोजन प्लेटफ़ॉर्म को कॉन्फ़िगर नहीं करता है - यह आपकी ज़िम्मेदारी है, लेकिन जाँच के लायक है।
- DEPLOY — Scope env vars per environment in Vercel (or equivalent). सेटिंग्स → पर्यावरण चर → प्रत्येक रहस्य को केवल Production को निर्दिष्ट करें। पूर्वावलोकन या विकास के साथ कभी भी
sk_live_*साझा न करें। - DEPLOY — Audit your CI workflow for secret echo. यदि GitHub क्रियाएँ या अन्य CI में कहीं भी
echo $SECRETहै, तो उसे हटा दें। बिल्ड लॉग संग्रहीत हैं; लॉग में रहस्यों से समझौता किया जाता है। - DEPLOY — Prefer platform-native secret storage. Vercel की सेटिंग्स → पर्यावरण चर एन्क्रिप्टेड है; GitHub क्रिया रहस्य कुछ भी नहीं होने से बेहतर हैं लेकिन प्लेटफ़ॉर्म-मूल भंडारण से मेल नहीं खाते हैं।
- POST — Rotate any key that reached a public build. यदि कोई कुंजी Vercel पूर्वावलोकन URL या किसी सार्वजनिक आर्टिफैक्ट में कुछ सेकंड के लिए भी दिखाई देती है, तो यह समझौता हो गया है। तुरंत घुमाएँ.
Claude Code-विशिष्ट गोचर (5 आइटम)
Claude Code के आर्किटेक्चर और वर्कफ़्लो के लिए अद्वितीय पैटर्न:
- Claude Code forks work into subagents. बड़े कार्यों पर, Claude Code एकाधिक उप-एजेंट उदाहरण उत्पन्न कर सकता है, प्रत्येक आंशिक कोडबेस संदर्भ के साथ। यदि एक उप-एजेंट एक गुप्त-सुरक्षित पैटर्न को मतिभ्रम करता है जो दूसरा नहीं करता है, तो असंगतता उभरती है। अंतिम अंतर की सावधानीपूर्वक समीक्षा करें।
- Bash operations are unverified. Claude Code सीधे बैश कमांड निष्पादित करता है।
git commit -m "fix"सुविधाजनक है, लेकिन यदि कार्यशील निर्देशिका में.envफ़ाइल है और एक ग्लोब में यह शामिल है, तो यह प्रतिबद्ध है। Claude Code प्रतिबद्ध होने से पहले हमेशाgit diff --cachedकी समीक्षा करें। - Context window boundaries create gaps. यदि आपका कोडबेस बड़ा है, तो Claude Code का संदर्भ कई विंडो में विभाजित हो सकता है। एक विंडो की
.env.localहैंडलिंग दूसरे से भिन्न हो सकती है।.claude/CLAUDE.mdमें नीति लागू करें और आउटपुट सत्यापित करें। - Rate-limiting is almost never added without asking. Claude Code कार्यशील CRUD उत्पन्न करता है लेकिन इसमें शायद ही कभी दर-सीमित हेडर या घातीय बैकऑफ़ तर्क शामिल होता है।
.claude/CLAUDE.mdमें स्पष्ट रूप से इसके लिए पूछें। .claude/CLAUDE.mdis read but not enforced. Claude Code आपके.claude/CLAUDE.mdको एक संकेत के रूप में पढ़ता है, बाधा के रूप में नहीं। यदि संकेत कार्य के साथ टकराव करता है, तो Claude Code इसे अनदेखा कर सकता है। हमेशा आउटपुट की समीक्षा करें.
अगले चरण
44 क्रॉस-टूल आइटम के लिए general vibe coding security checklist जांचें, फिर परिनियोजन-समय पैटर्न के लिए step-by-step hardening देखें। यदि आप भी Cursor का उपयोग कर रहे हैं, तो Cursor security checklist देखें।
