# NordaBiz - Zarządzanie danymi uwierzytelniającymi Ten dokument zawiera szczegółowe zasady zarządzania hasłami, kluczami API i innymi wrażliwymi danymi. Główne instrukcje znajdują się w [CLAUDE.md](../CLAUDE.md). --- ## KRYTYCZNE: Nigdy nie umieszczaj haseł w kodzie! **NIGDY nie umieszczaj haseł i kluczy API bezpośrednio w kodzie źródłowym!** Jest to krytyczna podatność bezpieczeństwa (CWE-798: Use of Hard-coded Credentials). Narusza standardy bezpieczeństwa i może prowadzić do kompromitacji systemu jeśli repozytorium zostanie ujawnione. --- ## Zasady obowiązkowe ### 1. Używaj zmiennych środowiskowych ```python # ✅ PRAWIDŁOWO: DATABASE_URL = os.getenv('DATABASE_URL') API_KEY = os.getenv('GOOGLE_PAGESPEED_API_KEY') # ❌ BŁĘDNIE - NIGDY TAK NIE RÓB: DATABASE_URL = 'postgresql://user:password123@localhost/db' API_KEY = 'AIzaSyAbc123...' ``` ### 2. Wartości domyślne jako bezpieczne placeholdery ```python # ✅ PRAWIDŁOWO - wartość domyślna która wymusi konfigurację .env: DATABASE_URL = os.getenv('DATABASE_URL', 'postgresql://user:CHANGE_ME@localhost/nordabiz') # ❌ BŁĘDNIE - wartość produkcyjna jako fallback: DATABASE_URL = os.getenv('DATABASE_URL', 'postgresql://user:RealPassword@57.128.200.27/nordabiz') ``` ### 3. Przechowuj credentials w plikach .env | Środowisko | Lokalizacja | |------------|-------------| | Produkcja | `/var/www/nordabiznes/.env` | | Development | `.env` w katalogu projektu | | Wzorzec | `.env.example` (bez prawdziwych wartości!) | --- ## Wymagane zmienne środowiskowe | Zmienna | Cel | Przykład | |---------|-----|----------| | `DATABASE_URL` | Połączenie PostgreSQL dla skryptów Python | `postgresql://user:pass@127.0.0.1:5432/nordabiz` | | `PGPASSWORD` | Hasło PostgreSQL dla skryptów shell | `export PGPASSWORD='your_password'` | | `GOOGLE_PAGESPEED_API_KEY` | API Key Google PageSpeed | `AIzaSy...` | | `BRAVE_SEARCH_API_KEY` | API Key Brave Search | `BSA...` | | `GEMINI_API_KEY` | API Key Google Gemini AI | `AIzaSy...` | --- ## Skrypty shell - sprawdzanie zmiennych ```bash # ✅ PRAWIDŁOWO: if [ -z "$PGPASSWORD" ]; then echo "ERROR: PGPASSWORD not set" exit 1 fi psql -h localhost -U nordabiz_app -d nordabiz # ❌ BŁĘDNIE: PGPASSWORD='hardcoded_password' psql -h localhost -U nordabiz_app -d nordabiz ``` --- ## NIGDY nie commituj plików z credentials - `.env` jest w `.gitignore` - Sprawdzaj przed commitem: `git diff` i `git status` - W razie wątpliwości: `git log -p | grep -i password` --- ## Co zrobić jeśli przypadkowo scommitujesz hasło ⚠️ **NATYCHMIAST zmień hasło w bazie/API** Powód: Nie wystarczy usunąć z najnowszego commita - hasło pozostaje w historii Git. ### Opcje naprawy: 1. **Zmiana hasła** (ZALECANE) - Natychmiast zmień hasło we wszystkich systemach - Traktuj stare hasło jako skompromitowane - Najprostsze i najbezpieczniejsze rozwiązanie 2. **Przepisanie historii Git** (SKOMPLIKOWANE) - `git filter-branch` lub `BFG Repo-Cleaner` - Wymaga force push do wszystkich remotów - Może powodować problemy dla innych deweloperów --- ## Wyjątki - kiedy dozwolone jest hasło w kodzie | Dozwolone | Niedozwolone | |-----------|--------------| | ✅ Pliki dokumentacji (CLAUDE.md, README) | ⛔ Pliki Python (.py) | | ✅ `.env.example` z placeholderami | ⛔ Skrypty shell (.sh) | | | ⛔ Pliki JavaScript (.js) | --- ## Weryfikacja przed wdrożeniem ```bash # Sprawdź czy nie ma hardcoded credentials w kodzie: grep -r "PGPASSWORD=" --include="*.sh" . grep -r "postgresql://.*:.*@" --include="*.py" . | grep -v "CHANGE_ME" | grep -v ".example" | grep -v "PASSWORD" # Oczekiwany wynik: brak znalezisk (lub tylko w dokumentacji/placeholderach) ``` --- ## Bezpieczne przechowywanie ### Lokalizacje plików .env ``` /var/www/nordabiznes/.env # Produkcja (PROD) ./nordabiz/.env # Development (DEV) ``` ### Uprawnienia plików ```bash # Tylko root może czytać plik .env (OVH VPS — .env jest root-owned) sudo chmod 600 /var/www/nordabiznes/.env sudo chown root:root /var/www/nordabiznes/.env ``` --- ## Konfiguracja IDE ### VS Code - wykluczenie .env z wyszukiwania ```json // .vscode/settings.json { "search.exclude": { "**/.env": true } } ``` ### Git - ignorowanie .env ```gitignore # .gitignore .env .env.local .env.*.local *.env ```