Hola estimados todos... hace un tiempo tenia funcionando bien un formulario de inicio de sesión para administrador, pero un seudo “experto” le echo mano para mayor seguridad y ahora no sé qué es lo que hizo que no me deja ingresar…
Les dejo los script, haber si alguien puede ayudarme a observar qué errores hay… estuve haciendo pruebas como de usuarios y contraseñas y todo funciona bien, el problema radica en la función que protege el acceso a la página… “es lo que creo”
Dejo los codigos a continuación...
INDEX.PHP
Código PHP:
Ver originalrequire('conexion.php');
sec_session_start(); // Esta funcion detiene a JavaScript en ataques a la identificación de la sesión.
if (login_check($cnx) == true){
}
if (isset($_POST['email'], $_POST['password'])) { $error = '';
$sha1_pass = sha1($password);
if (login($email, $sha1_pass, $cnx) == true) {
// Login success
} else {
$error = "El nombre o contraseña son incorrectos";
}
}
Código HTML:
Ver original<form action="<?php $_SERVER['PHP_SELF']; ?>" method="post">
<input name="email" type="text" placeholder="Usuario"> <input name="password" type="password" id="password" placeholder="Password"> <input type="checkbox" name="remember_me"> Recuerdame
<input type="submit" value="Entrar"/>
FUNCIONES.PHP
Código PHP:
Ver originalfunction sec_session_start() {
$session_panel_admin = 'user_id'; // Configura sesión personalizado.
$secure = 'SECURE';
// Esto detiene que JavaScript sea capaz de acceder a la identificación de la sesión.
$httponly = true;
// Obliga a las sesiones a solo utilizar cookies.
if (ini_set('session.use_only_cookies', 1) === FALSE) { header("Location: ../error.php?err=Could not initiate a safe session (ini_set)"); }
// Obtiene los params de los cookies actuales.
$cookieParams["path"],
$cookieParams["domain"],
$secure,
$httponly);
// Configura el nombre de sesión al configurado arriba.
}
function login($email, $sha1_pass, $cnx) {
// Usar declaraciones preparada - inyección de SQL no será posible.
if ($stmt = $cnx->prepare("SELECT ID_USUARIO, NOMBRE, PASSWORD
FROM usuarios
WHERE EMAIL = ?
LIMIT 1")) {
$stmt->bind_param('s', $email); // Une “$email” al parámetro.
$stmt->execute(); // Ejecuta la consulta preparada.
$stmt->store_result();
// Obtiene las variables del resultado..
$stmt->bind_result($user_id, $username, $db_password);
$stmt->fetch();
if ($stmt->num_rows == 1) {
if ($db_password == $sha1_pass) {
//¡La contraseña es correcta!
//Obtén el agente de usuario del usuario.
$user_browser = $_SERVER['HTTP_USER_AGENT'];
// Protección XSS ya que podríamos imprimir este valor.
$_SESSION['user_id'] = $user_id;
// Protección XSS ya que podríamos imprimir este valor.
$username = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $username);
$_SESSION['username'] = $username;
$_SESSION['login_string'] = ($sha1_pass . $user_browser);
// Inicio de sesión exitoso.
return true;
} else {
return false;
}
}
}
}
El problema creo que radica en esta parte de la función login_check..
Código PHP:
Ver originalfunction login_check($cnx) {
// Revisa si todas las variables de sesión están configuradas.
if (isset($_SESSION['user_id'], $_SESSION['username'], $_SESSION['login_string'])) { $user_id = $_SESSION['user_id'];
$username = $_SESSION['username'];
$login_string = $_SESSION['login_string'];
// Obtiene la cadena de agente de usuario del usuario.
$user_browser = $_SERVER['HTTP_USER_AGENT'];
if ($stmt = $cnx->prepare("SELECT PASSWORD
FROM usuarios
WHERE ID_USUARIO = ? LIMIT 1")) {
// Une “$user_id” al parámetro.
$stmt->bind_param('i', $user_id);
$stmt->execute(); // Ejecuta la consulta preparada.
$stmt->store_result();
if ($stmt->num_rows == 1) {
// Si el usuario existe, obtiene las variables del resultado.
$stmt->bind_result($sha1_pass);
$stmt->fetch();
$login_check = $sha1_pass;
if ($login_check == $login_string) {
// ¡¡Conectado!!
return true;
} else {
// No conectado.
return false;
}
} else {
// No conectado.
return false;
}
} else {
// Could not prepare statement
header("Location: ../error.php?err=Database error: cannot prepare statement"); }
} else {
// No conectado.
return false;
}
}
Y esta es la pagina protegida
VER.PHP
Código PHP:
Ver originalrequire('conexion.php');
include_once 'includes/functions.php';
sec_session_start();
<?php if (login_check($cnx) == true) : ?>
<p>Bienvenido <?php echo ($_SESSION['username']); ?>!</p>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
</p>
<p>Retornar a <a href="index.php">Página de acceso</a></p>
<?php else : ?>
<p>
<span class="error">Usted no esta autorizado al acceso de esta página.</span> Favor <a href="index.php">Inicie sesión</a>.
</p>
<?php endif; ?>
Cualquier info, quedo muy agradecido... ojala me puedan ayudar! saludos a todos..