Environment Variables Təhlükəsizliyi — Developer-lərin Buraxdığı Səhvlər
Hər il minlərlə API key GitHub-da açıq qalır. Azərbaycanlı developer-lər olaraq biz də bu səhvləri edirik — gəlin real nümunələrlə öyrənək və qorunaq.
Environment Variables Təhlükəsizliyi — Developer-lərin Buraxdığı Səhvlər
Salam, developer dostlar! Bu gün çox ciddi, amma çoxumuzun "ay, sonra düzəldərəm" deyib keçdiyi bir mövzudan danışacağıq: environment variables təhlükəsizliyi.
Bakıda bir startup-da işləyirsən, saat gecənin 2-sidir, deadline sabah səhərdir. .env faylını .gitignore-a əlavə etməyi unudursan, git push edirsən — və bütün API key-lərin artıq GitHub-da açıq şəkildə görünür. Tanış gəlir?
Rəqəmlər Danışır
GitGuardian-ın 2025-ci il hesabatına görə:
- GitHub-da 12.8 milyon yeni secret sızıntısı aşkar edilib (əvvəlki ilə nisbətən 28% artım)
- Orta hesabla hər 1000 commit-dən 4.6-sında hardcoded secret var
- Sızan bir AWS key-in orta zərəri $28,000 təşkil edib — bu, Bakıda senior developer-in təxminən 8-9 aylıq maaşıdır (3000-3500 AZN/ay hesabı ilə)
Bu, sadəcə böyük şirkətlərin problemi deyil. Bakıda fəaliyyət göstərən fintech startup-lar, e-commerce layihələr, dövlət portallarına inteqrasiya edən şirkətlər — hamısı risk altındadır.
Səhv №1: Secret-ləri Kodun İçinə Yazmaq
Bu, ən klassik və ən təhlükəli səhvdir. Xüsusilə tez-tez interview tapşırıqlarında və ya freelance layihələrdə görürəm:
python# ❌ HEÇ VAXT BELƏ ETMƏ import requests API_KEY = "sk-proj-4f8b2a1c9d3e7f6a5b8c2d1e0f9a8b7c" DB_PASSWORD = "super_secret_parol_123" PAYMENT_SECRET = "pay_live_AZN_k8x9m2n4p6" response = requests.get( f"https://api.example.com/data?key={API_KEY}" )
Bu kodu GitHub-a push etdiyin an, bot-lar saniyələr içində həmin key-ləri tapır. Bəli, saniyələr — avtomatlaşdırılmış scanner-lər GitHub-ın public repository-lərini real vaxtda izləyir.
python# ✅ DOĞRU YANAŞMA import os import requests from dotenv import load_dotenv load_dotenv() API_KEY = os.environ.get("API_KEY") DB_PASSWORD = os.environ.get("DB_PASSWORD") PAYMENT_SECRET = os.environ.get("PAYMENT_SECRET") if not API_KEY: raise ValueError("API_KEY environment variable tapılmadı!") response = requests.get( f"https://api.example.com/data?key={API_KEY}" )
Səhv №2: .gitignore Faylını Unudmaq
Layihəni yaratdığın ilk dəqiqədə .gitignore faylını konfiqurasiya et. Sonra "əlavə edərəm" demə — unutacaqsan.
gitignore# .gitignore — layihənin ilk faylı olmalıdır .env .env.local .env.production .env.*.local *.pem *.key config/secrets.yml
Məsləhət: git init etdikdən dərhal sonra .gitignore yarat. Hətta bunun üçün özünə shell alias yaz:
bash# ~/.bashrc və ya ~/.zshrc faylına əlavə et alias gitnew='git init && curl -o .gitignore https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore && echo ".env" >> .gitignore && git add .gitignore && git commit -m "Initial commit with .gitignore"'
Səhv №3: .env.example Faylı Yaratmamaq
Bakıda bir çox komandada belə situasiya yaşanır: yeni developer işə başlayır, repo-nu clone edir, .env faylı yoxdur, hansı variable-lar lazım olduğunu bilmir, 2 saat vaxt itirir.
bash# .env.example — BU FAYL repo-da OLMALIDIR # Həqiqi dəyərlər yox, sadəcə struktur göstərilir API_KEY=your_api_key_here DB_HOST=localhost DB_PORT=5432 DB_NAME=myapp_development DB_PASSWORD=your_db_password_here PAYMENT_GATEWAY_KEY=your_payment_key_here REDIS_URL=redis://localhost:6379
Bu sadə addım komandadakı hər yeni developer-ə minimum 1-2 saat qazandırır.
Səhv №4: Production və Development Secret-lərini Qarışdırmaq
Bu xüsusilə Azərbaycanda fəaliyyət göstərən ödəniş inteqrasiyalarında (məsələn, bank API-ları, milli ödəniş sistemləri) təhlükəlidir. Test key ilə production key-i eyri .env faylında saxlayırsan, bir gün səhvən production key-i test mühitində istifadə edirsən — və real müştəri datası risk altına düşür.
bash# Mühitə görə ayrı fayllar istifadə et .env.development # Lokal development üçün .env.staging # Test server üçün .env.production # YALNIZ production serverdə olmalıdır
Səhv №5: Git Tarixçəsini Unutmaq
Ən qorxulu hissə budur: .env faylını .gitignore-a əlavə etdin, faylı sildin, commit etdin — amma əvvəlki commit-lərdə hələ də görünür!
bash# Əgər artıq push etmisənsə, bu addımları at: # 1. Secret-i dərhal revoke et (ən vacib addım!) # API provider-in dashboard-undan key-i ləğv et # 2. Git tarixçəsindən silmək üçün git filter-branch --force --index-filter \ 'git rm --cached --ignore-unmatch .env' \ --prune-empty --tag-name-filter cat -- --all # 3. Yeni key generate et və yalnız environment-də saxla # 4. Force push et (komandanı xəbərdar et!) git push origin --force --all
Qızıl qayda: Əgər secret bir dəfə olsun public repo-ya düşübsə — o secret artıq kompromis olunmuş sayılır. Mütləq yenisini generate et.
Production Üçün Best Practice-lər
Bakıda işləyən developer-lər üçün praktiki tövsiyələr:
- Secret manager istifadə et — AWS Secrets Manager, HashiCorp Vault, Azure Key Vault, ya da ən azı Docker secrets
- CI/CD pipeline-da secret-ləri environment variable olaraq təyin et — GitHub Actions Secrets, GitLab CI Variables
- Secret rotation policy qur — hər 90 gündən bir key-ləri yenilə
- Pre-commit hook qur — commit etməzdən əvvəl avtomatik yoxlasın:
bash# pre-commit-config.yaml repos: - repo: https://github.com/gitleaks/gitleaks rev: v8.18.0 hooks: - id: gitleaks
- Audit et — mövcud repo-larını indi yoxla:
bash# gitleaks ilə repo-nu skan et gitleaks detect --source=. --report-format=json --report-path=leak-report.json
Nəticə
Environment variable təhlükəsizliyi glamurlu mövzu deyil — amma bu, sənin professional səviyyəni göstərən əsas göstəricilərdən biridir. Bakıda müsahibəyə gedəndə hiring manager .env faylını repo-da görərsə, nə qədər yaxşı kod yazsan da, etibarını itirəcəksən.
Bu gün elə indi bir iş gör:
- ✅ Bütün repo-larını
gitleaksilə skan et - ✅
.gitignorefayllarını yoxla - ✅ Hardcoded secret-ləri environment variable-a köçür
- ✅
.env.exampleyarat
Bir secret sızıntısının qarşısını almaq, onun nəticələrini aradan qaldırmaqdan min dəfə asandır.
Təhlükəsiz kodlaşdırma, developer-lər! 🔐
Baku Stack | 3 Aprel 2026
Oxşar məqalələr
GitHub Actions ilə Avtomatik Deploy — Pulsuz Hosting, Sıfır Stress
Hər git push əmrindən sonra saytın avtomatik deploy olsun, həm də pulsuz? GitHub Actions + GitHub Pages ilə bunu 10 dəqiqəyə qurursan.
Docker ilə Next.js App Deployment — Addım-Addım Bələdçi
Next.js layihəni Docker ilə containerləşdirib production-a çıxarmağın ən sadə və düzgün yolu — real kod nümunələri ilə.
Kubernetes başlanğıcı — nə vaxt lazım olur, nə vaxt yox?
Hər layihəyə Kubernetes lazım deyil. Gəl birlikdə baxaq: K8s nə vaxt həqiqətən işə yarayır, nə vaxt isə vaxt itkisidir.