示例#1
0
/**
 * 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);
}