POSA_LEAKSMS/php/blocked.php
유창욱 90f121e14c chore: import codebase with security hardening
SHT30 온습도 모니터링 시스템 전체 소스(서버 PHP, STM32 펌웨어, SQL, 테스트).
전체 코드리뷰에서 도출된 보안 하드닝 10건 반영:
- 요청 서명 HMAC-SHA256 전환(펌웨어 sig.c/서버 config.php/호스트 패리티 동시)
- 재전송 방어 + 기본 API_KEY fail-closed + 디바이스 문자열 정제(api/sensor_data.php)
- 오프라인 SMS 중복 발송 경합 제거(cron_heartbeat.php, 원자적 선점)
- CSV 수식 주입 방지(monthly_report.php), 감사로그 회전 락(retention_cleanup.php)
- 브루트포스 카운터 원자화(login.php), 예시 TOTP 비밀키 무효화, 마이그레이션 멱등화

_backup/(하드코딩 실 비밀값 포함)·config.local.php·런타임 상태는 .gitignore 제외.
2026-06-20 09:37:40 +09:00

16 lines
1.2 KiB
PHP

<?php
$id = $_SERVER['REDIRECT_BLOCK_ID'] ?? uniqid('block_', true);
$ua = str_replace(["\r", "\n", "\t"], ' ', $_SERVER['HTTP_USER_AGENT'] ?? '(none)');
$ip = filter_var($_SERVER['REMOTE_ADDR'] ?? '0.0.0.0', FILTER_VALIDATE_IP) ?: '(invalid)';
$time = date('c');
@file_put_contents(__DIR__.'/var/blocked.log', "{$time}\t{$ip}\t{$id}\t{$ua}\n", FILE_APPEND | LOCK_EX);
?>
<!doctype html><html lang="ko"><head>
<meta charset="utf-8"><title>접근 거부</title>
<meta name="robots" content="noindex"><meta name="viewport" content="width=device-width,initial-scale=1">
<style>body{margin:0;display:grid;place-items:center;min-height:100vh;background:#faf7f2;font-family:system-ui,-apple-system,"Noto Sans KR",sans-serif;color:#222}.card{max-width:520px;background:#fff;border:1px solid #eee;border-radius:16px;padding:28px;box-shadow:0 10px 24px rgba(0,0,0,.06);text-align:center}h1{margin:0 0 8px;font-size:22px}.small{color:#666;font-size:13px;margin-top:14px}code{background:#f0f0f0;padding:2px 6px;border-radius:6px}</style>
</head><body><div class="card">
<h1>접근이 거부되었습니다</h1>
<p>관리자에게 연락하세요.</p>
<p class="small">요청 ID: <code><?=htmlspecialchars($id)?></code></p>
</div></body></html>