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:
parent
76f6ac19dc
commit
1a2edef536
82
CLAUDE.md
82
CLAUDE.md
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user