auto-claude: 4.2 - Add section to CLAUDE.md about proper credential management

- Added comprehensive 'Zarządzanie danymi uwierzytelniającymi' subsection
- Documented CWE-798 security vulnerability and prevention measures
- Included code examples of proper vs improper credential handling
- Added table of required environment variables (DATABASE_URL, PGPASSWORD, API keys)
- Documented shell script validation patterns
- Added Git safety practices and accidental commit remediation steps
- Included pre-deployment verification commands
This commit is contained in:
Maciej Pienczyn 2026-01-10 13:02:37 +01:00
parent 76f6ac19dc
commit 1a2edef536

View File

@ -221,6 +221,88 @@ ssh maciejpi@10.22.68.249 "cd /var/www/nordabiznes && sudo -u www-data git pull
- Klucze API i hasła tylko w `.env` (nigdy w kodzie)
- Rate limiting: 200 req/dzień, 50 req/godzinę
#### Zarządzanie danymi uwierzytelniającymi (KRYTYCZNE!)
**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 dla wszystkich wrażliwych danych:**
```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. **Konfiguruj 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 dane uwierzytelniające w plikach .env:**
- Produkcja: `/var/www/nordabiznes/.env`
- Development: `.env` w katalogu projektu
- Wzorzec: `.env.example` (bez prawdziwych wartości!)
4. **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...` |
5. **Skrypty shell - zawsze sprawdzaj czy zmienne są ustawione:**
```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
```
6. **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`
7. **Co zrobić jeśli przypadkowo scommitujesz hasło:**
- ⚠️ **NATYCHMIAST zmień hasło w bazie/API**
- Nie wystarczy usunąć z najnowszego commita - hasło pozostaje w historii Git
- Rozważ użycie `git filter-branch` lub `BFG Repo-Cleaner` (skomplikowane)
- Najlepiej: zmień hasło i traktuj stare jako skompromitowane
8. **Wyjątki (kiedy dozwolone jest hasło w kodzie):**
- ✅ Pliki dokumentacji (np. przykłady w CLAUDE.md, README)
- ✅ `.env.example` jako szablon (z placeholderami)
- ⛔ NIGDY w plikach wykonywalnych (.py, .sh, .js)
**Weryfikacja przed wdrożeniem:**
```bash
# Sprawdź czy nie ma hardcoded credentials w kodzie:
grep -r "NordaBiz2025Secure" --include="*.py" --include="*.sh" .
grep -r "PGPASSWORD=" --include="*.sh" .
grep -r "postgresql://.*:.*@" --include="*.py" . | grep -v "CHANGE_ME" | grep -v ".example"
# Oczekiwany wynik: brak znalezisk (lub tylko w dokumentacji)
```
### Import danych
- Używaj skryptów `import_*.py` do dodawania firm
- Weryfikuj NIP przez API przed importem