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>
169 lines
4.3 KiB
Markdown
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@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
|
|
```
|