Claude Code के साथ 7 वास्तविक प्रोडक्शन इंसिडेंट: RCA और रोकथाम सहित पूर्ण रिकवरी
Claude Code के साथ 7 वास्तविक प्रोडक्शन इंसिडेंट: API की लीक, DB डिलीट, बिलिंग विस्फोट और सेवा बाधा — मूल कारण विश्लेषण और रोकथाम रणनीतियों सहित।
“Claude Code सुविधाजनक है, लेकिन प्रोडक्शन में इसका उपयोग करने से डर लगता है” — कई डेवलपर्स ऐसा महसूस करते हैं। और यह अंतर्ज्ञान सही है।
Claude Code आपके फ़ाइल सिस्टम और शेल पर एक सामान्य IDE से अधिक विशेषाधिकारों के साथ काम करता है। साथ ही, बार-बार approve बटन क्लिक करने से सतर्कता कम हो जाती है — यह एक ज्ञात मानवीय मनोवैज्ञानिक कमज़ोरी है। जब ये दो कारक मिलते हैं, तो प्रोडक्शन इंसिडेंट होते हैं।
यह लेख Claude Code से जुड़े 7 वास्तविक प्रोडक्शन इंसिडेंट को कारणों, प्रभाव के दायरे, रिकवरी प्रक्रियाओं, RCA (मूल कारण विश्लेषण) और रोकथाम रणनीतियों के साथ दस्तावेज़ करता है। अपने संगठन में दुर्घटना होने से पहले इसे पढ़ें।
इंसिडेंट 1: API की लीक → ₹2,30,000 के अनधिकृत शुल्क
समय-रेखा
09:12 Claude Code को निर्देश: "CI को environment variables पास करने के लिए .env commit करें"
09:13 git add .env && git push बिना अनुमोदन के निष्पादित हुआ (allow सूची बहुत permissive थी)
09:14 GitHub Secret Scanning ने इसे detect किया, ईमेल नोटिफिकेशन भेजी
09:31 AWS crawler ने OpenAI की detect की, अनधिकृत उपयोग शुरू हुआ
11:00 OpenAI dashboard पर ₹2,30,000 का शुल्क confirm हुआ
रिकवरी प्रक्रिया
# Step 1: API की को तुरंत revoke करें (सर्वोच्च प्राथमिकता — 5 मिनट के भीतर)
# → OpenAI / प्रत्येक सेवा के dashboard में की revoke करें
# Step 2: git history से .env को पूरी तरह हटाएं
git filter-branch --force --index-filter \
"git rm --cached --ignore-unmatch .env" \
--prune-empty --tag-name-filter cat -- --all
# Step 3: सभी branches को force push करें
git push origin --force --all
git push origin --force --tags
# Step 4: पुनरावृत्ति रोकने के लिए .gitignore में जोड़ें
echo ".env" >> .gitignore
git add .gitignore && git commit -m "security: add .env to gitignore"
# Step 5: नई API की जारी करें और .env में सेट करें
RCA
- प्रत्यक्ष कारण:
settings.jsonमेंallowसूची मेंBash(git add*)था, जिससे बिना पुष्टि के निष्पादन हुआ - मूल कारण: प्रोडक्ट कोड के पक्ष में सुरक्षा कॉन्फ़िगरेशन को बाद के लिए टाल दिया गया
रोकथाम
// .claude/settings.json
{
"hooks": {
"PreToolUse": [{
"matcher": "Bash(git add*)",
"hooks": [{
"type": "command",
"command": "git diff --cached --name-only | grep -E '\\.env' && echo '🚨 .env detected! Aborting.' && exit 1 || exit 0"
}]
}]
}
}
इंसिडेंट 2: rm -rf से पूरा प्रोजेक्ट गायब हो गया
समय-रेखा
14:33 निर्देश: "node_modules clean up करें और reinstall करें"
14:33 Claude Code ने rm -rf node_modules निष्पादित किया (यहाँ तक सामान्य)
14:34 फॉलो-अप निर्देश "पुराने build files भी हटाएं" → rm -rf dist/ निष्पादित
14:34 Path की गलत व्याख्या: rm -rf dist /src चला (space separator के रूप में)
14:35 src/ directory पूरी तरह से हट गई। git के बाहर की config files भी गायब हुईं
14:40 git checkout . ने tracked files को restore किया, लेकिन .env और local configs स्थायी रूप से खो गए
रिकवरी प्रक्रिया
# git-tracked files restore की जा सकती हैं
git checkout .
git clean -fd # Extra files हटाएं
# git stash या reflog में हटाई गई files खोजें
git stash list
git reflog
# git के बाहर की files (.env आदि) backup से restore करें
# → backup न होने पर शुरू से reconfigure करें
RCA
- प्रत्यक्ष कारण: Space वाले path को ठीक से quote नहीं किया गया, जिसके परिणामस्वरूप
rm -rf dist /srcहुआ - मूल कारण:
rm -rfaskके बजायallowमें था
रोकथाम
{
"permissions": {
"deny": ["Bash(rm -rf ~*)", "Bash(rm -rf /*)"],
"ask": ["Bash(rm*)"]
},
"hooks": {
"PreToolUse": [{
"matcher": "Bash(rm*)",
"hooks": [{
"type": "command",
"command": "echo '⚠️ Delete command detected. Target: $CLAUDE_TOOL_INPUT_COMMAND\n5 seconds to execute. Ctrl+C to cancel.' && sleep 5"
}]
}]
}
}
इंसिडेंट 3: git push --force से 3 सहकर्मियों के commits मिट गए
समय-रेखा
16:00 निर्देश: "remote के साथ conflict है। local को प्राथमिकता दें और overwrite करें"
16:01 git push --force origin main निष्पादित हुआ
16:01 उस दिन 3 सहकर्मियों द्वारा commit किए गए ~200 lines के code मिट गए
16:10 सहकर्मी A का Slack पर संदेश: "अरे, मेरे commits गायब हैं"
16:15 कारण पहचाना गया। A और B के पास local copies थीं, लेकिन C ने अपनी delete कर दी थी — स्थायी नुकसान
रिकवरी प्रक्रिया
# reflog में खोए commits खोजें (push करने वाली machine पर)
git reflog | head -30
# → उदाहरण: abc1234 HEAD@{3}: --force push से पहले का commit
# खोए commits restore करें
git checkout -b recovery abc1234
git push origin recovery
# main में merge करें और cleanup करें
git checkout main
git merge recovery --no-ff
git push origin main
RCA
- प्रत्यक्ष कारण: Conflict resolve करने का इरादा
--force-with-leaseके बजाय--forceके रूप में interpret हुआ - मूल कारण: main branch पर force push
denylist में नहीं था
रोकथाम
{
"permissions": {
"deny": [
"Bash(git push --force *main*)",
"Bash(git push --force *master*)",
"Bash(git push -f *main*)"
]
}
}
<!-- CLAUDE.md -->
## Git नियम
- `git push --force` निषिद्ध है
- Conflict resolution के लिए `git push --force-with-lease` का उपयोग करें
- main/master पर push करने से पहले हमेशा user की पुष्टि लें
इंसिडेंट 4: DB Migration विफल होने से प्रोडक्शन के 40,000 रिकॉर्ड मिटे
समय-रेखा
10:00 निर्देश: "users table में phone_number column जोड़ने के लिए migration चलाएं"
10:01 Claude Code ने migration script generate और execute की
10:01 Script में bug के कारण reverse migration (DROP COLUMN के साथ) चल गया
10:02 प्रोडक्शन से users.email column (NOT NULL) हट गया
10:02 सभी APIs ने 500 errors देना शुरू किया, सेवा पूरी तरह बंद
10:05 Incident पहचाना गया, root cause जांच शुरू हुई
10:30 पिछले दिन के snapshot से restore (एक दिन का data खोया)
रिकवरी प्रक्रिया
# 1. सेवा को तुरंत maintenance mode में डालें
# nginx: return 503; या Vercel: maintenance page
# 2. DB की वर्तमान स्थिति जांचें
psql $DATABASE_URL -c "\d users"
# 3. Backup से restore करें (RDS के लिए)
aws rds restore-db-instance-to-point-in-time \
--source-db-instance-identifier mydb \
--target-db-instance-identifier mydb-restored \
--restore-time 2026-04-17T23:00:00Z
# 4. यदि column अभी भी मौजूद है, तो manually जोड़ें
ALTER TABLE users ADD COLUMN email VARCHAR(255);
UPDATE users SET email = '(recovery required)' WHERE email IS NULL;
# 5. सेवा restore करें
RCA
- प्रत्यक्ष कारण: Migration script generator ने up/down migrations को confuse किया
- मूल कारण: Staging environment में test किए बिना migration production में चलाया गया
रोकथाम
<!-- CLAUDE.md -->
## DB Migration अनिवार्य नियम
1. Production में apply करने से पहले हमेशा staging environment में test करें
2. Migration से पहले हमेशा manual backup लें:
pg_dump $DATABASE_URL > backup_$(date +%Y%m%d_%H%M%S).sql
3. DROP COLUMN / TRUNCATE / DELETE (WHERE के बिना) वाले scripts को
execute करने से पहले हमेशा user की पुष्टि लें
4. Production DATABASE_URL का उपयोग करते समय, execute करने से पहले दिखाएं 'PRODUCTION DB में लिख रहे हैं। जारी रखें?'
इंसिडेंट 5: अनंत API calls से रात भर में ₹62,000 का शुल्क
समय-रेखा
23:00 निर्देश: "errors पर automatically retry करें" और batch processing शुरू की
23:01 External API ने 503 लौटाना शुरू किया
23:01 Retry logic बिना सीमा के चला, हर second API को hit करता रहा
07:00 अगली सुबह Anthropic की notification: "Usage limit के करीब है"
07:05 28,000 API calls और ₹62,000 का शुल्क पाया गया
रिकवरी प्रक्रिया
# 1. Process को तुरंत बंद करें
pkill -f "node batch-process.js"
# 2. Charges की समीक्षा करें और Anthropic support से संपर्क करें
# → ईमानदार संचार से partial refund हो सकता है
# 3. Usage alerts सेट करें
# Anthropic console → Usage Limits → Monthly budget alert सेट करें
रोकथाम
// utils/retry.ts — हमेशा इस utility का उपयोग करें
export async function withRetry<T>(
fn: () => Promise<T>,
{ maxAttempts = 3, baseDelayMs = 1000, maxDelayMs = 30000 } = {}
): Promise<T> {
for (let attempt = 1; attempt <= maxAttempts; attempt++) {
try {
return await fn();
} catch (err) {
if (attempt === maxAttempts) throw err;
const delay = Math.min(
baseDelayMs * 2 ** (attempt - 1) + Math.random() * 500,
maxDelayMs
);
console.warn(`Retry ${attempt}/${maxAttempts} in ${Math.round(delay)}ms`);
await new Promise(r => setTimeout(r, delay));
}
}
throw new Error("unreachable");
}
<!-- CLAUDE.md -->
## API Call नियम
- अधिकतम 3 retries, exponential backoff अनिवार्य
- while(true) + API calls सख्त रूप से निषिद्ध हैं
- Batch jobs में explicit count limits होनी चाहिए
- Production execution से पहले --dry-run smoke test चलाएं
इंसिडेंट 6: Deploy के बाद टूटी dependencies ने सेवा बंद कर दी
समय-रेखा
15:00 निर्देश: "packages को latest versions पर update करें"
15:01 npm update चला, package-lock.json में बड़े बदलाव हुए
15:05 Local build सफल रहा
15:10 Production में deploy किया
15:12 Production dependencies में major version mismatch, startup विफल
15:12 503 errors, सेवा पूरी तरह बंद
15:30 पिछले version पर rollback पूरा हुआ
रिकवरी प्रक्रिया
# Vercel / Cloudflare Pages के लिए: पिछले deployment को तुरंत reactivate करें
# → Dashboard से एक-क्लिक rollback
# git revert से code वापस करें
git revert HEAD~1
git push
# package-lock.json को पिछले version पर restore करें
git checkout HEAD~1 -- package-lock.json
npm ci # package-lock.json को strictly उपयोग करता है
RCA
- प्रत्यक्ष कारण:
npm updateने major version upgrade किया, जिससे breaking change हुआ - मूल कारण: Staging environment में deployment verification skip किया गया
रोकथाम
<!-- CLAUDE.md -->
## Package Management नियम
- npm update निषिद्ध है (npm update --save-dev conditionally OK)
- Packages के major version upgrades के लिए user की पुष्टि अनिवार्य
- Deploy करने से पहले हमेशा staging में behavior verify करें
- Production deployment के बाद 5 मिनट तक error logs monitor करें
इंसिडेंट 7: गलत Permission सेटिंग से सभी users का data सार्वजनिक हुआ
समय-रेखा
11:00 निर्देश: "admin panel API endpoint में user list जोड़ें"
11:05 /api/admin/users बिना authentication check के implement किया गया
11:10 Production में deploy किया
11:10 सभी users की personal information किसी के लिए भी accessible हो गई
13:30 Security audit tool ने unauthenticated endpoint detect किया
13:35 Endpoint तुरंत disable किया गया
रिकवरी प्रक्रिया
# 1. प्रभावित endpoint को तुरंत disable करें
# nginx: location /api/admin { return 403; }
# 2. Exposure के दायरे को निर्धारित करने के लिए access logs की समीक्षा करें
grep "/api/admin/users" /var/log/nginx/access.log | \
awk '{print $1}' | sort | uniq -c | sort -rn
# 3. प्रभावित users को notify करें (Personal Data Protection Act की आवश्यकताएं जांचें)
# 4. Authentication middleware जोड़ें और redeploy करें
RCA
- प्रत्यक्ष कारण: “Admin panel में जोड़ें” निर्देश ने authentication requirements नहीं बताई
- मूल कारण: Security requirements CLAUDE.md में documented नहीं थीं
रोकथाम
<!-- CLAUDE.md -->
## API Security अनिवार्य आवश्यकताएं
- /api/admin/* endpoints में हमेशा admin authentication implement करें
- /api/user/* endpoints में हमेशा login authentication implement करें
- केवल /api/public/* endpoints बिना authentication के accessible हैं
- नई API जोड़ते समय, required authentication level को comment में स्पष्ट रूप से लिखें
Incident Response का सामान्य प्रवाह (Postmortem Template)
# Postmortem: [Incident का शीर्षक]
## सारांश
- हुआ: YYYY-MM-DD HH:MM
- पता चला: YYYY-MM-DD HH:MM
- हल हुआ: YYYY-MM-DD HH:MM
- प्रभाव: (users की संख्या / features / अवधि)
- गंभीरता: P0/P1/P2/P3
## समय-रेखा
| समय | घटना |
|-------|------|
| HH:MM | Incident हुआ |
| HH:MM | पता चला |
| HH:MM | Response शुरू हुई |
| HH:MM | Root cause पहचाना गया |
| HH:MM | Recovery पूरी हुई |
## मूल कारण
- प्रत्यक्ष कारण:
- मूल कारण:
- बढ़ाने वाला कारण:
## रोकथाम कार्रवाइयां
| कार्रवाई | जिम्मेदार | समय-सीमा |
|----------|-----------|----------|
| | | |
## सीखे गए सबक
सारांश: Incidents रोकने के लिए न्यूनतम Configuration
// अभी copy करें और .claude/settings.json में paste करें
{
"permissions": {
"deny": [
"Bash(rm -rf ~*)",
"Bash(rm -rf /*)",
"Bash(git push --force *main*)",
"Bash(git push --force *master*)",
"Bash(git push -f *main*)",
"Bash(DROP TABLE*)",
"Bash(TRUNCATE *)",
"Bash(curl * | bash)",
"Bash(wget * | sh)"
],
"ask": [
"Write(**)", "Edit(**)",
"Bash(rm*)", "Bash(git commit*)",
"Bash(git push*)", "Bash(*deploy*)",
"Bash(npm install*)", "Bash(*migrate*)"
]
},
"hooks": {
"PreToolUse": [
{
"matcher": "Bash(git add*)",
"hooks": [{ "type": "command",
"command": "git diff --cached --name-only | grep '\\.env' && echo '🚨 .env detected! Aborting.' && exit 1 || exit 0" }]
},
{
"matcher": "Bash(rm*)",
"hooks": [{ "type": "command",
"command": "echo '⚠️ Delete command detected. Executing in 5 seconds. Ctrl+C to cancel.' && sleep 5" }]
}
]
}
}
Production incidents तब होते हैं जब आप configuration के लिए 30 मिनट बचाने की कोशिश करते हैं। इस लेख के सभी 7 incidents को उचित settings.json और CLAUDE.md से रोका जा सकता था।
संबंधित लेख
- Claude Code Security Best Practices का पूर्ण गाइड
- Claude Code Security के 7 विफलता मामले
- Claude Code Permissions का पूर्ण गाइड
संदर्भ
अपने Claude Code वर्कफ़्लो को अगले स्तर पर ले जाएँ
Claude Code में तुरंत कॉपी-पेस्ट करने योग्य 50 आज़माए हुए प्रॉम्प्ट टेम्पलेट।
मुफ़्त PDF: 5 मिनट में Claude Code चीटशीट
बस अपना ईमेल दर्ज करें और हम तुरंत A4 एक-पृष्ठ चीटशीट PDF भेज देंगे।
हम आपकी व्यक्तिगत जानकारी की सुरक्षा करते हैं और स्पैम नहीं भेजते।
लेखक के बारे में
Masa
Claude Code का गहराई से उपयोग करने वाले इंजीनियर। claudecode-lab.com चलाते हैं, जो 10 भाषाओं में 2,000 से अधिक पेजों वाला टेक मीडिया है।
संबंधित लेख
Claude Code API लागत पर पूरा नियंत्रण: $450 से $45/महीने तक की 90% बचत के 5 तरीके
Claude Code API की असली कीमतें और आंकड़े। प्रॉम्प्ट कैशिंग, मॉडल ऑप्टिमाइज़ेशन और बैच प्रोसेसिंग से $450 से $45 प्रति माह की 90% बचत कैसे हासिल की—पूरी जानकारी।
Claude Code के 10 खतरनाक Prompt Patterns | क्या न करें और सुरक्षित विकल्प
Claude Code को कभी न दें ये 10 खतरनाक prompt patterns। जानें कैसे अस्पष्ट निर्देश code नष्ट, DB बर्बाद, भारी बिल और key leak का कारण बनते हैं—सुरक्षित विकल्पों के साथ।
Claude Code सुरक्षा सर्वोत्तम प्रथाएं: API कुंजी, अनुमतियां और प्रोडक्शन सुरक्षा
Claude Code को सुरक्षित रूप से उपयोग करने के लिए व्यावहारिक सुरक्षा मार्गदर्शिका। API कुंजी प्रबंधन से लेकर अनुमति सेटिंग्स, Hooks-आधारित स्वचालन और प्रोडक्शन परिवेश सुरक्षा तक — कार्यशील कोड उदाहरणों के साथ।