Files
LMS-Estafeta/runtime/newlogin.php
T

99 lines
3.0 KiB
PHP
Raw Normal View History

<?php
require_once('../config.php');
require_once ('mencrypt.php');
session_name($CFG->sessionname);
session_start();
global $link;
dbConnect();
// Check connection
if (!$link) {
die("Connection failed: " . mysqli_connect_error());
}
$numerodeempleado = isset($_POST['numempl']) ? trim($_POST['numempl']) : '';
// Límite de intentos por IP (mitiga enumeración / fuerza bruta)
function lms_rate_limit($key, $max = 60, $window = 600) {
$file = sys_get_temp_dir() . '/lms_rl_' . md5($key);
$now = time();
$data = array();
if (is_file($file)) {
$tmp = json_decode(@file_get_contents($file), true);
if (is_array($tmp)) { $data = $tmp; }
}
$data = array_values(array_filter($data, function ($t) use ($now, $window) {
return $t > $now - $window;
}));
if (count($data) >= $max) { return false; }
$data[] = $now;
@file_put_contents($file, json_encode($data), LOCK_EX);
return true;
}
$userip = getUserIP();
if (!lms_rate_limit('login_' . $userip)) {
header("Location:".$CFG->wwwroot.'?errorcode=0');
exit;
}
// Buscar usuario (consulta preparada)
$stmt = mysqli_prepare($link, "select * from user where numempl = ? and habilitado = 1 limit 1");
mysqli_stmt_bind_param($stmt, 's', $numerodeempleado);
mysqli_stmt_execute($stmt);
$result = mysqli_stmt_get_result($stmt);
$user = $result ? mysqli_fetch_array($result) : null;
mysqli_stmt_close($stmt);
if (!$user) {
header("Location:".$CFG->wwwroot.'?errorcode=0');
exit;
}
// Actualizar último acceso (consulta preparada)
$stmt = mysqli_prepare($link, "update user set lastip = ?, lastlogin = NOW() where numempl = ?");
mysqli_stmt_bind_param($stmt, 'ss', $userip, $numerodeempleado);
mysqli_stmt_execute($stmt);
mysqli_stmt_close($stmt);
// Evitar fijación de sesión
session_regenerate_id(true);
$_SESSION['usersession'] = json_encode($user, JSON_UNESCAPED_UNICODE);
$_SESSION['numerodeempleado'] = $numerodeempleado;
$url_encriptado = $encriptar($numerodeempleado);
if ($user['idrol'] == 1) {
$_SESSION['isadmin'] = false;
$vars = "../dashboard.php?uniq=".urlencode($url_encriptado);
header('Location: '.$vars);
exit;
} else {
$_SESSION['isadmin'] = true;
header('Location: ../admin/');
exit;
}
function getUserIP() {
$ipaddress = '';
if (isset($_SERVER['HTTP_CLIENT_IP']))
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_X_FORWARDED']))
$ipaddress = $_SERVER['HTTP_X_FORWARDED'];
else if(isset($_SERVER['HTTP_X_CLUSTER_CLIENT_IP']))
$ipaddress = $_SERVER['HTTP_X_CLUSTER_CLIENT_IP'];
else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_FORWARDED']))
$ipaddress = $_SERVER['HTTP_FORWARDED'];
else if(isset($_SERVER['REMOTE_ADDR']))
$ipaddress = $_SERVER['REMOTE_ADDR'];
else
$ipaddress = 'UNKNOWN';
return substr($ipaddress, 0, 100);
}
?>