nordabiz/docs/CREDENTIALS.md
Maciej Pienczyn 587d000b9b docs: Reorganizacja dokumentacji - wydzielenie DEVELOPMENT, ROADMAP, CREDENTIALS
- CLAUDE.md uproszczony - tylko kluczowe info dla Claude
- docs/DEVELOPMENT.md - szczegóły SearchService, Chatbot, Testy AI, SEO, News
- docs/ROADMAP.md - plan rozwoju, priorytety, strategia monetyzacji 3-tier
- docs/CREDENTIALS.md - zasady zarządzania hasłami i kluczami API

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-22 10:26:24 +01: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@10.22.68.249/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 właściciel może czytać plik .env
chmod 600 /var/www/nordabiznes/.env
chown www-data:www-data /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