Claude Code, projenizi açar açmaz .env dosyalarınızı okur.
API anahtarlarınız, veritabanı şifreleriniz, Stripe token'larınız, .env dosyasındaki her şey belleğe yüklenir ve Anthropic'in sunucularına gönderilen konuşma günlüklerine dahil olabilir.
Erişimi gerçekten engelleyen tek şey, çoğu kişinin sahip olmadığı ve varlığından haberdar olmadığı settings.json dosyasındaki bir satırdır.
İşte tam güvenlik yapılandırması 👇
Detaylara girmeden önce, AI ve vibe coding hakkında günlük notlarımı Telegram kanalımda paylaşıyorum: **https://t.me/zodchixquant**🧠

CLAUDE.md kuralları neden sizi korumaz
Çoğu kişi CLAUDE.md dosyasına ".env dosyalarını asla okuma" ekler ve güvende olduklarını varsayar (değiller).
CLAUDE.md bir öneridir. Claude çoğu zaman buna uyar, ancak baskı altındayken (karmaşık görevler, uzun bağlam, belirsiz talimatlar) tavsiye niteliğindeki kuralları görmezden gelebilir ve görmezden gelir.
Nisan 2026'daki bir GitHub sorunu şunu doğruladı: CLAUDE.md açıkça yasaklasa bile Claude .env içeriğini okur ve konuşmaya yansıtır.
Tek güvenilir koruma, settings.json dosyasındaki bir reddetme kuralıdır. Reddetme kuralları, Claude dosyayı görmeden önce sistem düzeyinde uygulanır.
"Lütfen bunu okuma" ile "Bunu fiziksel olarak okuyamazsın" arasındaki fark budur.

Sırlarınızın sızdığı 3 yol
Bu sadece Claude'un .env dosyasını doğrudan okumasıyla ilgili değil. Üç yol vardır:
1. Doğrudan dosya okuma. Claude projenizi tarar, .env dosyasını açar ve içerik konuşma bağlamının bir parçası haline gelir. Bu bariz olandır ve reddetme kurallarıyla engellenmesi en kolay yoldur.
2. Çalışma zamanı çıktısı yakalama. Claude testlerinizi çalıştırır veya uygulamanızı başlatır. Başarısız bir HTTP isteği, Authorization: Bearer sk-live-abc123... başlığının tamamını günlüğe kaydeder. Bir veritabanı zaman aşımı, şifreyi de içeren bağlantı dizesini döküm eder. Claude tüm komut çıktılarını yakalar. Claude hiç .env dosyasını açmamış olsa bile, sırlarınız artık konuşmanın içindedir.
3. Grep ve arama araçları. Claude, kod tabanınızda bir fonksiyon adı aramak için grep kullanır. Arama, kimlik bilgileri içeren bir yapılandırma dosyasına rastlar. Grep çıktısı, sırlarınızın göründüğü eşleşen satırları içerir.
Çoğu kişi yalnızca 1. yola karşı koruma sağlar. Asıl hasar 2. ve 3. yollarda meydana gelir.
Gerçekten işe yarayan reddetme kuralları
Bunları, her projede genel koruma için ~/.claude/settings.json dosyasına ekleyin:
json
1{2 "permissions": {3 "deny": [4 "Read(**/.env*)",5 "Read(**/.dev.vars*)",6 "Read(**/*.pem)",7 "Read(**/*.key)",8 "Read(**/secrets/**)",9 "Read(**/credentials/**)",10 "Read(**/.aws/**)",11 "Read(**/.ssh/**)",12 "Read(**/config/database.yml)",13 "Read(**/config/credentials.json)",14 "Read(**/.npmrc)",15 "Read(**/.pypirc)",16 "Write(**/.env*)",17 "Write(**/secrets/**)",18 "Write(**/.ssh/**)"19 ]20 }21}
Bu, Claude'un herhangi bir .env dosyasını, PEM anahtarlarını, SSH anahtarlarını, AWS yapılandırmalarını, kimlik bilgisi dosyalarını ve npm/PyPI token'larını okumasını veya yazmasını engeller. \\ joker karakteri, projenizdeki her alt dizin için geçerli olduğu anlamına gelir.
Çalışma zamanı sızıntılarını engelleme
Reddetme kuralları doğrudan dosya okumalarını durdurur ancak çalışma zamanı çıktısını durdurmaz. Bunun için, sahte değerler içeren teste özel .env dosyaları kullanın:
1# .env.test — okunması güvenli, sızması güvenli2STRIPE_SECRET_KEY=sk_test_not_a_real_key3DATABASE_URL=postgres://test:test@localhost:5432/testdb4OPENAI_API_KEY=sk-test-dummy-key-for-mocking5AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE6AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Test framework'ünüzü .env yerine .env.test dosyasına yönlendirin. Artık Claude testlerinizi çalıştırıp çıktıyı yakaladığında, görünen tek anahtarlar sahte olanlardır.
Her şeyi yakalayan pre-commit hook'u
Reddetme kuralları olsa bile hatalar olur. Deponuza herhangi bir commit ulaşmadan önce sırları tarayan bir git pre-commit hook'u ekleyin:
bash
1#!/bin/bash2# .git/hooks/pre-commit — sır içeren commit'leri engeller34PATTERNS=(5 'sk-ant-' # Anthropic API anahtarları6 'sk-live-' # Stripe canlı anahtarları7 'sk_live_' # Stripe canlı anahtarları (alternatif format)8 'ghp_' # GitHub kişisel token'ları9 'gho_' # GitHub OAuth token'ları10 'AKIA' # AWS erişim anahtarları11 'xox[bpors]-' # Slack token'ları12 'SG\.' # SendGrid anahtarları13 'eyJ' # JWT'ler14 'BEGIN.*PRIVATE KEY' # Özel anahtar materyali15)1617BLOCKED_FILES=('.env' 'credentials.json' 'id_rsa' '*.pem' '*.key')1819for pattern in "${PATTERNS[@]}"; do20 if git diff --cached --diff-filter=ACM | grep -qE "$pattern"; then21 echo "ENGELLENDİ: '$pattern' ile eşleşen potansiyel sır bulundu"22 echo "Sırrı kaldırın ve tekrar deneyin."23 exit 124 fi25done2627for file in "${BLOCKED_FILES[@]}"; do28 if git diff --cached --name-only | grep -q "$file"; then29 echo "ENGELLENDİ: Hassas dosya commit'lenmeye çalışıldı: $file"30 exit 131 fi32done3334echo "Pre-commit güvenlik kontrolü başarılı."35exit 0
Çalıştırılabilir yapın: chmod +x .git/hooks/pre-commit
Bu, Anthropic API anahtarlarını, Stripe anahtarlarını, GitHub token'larını, AWS anahtarlarını, Slack token'larını, SendGrid anahtarlarını, JWT'leri ve özel anahtar materyalini yakalar. Bunlardan herhangi biri aşamalı bir dosyada görünürse, commit engellenir.
Kapsayıcı izolasyonu (nükleer seçenek)
Maksimum güvenlik için, Claude Code'u .env dosyalarının gerçekten var olmadığı bir kapsayıcı içinde çalıştırın:
bash
1# .env üzerine /dev/null bağlayın, böylece Claude onu göremez2docker run -v /dev/null:/app/.env:ro your-dev-container
Claude'un bakış açısından .env boş bir dosyadır. Sırlarınız asla kapsayıcı dosya sistemine girmez. Bu çoğu proje için aşırıdır ancak üretim kimlik bilgileri içeren müşteri çalışmaları için gereklidir.
Tam güvenlik yapılandırması (kopyala-yapıştır için hazır)
Tüm güvenlik korumalarıyla birlikte eksiksiz ~/.claude/settings.json:
json
1{2 "permissions": {3 "allow": [4 "Read",5 "Glob",6 "Grep",7 "LS",8 "Edit",9 "MultiEdit",10 "Write(src/**)",11 "Write(tests/**)",12 "Bash(npm run *)",13 "Bash(npm test *)",14 "Bash(npx tsc *)",15 "Bash(git status)",16 "Bash(git diff *)",17 "Bash(git log *)",18 "Bash(git add *)",19 "Bash(git commit *)"20 ],21 "deny": [22 "Read(**/.env*)",23 "Read(**/.dev.vars*)",24 "Read(**/*.pem)",25 "Read(**/*.key)",26 "Read(**/secrets/**)",27 "Read(**/credentials/**)",28 "Read(**/.aws/**)",29 "Read(**/.ssh/**)",30 "Read(**/config/database.yml)",31 "Read(**/config/credentials.json)",32 "Read(**/.npmrc)",33 "Read(**/.pypirc)",34 "Write(**/.env*)",35 "Write(**/secrets/**)",36 "Write(**/.ssh/**)",37 "Write(.github/workflows/*)",38 "Bash(rm -rf *)",39 "Bash(sudo *)",40 "Bash(git push *)",41 "Bash(npm publish *)",42 "Bash(curl * | sh)",43 "Bash(wget *)",44 "Bash(chmod *)"45 ],46 "defaultMode": "acceptEdits"47 }48}
Bu, önceki yazımdaki settings.json dosyası ve bu yazıdaki tüm güvenlik kurallarını içerir. Günlük iş akışı için izin kuralları, sırlar ve tehlikeli işlemler için reddetme kuralları. Tek dosya, tam koruma.
Kontrol listesi
Bir sonraki Claude Code oturumunuzdan önce:
- settings.json dosyasında .env dosyaları için reddetme kurallarınız var mı?
- Testleriniz sahte değerlerle .env.test kullanıyor mu?
- Sır kalıplarını tarayan bir pre-commit hook'unuz var mı?
- Üretim kimlik bilgileri bir kasada mı saklanıyor, düz metin dosyalarında değil mi?
- .env dosyanız .gitignore'da mı?
- Ekstra güvenlik için .env dosyaları proje dizininizin dışında mı?
6'sını da işaretlediyseniz, sırlarınız olabildiğince korunuyor demektir. 0'ını işaretlediyseniz, API anahtarlarınızın Anthropic'in sunucularındaki bir konuşma günlüğünde görünmesine yol açacak belirsiz bir Claude isteminden bir adım uzaktasınız.
AI, finans ve vibe coding hakkında günlük notlarımı Telegram kanalımda paylaşıyorum: **https://t.me/zodchixquant**
Okuduğunuz için teşekkürler🙏🏼






