is_numeric($ts) && $now - (int)$ts <= (int)setting_value('security.login_window_seconds')
));
$_SESSION['login_failures'] = $failures;
$lockedUntil = (int)($_SESSION['login_locked_until'] ?? 0);
$csrfOk = !(bool)setting_value('security.login_csrf_required')
|| hash_equals($csrf, (string)($_POST['csrf'] ?? ''));
if ($lockedUntil > $now) {
$error = '로그인 잠금 중입니다. 잠시 후 다시 시도하세요.';
} elseif (!$csrfOk) {
$error = '보안 토큰이 올바르지 않습니다.';
} elseif (hash_equals(APP_PASSWORD, (string)$_POST['login_password'])) {
session_regenerate_id(true);
$_SESSION['control_login'] = true;
unset($_SESSION['login_failures'], $_SESSION['login_locked_until']);
if (!empty($_POST['remember_login'])) {
issue_remember_token();
} else {
clear_remember_token();
}
header('Location: /');
exit;
} else {
$failures[] = $now;
$_SESSION['login_failures'] = $failures;
if (count($failures) >= (int)setting_value('security.login_max_failures')) {
$_SESSION['login_locked_until'] = $now + (int)setting_value('security.login_lock_seconds');
}
$error = '비밀번호가 올바르지 않습니다.';
}
}
$loggedIn = signed_in();
?>
= e(APP_NAME) ?>
= e(APP_NAME) ?>
Updated: loading...
Logout
Sensor History
Detail Charts
System Notice
Baseline: -
Notice History
No system notice history.
Process Details
CPU
| PID | CPU | Service | Command |
| loading... |
Memory
| PID | MEM | Service | Command |
| loading... |
Diagnostics
dmesg
/tmp/dmesg.log
설정
Control 동작값을 즉시 저장하고 반영합니다.