Foruma hoş geldin 👋, Ziyaretçi

Forum içeriğine ve tüm hizmetlerimize erişim sağlamak için foruma kayıt olmalı ya da giriş yapmalısınız. Foruma üye olmak tamamen ücretsizdir.

.env Dosyalarını Güvenli Yönetmek ve Secret Key'leri Asla Version Control'a Sokmamak İçin Taktikler

✖ Kapat
Duyuru
✖ Kapat
Duyuru

stackor

Üye
Katılım
14 Mart 2026
Mesajlar
51
Merhaba arkadaşlar, bugün başımı çok ağrıtan ve yeni başlayan herkesin mutlaka bir kez yaşadığı bir konudan bahsedeceğim: gizli anahtarların (secret keys) ve .env dosyalarının güvenliği. İtiraf ediyorum, ilk projelerimden birinde API anahtarımı commit'leyip public repo'ya ittiğimde, o anahtarı resetlemek ve maillerle uğraşmak beni çok yormuştu. İşte o günden beri edindiğim, kurşun geçirmez diyebileceğim taktikler.

🔥 .env Nedir ve Neden Bu Kadar Kritik?

Basitçe, .env dosyası projenizin çevresel değişkenlerini (environment variables) tuttuğunuz bir yapılandırma dosyasıdır. Veritabanı şifreleri, API anahtarları, JWT secret'ları gibi asla paylaşılmaması gereken her şey burada durur. Bu dosyayı Git gibi bir version control sistemine (VCS) gönderirseniz, tüm bu sırlar herkese açık hale gelir. Bu da güvenlik açığından tutun da, kötüye kullanılan API'lerden dolayı size gelecek faturalara kadar birçok kabusa davetiye çıkarır.

🛡️ Temel ve En Kritik Adım: .gitignore

İlk ve değişmez kural: Projenizin kök dizinindeki .gitignore dosyanıza .env'i eklemek. Bu, Git'in bu dosyayı takip etmemesini ve dolayısıyla commit'lememesini sağlar. Eğer ekli değilse hemen ekleyin.

Kod:
# .gitignore dosyasına ekleyin
.env
.env.local
.env..local
.env

ÖNEMLİ UYARI: .env dosyanızı .gitignore'a ekledikten SONRA, daha önce commit'lenmişse, Git'in cache'inden de temizlemeniz gerekir. Yoksa dosya takip edilmese bile history'de kalır. Bunun için:

Bash:
git rm --cached .env
git commit -m "Remove .env from version control"

📝 .env.example ile Takım Arkadaşlarını Kurtarmak

.env dosyanızı paylaşmıyorsunuz, peki projenizi klonlayan diğer geliştiriciler veya siz (birkaç ay sonra) hangi değişkenlere ihtiyaç olduğunu nereden bilecek? İşte burada .env.example dosyası devreye giriyor. Bu dosyayı VCS'e ekleyin. İçinde, gerekli tüm değişken isimlerini, örnek (veya boş) değerlerle listeleyin.

Kod:
# .env.example dosyası
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=

API_BASE_URL=https://api.orneksite.com
API_KEY=buraya_gercek_anahtarinizi_yazin
JWT_SECRET=super_gizli_bir_anahtar_uret

APP_DEBUG=false

Böylece herkes, bu dosyayı kopyalayıp `.env` ismiyle kaydedip, kendi gerçek değerlerini doldurarak çalışmaya başlayabilir.

⚙️ Gelişmiş Senaryolar ve Otomasyon

1. Ortama Göre Farklı .env Dosyaları: `NODE_ENV` gibi bir değişkene bağlı olarak farklı dosyalar yükleyebilirsiniz. Örneğin `.env.development`, `.env.production`. Kütüphaneler genelde `.env.local` dosyasını da öncelikli olarak okur.

2. Sunucu (Production) Ortamı: Asla sunucuya .env dosyası FTP ile atmayın! Modern hosting/cloud ortamları (Heroku, Vercel, AWS, Laravel Forge vb.) genelde bir web arayüzü üzerinden environment variables tanımlamanıza izin verir. Bu, en güvenli yöntemdir. Kodunuz `process.env` veya `$_ENV` ile bu değerlere doğrudan erişir.

3. Laravel Özelinde Artisan Komutu: Laravel'de `.env` dosyası yoksa, projeyi ilk çalıştırdığınızda sizi otomatik olarak `php artisan key:generate` komutunu çalıştırmaya yönlendirir. Bu, `APP_KEY` için güvenli bir anahtar üretir ve `.env` dosyanıza yazar. Bu komutu asla unutmayın!

Bash:
php artisan key:generate

4. Node.js (dotenv) ile Kullanım: Node.js projelerinde `dotenv` paketini kullanıyorsanız, kodunuzun en başında yapılandırmanızı yapın.

JavaScript:
// app.js veya server.js
require('dotenv').config(); // .env dosyasını okur ve process.env'e yükler

const express = require('express');
const app = express();

const apiKey = process.env.API_KEY; // Bu şekilde erişirsiniz
console.log('Uygulama', process.env.NODE_ENV, 'ortamında başlatıldı.');

✅ Son Söz ve Güvenlik Kontrol Listesi

✅ .env dosyasını .gitignore'a ekledin mi?
✅ .env.example dosyasını oluşturup VCS'e ekledin mi?
✅ Daha önce commit'lenmiş bir .env dosyası varsa cache'ten sildin mi?
✅ Sunucu ortamında GUI üzerinden environment variables tanımladın mı?
✅ API anahtarlarınızı düzenli olarak rotate ediyor/check ediyor musunuz?

Bu yöntemler benim projelerimde işe yarayan temel taşlar. Sizin ekstra olarak uyguladığınız, özellikle büyük ekiplerle çalışırken secret'ları yönetmek için kullandığınız farklı bir sistem var mı? (Mesela HashiCorp Vault, AWS Secrets Manager gibi). Yorumlarda deneyimlerinizi paylaşırsanız çok sevinirim!
 

Tema özelleştirme sistemi

Bu menüden forum temasının bazı alanlarını kendinize özel olarak düzenleye bilirsiniz.

Zevkine göre renk kombinasyonunu belirle

Tam ekran yada dar ekran

Temanızın gövde büyüklüğünü sevkiniz, ihtiyacınıza göre dar yada geniş olarak kulana bilirsiniz.

Geri