Some checks are pending
NordaBiz Tests / Unit & Integration Tests (push) Waiting to run
NordaBiz Tests / E2E Tests (Playwright) (push) Blocked by required conditions
NordaBiz Tests / Smoke Tests (Production) (push) Blocked by required conditions
NordaBiz Tests / Send Failure Notification (push) Blocked by required conditions
Production moved from on-prem VM 249 (10.22.68.249) to OVH VPS (57.128.200.27, inpi-vps-waw01). Updated ALL documentation, slash commands, memory files, architecture docs, and deploy procedures. Added |local_time Jinja filter (UTC→Europe/Warsaw) and converted 155 .strftime() calls across 71 templates so timestamps display in Polish timezone regardless of server timezone. Also includes: created_by_id tracking, abort import fix, ICS calendar fix for missing end times, Pros Poland data cleanup. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
4.3 KiB
4.3 KiB
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.
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
# ✅ 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
# ✅ 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
# ✅ 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
.envjest w.gitignore- Sprawdzaj przed commitem:
git diffigit 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:
-
Zmiana hasła (ZALECANE)
- Natychmiast zmień hasło we wszystkich systemach
- Traktuj stare hasło jako skompromitowane
- Najprostsze i najbezpieczniejsze rozwiązanie
-
Przepisanie historii Git (SKOMPLIKOWANE)
git filter-branchlubBFG 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
# 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
# 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
// .vscode/settings.json
{
"search.exclude": {
"**/.env": true
}
}
Git - ignorowanie .env
# .gitignore
.env
.env.local
.env.*.local
*.env