Secure Logging
Frontend używa secureLogger do zapobiegania przypadkowemu logowaniu wrażliwych danych (PII).
Key Features
Dział zatytułowany „Key Features”| Feature | Description |
|---|---|
| Automatic PII Masking | Email, phone, PESEL, NIP, passwords, tokens |
| Structured Logging | Special methods for auth, database, and API operations |
| Development-Only Debug | debug() only works in development mode |
| Semgrep Enforcement | Direct console.* usage triggers warnings |
Quick Start
Dział zatytułowany „Quick Start”import { secureLogger } from '@/utils/secureLogger';// or use named imports:import { log, info, warn, error, logAuth, logDb, logApi,} from '@/utils/secureLogger';Basic Usage
Dział zatytułowany „Basic Usage”// Simple loggingsecureLogger.log('Application started');secureLogger.info('User action completed');secureLogger.warn('Unusual activity detected');secureLogger.error('API call failed', error);
// Debug (only in development)secureLogger.debug('Debug information', data);Structured Logging
Dział zatytułowany „Structured Logging”// Authentication eventssecureLogger.logAuth('success', userId); // Masks user IDsecureLogger.logAuth('failure', userId);secureLogger.logAuth('logout');
// Database operationssecureLogger.logDb('INSERT', 'users', recordId); // Masks record IDsecureLogger.logDb('UPDATE', 'patients', patientId);
// API callssecureLogger.logApi('POST', '/api/users', 201); // Masks UUIDs in pathssecureLogger.logApi('GET', '/api/visits/uuid-here', 200);Automatic PII Masking
Dział zatytułowany „Automatic PII Masking”Logger automatycznie sanityzuje:
- Sensitive field names: password, token, sessionId, email, phone, address, etc.
- Pattern matching: PESEL (11 digits), NIP (10 digits), email addresses, credit cards
Przykład:
const user = { name: 'Jan Kowalski', email: 'jan@example.com', password: 'secret123', phone: '123-456-789',};
secureLogger.log('User data:', user);// Logs: User data: { name: 'Jan Kowalski', email: '[REDACTED]',// password: '[REDACTED]', phone: '[REDACTED]' }Backend vs Frontend Comparison
Dział zatytułowany „Backend vs Frontend Comparison”| Feature | Backend (Rust) | Frontend (TS) |
|---|---|---|
| PII Masking | Email, Token | Email, Phone, PESEL, NIP |
| Structured Logs | JSON with context | Special methods |
| Log Levels | debug/info/warn/error | debug/info/warn/error |
| Enforcement | Manual | Semgrep rules |
| Output | Terminal/Console.app | Browser DevTools |
Migration Guide
Dział zatytułowany „Migration Guide”Before (Insecure)
Dział zatytułowany „Before (Insecure)”console.log('User:', user.email);console.error('Failed to save:', error);After (Secure)
Dział zatytułowany „After (Secure)”import { secureLogger } from '@/utils/secureLogger';
secureLogger.log('User:', user); // Email automatically maskedsecureLogger.error('Failed to save:', error);Semgrep Rules
Dział zatytułowany „Semgrep Rules”Direct console.* usage is blocked by Semgrep:
- id: no-direct-console-usage message: Use secureLogger instead severity: WARNINGExceptions:
- Test files (
.test.ts,.spec.ts) secureLogger.tsitselfscripts/directory
Best Practices
Dział zatytułowany „Best Practices”// Use secureLoggerimport { secureLogger } from '@/utils/secureLogger';secureLogger.info('Action completed');
// Let automatic masking worksecureLogger.log('User data:', userData); // PII masked automatically
// Use structured loggingsecureLogger.logAuth('success', userId);// Don't use console directlyconsole.log('User email:', email); // Semgrep warning
// Don't log raw sensitive datasecureLogger.log(password); // Still insecure if not in object
// Don't bypass sanitizationconst rawEmail = user.email;console.log(rawEmail); // Blocked by SemgrepImplementation Status
Dział zatytułowany „Implementation Status”| Item | Status |
|---|---|
Secure logger module (secureLogger.ts) | Done |
| PII masking functions | Done |
| Structured logging methods | Done |
| Semgrep enforcement rules | Done |
| Documentation | Done |
Testing
Dział zatytułowany „Testing”Test the logger in your browser console:
import { secureLogger } from '@/utils/secureLogger';
// Test PII maskingsecureLogger.log('Email test:', { email: 'user@example.com' });// Expected: { email: '[REDACTED]' }
// Test phone maskingsecureLogger.log('Phone test:', '123-456-789');// Expected: '[REDACTED]'Powiązane dokumenty
Dział zatytułowany „Powiązane dokumenty”- Security Overview - Główny security overview
- Backend Logging - Rust secure_logger