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

169 lines
4.3 KiB
Markdown

# 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@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
```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 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
```json
// .vscode/settings.json
{
"search.exclude": {
"**/.env": true
}
}
```
### Git - ignorowanie .env
```gitignore
# .gitignore
.env
.env.local
.env.*.local
*.env
```