Bloga dön

BaşlarkenKılavuz

Bir API anahtarını güvenle saklayın: ortam değişkeni, .gitignore, sızıntı düzeltmesi

CheapTokens anahtarınızı koddan ve git'ten uzak tutun: bir ortam değişkeni ayarlayın, .env dosyasını .gitignore'a ekleyin ve anahtar sızarsa ne yapacağınızı bilin.

Yazan: CheapTokens TeamYayınlanma tarihi: 4 dk okuma

Bir ortam değişkeni export'u ve bir API anahtarı için .gitignore satırı içeren terminal
Bu sayfada
  1. Anahtar neden kodunuzda olmamalı
  2. Adım 1: anahtarı bir ortam değişkenine koyun
  3. Adım 2: commit etmeden bir .env dosyası kullanın
  4. Anahtar sızdıysa: sırasıyla ne yapmalı
  5. Kendinizi test edin

Anahtarı kodunuzda değil, bir ortam değişkeninde tutun ve .env dosyasını .gitignore içine bir satır ekleyerek git'ten uzak tutun. Anahtar zaten bir yerde herkese açık hale geldiyse önce anahtarla ilgilenin, temizliği sonra yapın: anahtar hâlâ kodunuzda ve araçlarınızda dururken git geçmişini temizlemek hiçbir şeyi düzeltmez.

Bütün fikir bu. Bu kılavuz işin uygulamalı hali (temeller API anahtarı nedir yazısında): üç komut, çalışan tek bir istek ve kötü gün için kısa bir plan.

Anahtar neden kodunuzda olmamalı#

API anahtarı, paranızı harcayan bir paroladır. Onu elinde tutan herkes bakiyeniz üzerinden istek gönderebilir ve hizmet onları sizden ayırt edemez.

İşlerin ters gitmesinin olağan yolu sıkıcıdır. İlk isteği çalıştırmak için anahtarı bir betiğe yapıştırırsınız, betik çalışır, git push yaparsınız ve depo herkese açık olur. Ya da yapılandırma dosyanızı bir iş arkadaşınıza gönderirsiniz. Ya da köşesinde anahtar görünen bir hata ekran görüntüsü alırsınız. Her seferinde sonuç aynıdır.

GitHub bu kalıbı iyi bilir. Gizli bilgi taraması (GitHub docs, 29 Ekim 2026'da kontrol edildi) tüm dallardaki tam Git geçmişinde sabit kodlanmış kimlik bilgilerini arar; ayrıca issue'lar, pull request'ler, tartışmalar, wiki'ler ve gizli gist'ler içinde de arar ve bulduğunda bir uyarı oluşturur. Yani bir sonraki commit'inizde satırı silmek hiçbir şeyi değiştirmez: eski commit'te hâlâ durur.

Aynı betiğin öncesi ve sonrası.

Karşılaştır

Aynı betik, anahtar koddan çıkarıldı

Anahtar kodda

python
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key="<your-key>",  # pasted here: ends up in git
)

Anahtar ortamdan

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

İkinci sürüm olduğu gibi GitHub'a, bir sohbete veya kod incelemesine gidebilir. Anahtar makinenizde, dosyanın dışında yaşar.

Adım 1: anahtarı bir ortam değişkenine koyun#

Ortam değişkeni, terminalinizin başlattığı her programa verdiği adlandırılmış bir değerdir. Betik CHEAPTOKENS_API_KEY değişkenini adıyla ister ve nereden geldiğini hiç görmez.

macOS ve Linux'ta:

bash
export CHEAPTOKENS_API_KEY="<your-key>"

Windows PowerShell'de:

powershell
setx CHEAPTOKENS_API_KEY "<your-key>"

İki ayrıntı insanları yanıltır. export yalnızca o terminal penceresi için geçerlidir, kalıcı olması için satırı kabuk profilinize (~/.zshrc veya ~/.bashrc) ekleyin. Ve setx yazdığınız pencereyi değiştirmez: test etmeden önce yeni bir terminal açın.

Şimdi tam bir istek. OpenAI uyumlu uç noktayı, https://api.cheaptokens.dev/v1, ve tam kimliğiyle DeepSeek-V4-Flash'i kullanır (deepseek-ai/DeepSeek-V4-Flash-0731; adlar sağlayıcılar arasında farklılık gösterdiği için kimlikleri CheapTokens docs üzerinden alın):

python
import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.cheaptokens.dev/v1",
    api_key=os.environ["CHEAPTOKENS_API_KEY"],
)

resp = client.chat.completions.create(
    model="deepseek-ai/DeepSeek-V4-Flash-0731",
    messages=[{"role": "user", "content": "Say hi in five words."}],
)
print(resp.choices[0].message.content)
print(resp.usage)

Kısa bir selamlama, yaklaşık 20 token giriş ve 20 token çıkıştan oluşan bir istektir; mevcut fiyatlarla bu $0.0000023 tutarındadır (tam liste fiyatlandırma sayfasında). Henüz ilk isteğinizi göndermediyseniz, CheapTokens ile ilk API isteğiniz sıfırdan adım adım anlatır.

Modelin yanıtı choices[0].message.content içinde döner ve usage saydığı token'ları gösterir. Anahtar dosyada hiç görünmez.

.env ve .gitignore komutlarını gösteren terminal
Anahtarı git'ten uzak tutan üç komut

Adım 2: commit etmeden bir .env dosyası kullanın#

Her yeni pencerede export yazmak yorucu olur. Bir .env dosyası değeri projenin yanında tek bir yerde tutar:

text
CHEAPTOKENS_API_KEY=<your-key>

Python bunu python-dotenv ile okur (pip install python-dotenv):

python
from dotenv import load_dotenv
load_dotenv()  # fills os.environ from .env

Dosya ancak git onu hiç görmezse güvenlidir. İlk commit'ten önce .gitignore içine ekleyin:

bash
echo ".env" >> .gitignore
git check-ignore -v .env

Her şey doğruysa ikinci komut .gitignore:1:.env .env gibi bir şey yazdırır: git size dosyayı hangi kuralın yok saydığını söyler. Hiçbir şey yazdırmıyorsa kural çalışmıyor demektir. Windows'ta bir düzenleyicide .env satırıyla .gitignore oluşturun ya da Add-Content .gitignore .env kullanın: PowerShell'in >> komutu UTF-16 yazabilir ve git bunu yok sayabilir.

Bir tuzak: .gitignore yalnızca git'in henüz izlemediği dosyaları etkiler. .env daha önce bir kez commit edildiyse, git'in onu izlemeyi bırakması için git rm --cached .env çalıştırın ve içindeki anahtarı açığa çıkmış sayın (aşağıda daha fazlası var). Düzenli bir alışkanlık, değer yerine değişken adını ve bir yer tutucuyu içeren bir .env.example commit etmektir; böylece bir ekip arkadaşı neyi ayarlaması gerektiğini bilir.

Anahtar sızdıysa: sırasıyla ne yapmalı#

Belki anahtar herkese açık bir depoya gitti, belki bir ekran görüntüsünde durdu, belki tüm yapılandırmayı bir forum başlığına yapıştırdınız. Sıra, herhangi bir adımın hızından daha önemlidir.

GitHub'ın kendi yönergesi (aynı sayfa, 29 Ekim 2026'da kontrol edildi) kimlik bilgisini hemen döndürmenizdir; Git geçmişini yeniden yazmak isteğe bağlıdır ve kimlik bilgisi iptal edildikten sonra çoğu zaman gereksizdir. İnsanlar bunu tersine yapma eğilimindedir: anahtar hâlâ çalışırken geçmişi temizlemek için bir saat harcarlar. Yapmayın.

Durumunu seç

Anahtarınıza ne oldu? En yakın durumu seçin

Anahtar artık herkese açık bir commit'teydi

Önce anahtarı koddan çıkarın, ortam değişkenine geçin, .env satırını .gitignore içine ekleyin ve göndermediğiniz istekler için bakiyenize bakın. Geçmişi temizlemek sonrasında yapılacak güzel bir ekstra, acil kısım değil.

Anahtar bir ekran görüntüsünde veya paylaşılan bir dosyadaydı

Aynı sıra: o anahtarı araçlarınızda kullanmayı bırakıp ortam değişkenine geçin, sonra mümkünse gönderiyi veya dosyayı silin. Silinen bir ekran görüntüsü çoktan kopyalanmış olabilir, bu yüzden yalnızca silmeye güvenmeyin.

Aynı anahtar birkaç araçta kullanılıyor

Anahtarı barındıran her yeri gözden geçirin: kabuk profiliniz, .env dosyaları, düzenleyici ve terminal araçları; her birini ortam değişkenine yönlendirin, böylece değiştirilecek tek bir yer olsun. Bir araç değişkeni okuyamazsa, 401/404 sorun giderme kılavuzu hatanın nasıl göründüğünü gösterir.

Sızıntıdan sonra üç adım: anahtarı koddan çıkar, her aracı güncelle, bir test isteği gönder
Önce anahtar koddan çıksın, sonra her araç, sonra bir test isteği

Temizlikten sonra, Adım 1'deki gibi küçük bir test isteği gönderin ve bakiyenizi kontrol edin. Yanıt veriyorsa ve bakiye ile istekler normal görünüyorsa temizlik tamamlanmıştır; önümüzdeki birkaç gün bakiyeyi göz önünde bulundurun. Herkese açık hale gelmiş bir anahtar, koddan çıkardıktan sonra bile açığa çıkmış sayılmalıdır; bu yüzden bakiyeyi ve istek sayısını göndermediğiniz bir şey için izleyin ve o anahtarı yeni yerlerde yeniden kullanmayın. Anahtarların yaşamaya eğilimli olduğu yerler için Kendi API anahtarınızı nereye takmalısınız yazısına bakın.

Kendinizi test edin#

Kendin deneDeneyin: değişkeni kaldırın ve betiği çalıştırın. Ne görüyorsunuz?Cevabı göster

Python, makinenizden herhangi bir istek çıkmadan KeyError: 'CHEAPTOKENS_API_KEY' ile durur. Bu iyi bir başarısızlıktır: betik sessizce yapıştırılmış bir anahtar kullanmak yerine anahtar olmadan çalışmayı reddeder. Bunun yerine 401 görürseniz değişken ayarlanmıştır ama anahtar yanlıştır; anahtarı ve adresi 401/404 kılavuzuna göre kontrol edin.