nordabiz/docs/CREDENTIALS.md
Maciej Pienczyn 110d971dca
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
feat: migrate prod docs to OVH VPS + UTC→Warsaw timezone in all templates
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>
2026-04-06 13:41:53 +02:00

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

  • .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

# 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