다중 에이전트 보안 리뷰 후속 수정:
- (HIGH) config.local.example.php ADMIN_TOTP_SECRET '' 로 교체: 기존 플레이스홀더가
Base32 디코드되어 실제 TOTP 코드를 생성(공개 시드로 MFA 활성화)하던 회귀를 차단.
fail-closed(미설정 시 로그인 차단) + 회귀 테스트 추가.
- (MEDIUM) 레거시 키-접두 sha256 서명 경로를 ALLOW_LEGACY_BODY_SIGNATURE(기본 false)로
게이트: X-Signature(HMAC) 없으면 거부.
- (LOW) 인증 전 본문 크기 상한 INGEST_MAX_BODY_BYTES(8KB) → 413.
- (LOW) heartbeat throttle 를 flock 기반 원자 판정으로 교체(중복 스캔 방지).
- (LOW) CRON_SECRET: md5 → hash_hmac('sha256','cron',API_KEY).
50 lines
2.2 KiB
PHP
50 lines
2.2 KiB
PHP
<?php
|
|
// =============================================================================
|
|
// config.local.example.php - v2606 (SHT30 온습도) 운영 설정 예시
|
|
//
|
|
// 1. 이 파일을 config.local.php로 복사합니다.
|
|
// 2. 실제 운영 값으로 교체합니다.
|
|
// 3. config.local.php는 서버에만 보관하고 공유하지 않습니다.
|
|
// =============================================================================
|
|
|
|
return [
|
|
'DB_HOST' => 'localhost',
|
|
'DB_PORT' => 3306,
|
|
'DB_NAME' => 'your_db_name',
|
|
'DB_USER' => 'your_db_user',
|
|
'DB_PASS' => 'your_db_password',
|
|
|
|
'API_KEY' => 'replace-with-long-random-secret',
|
|
|
|
'SMS_USER_ID' => 'your-cafe24-sms-user-id',
|
|
'SMS_SECURE' => 'your-cafe24-sms-secure-key',
|
|
'SMS_SENDER' => '01000000000',
|
|
'SMS_RECIPIENTS' => [
|
|
'01000000000',
|
|
],
|
|
|
|
'ADMIN_USER' => 'admin',
|
|
'ADMIN_PASSWORD_HASH' => '$2y$10$replace.with.password_hash.output',
|
|
// Base32 TOTP secret. MUST be left EMPTY here and set to a UNIQUE generated value in
|
|
// config.local.php. Empty '' => admin_mfa_configured() is false => login is DISABLED
|
|
// (fail-closed) until a real secret is set. NEVER put a literal Base32 string in this
|
|
// example file: any non-empty Base32-ish value (even "REPLACE_WITH_...") decodes to a
|
|
// usable, publicly-known TOTP secret and silently enables MFA on a known seed.
|
|
// Generate a unique secret on the server only:
|
|
// php -r "require 'php/admin_security.php'; echo admin_totp_secret().PHP_EOL;"
|
|
'ADMIN_TOTP_SECRET' => '',
|
|
// Temporary bootstrap token for setup_mfa.php. Remove or empty after MFA enrollment.
|
|
'MFA_SETUP_TOKEN' => 'replace-with-temporary-random-token',
|
|
|
|
// 온습도 임계 경보 (서버 판정 → SMS). 운영 환경에 맞게 조정.
|
|
'METRIC_TEMP_HIGH_C' => 30, // 고온 임계(℃)
|
|
'METRIC_TEMP_LOW_C' => 10, // 저온 임계(℃)
|
|
'METRIC_RH_HIGH' => 70, // 고습 임계(%)
|
|
'METRIC_RH_LOW' => 20, // 저습 임계(%)
|
|
'METRIC_ALERT_COOLDOWN_SEC' => 1800, // 동일 종류 경보 재발송 억제(초, 기본 30분)
|
|
|
|
'SMS_LOG_RETENTION_DAYS' => 365,
|
|
'SENSOR_LOG_RETENTION_DAYS' => 365,
|
|
'SENSOR_METRIC_RETENTION_DAYS' => 365,
|
|
'ADMIN_AUDIT_RETENTION_DAYS' => 365,
|
|
];
|