/** * Print a list with the failed logins occurred during the last hour. * * @return string A list with the failed logins occurred during the last hour. */ function sucuriscan_failed_logins_panel() { $template_variables = array('FailedLogins.List' => '', 'FailedLogins.Total' => '', 'FailedLogins.MaxFailedLogins' => 0, 'FailedLogins.NoItemsVisibility' => 'visible', 'FailedLogins.WarningVisibility' => 'visible', 'FailedLogins.CollectPasswordsVisibility' => 'visible', 'FailedLogins.PaginationLinks' => '', 'FailedLogins.PaginationVisibility' => 'hidden'); // Define variables for the pagination. $page_number = SucuriScanTemplate::pageNumber(); $max_per_page = SUCURISCAN_MAX_PAGINATION_BUTTONS; $page_offset = ($page_number - 1) * $max_per_page; $page_limit = $page_offset + $max_per_page; $max_failed_logins = SucuriScanOption::get_option(':maximum_failed_logins'); $notify_bruteforce_attack = SucuriScanOption::get_option(':notify_bruteforce_attack'); $failed_logins = sucuriscan_get_failed_logins(); $old_failed_logins = sucuriscan_get_failed_logins(true); // Merge the new and old failed logins. if (is_array($old_failed_logins) && !empty($old_failed_logins)) { if (is_array($failed_logins) && !empty($failed_logins)) { $failed_logins = array_merge($failed_logins, $old_failed_logins); } else { $failed_logins = $old_failed_logins; } } if ($failed_logins) { $counter = 0; for ($key = $page_offset; $key < $page_limit; $key++) { if (array_key_exists($key, $failed_logins['entries'])) { $login_data = $failed_logins['entries'][$key]; $css_class = $counter % 2 == 0 ? '' : 'alternate'; $wrong_user_password = '******'; $wrong_user_password_color = 'default'; if (sucuriscan_collect_wrong_passwords() === true) { if (isset($login_data['user_password']) && !empty($login_data['user_password'])) { $wrong_user_password = $login_data['user_password']; $wrong_user_password_color = 'none'; } else { $wrong_user_password = '******'; $wrong_user_password_color = 'info'; } } $template_variables['FailedLogins.List'] .= SucuriScanTemplate::getSnippet('lastlogins-failedlogins', array('FailedLogins.CssClass' => $css_class, 'FailedLogins.Num' => $login_data['attempt_count'], 'FailedLogins.Username' => $login_data['user_login'], 'FailedLogins.RemoteAddr' => $login_data['remote_addr'], 'FailedLogins.UserAgent' => $login_data['user_agent'], 'FailedLogins.Password' => $wrong_user_password, 'FailedLogins.PasswordColor' => $wrong_user_password_color, 'FailedLogins.Datetime' => SucuriScan::datetime($login_data['attempt_time']))); $counter++; } } if ($counter > 0) { $template_variables['FailedLogins.NoItemsVisibility'] = 'hidden'; } $template_variables['FailedLogins.PaginationLinks'] = SucuriScanTemplate::pagination('%%SUCURI.URL.Lastlogins%%#failed-logins', $failed_logins['count'], $max_per_page); if ($failed_logins['count'] > $max_per_page) { $template_variables['FailedLogins.PaginationVisibility'] = 'visible'; } } $template_variables['FailedLogins.MaxFailedLogins'] = $max_failed_logins; if ($notify_bruteforce_attack == 'enabled') { $template_variables['FailedLogins.WarningVisibility'] = 'hidden'; } if (sucuriscan_collect_wrong_passwords() !== true) { $template_variables['FailedLogins.CollectPasswordsVisibility'] = 'hidden'; } return SucuriScanTemplate::getSection('lastlogins-failedlogins', $template_variables); }