PHP - Error Login. no verifica los datos del login con la base de datos

 
Vista:

Error Login. no verifica los datos del login con la base de datos

Publicado por salvacastro (1 intervención) el 25/12/2019 23:56:01
Estoy intentado verificar varios usuarios y contraseña con un login pero cuando hago click en "Iniciar Sesion" con cualquier dato en el campo Usuario y Contraseña, me redirige a la pagina sin verificar.

Les dejo el código de mi login.php

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
<?php
if (!empty($_POST)) {
    if (!isset($_POST['usuario'])) {
        die('Falta usuario');
    }
    if (!isset($_POST['clave'])) {
        die('Falta password');
    }
    if (empty($_POST['usuario'])) {
        die('Falta ingresar el usuario');
    }
    if (empty($_POST['clave'])) {
        die('Falta ingresar password');
    }
    $conexion = mysqli_connect('localhost', 'root', '', 'basesectip');
    $usuario = $_POST['usuario'];
    $password = $_POST['clave'];
 
    $sql = "select * from usuario where username='$usuario'";
    $respuesta = mysqli_query($conexion, $sql);
    $fila = mysqli_fetch_array($respuesta);
    if ($fila) {
        $password_en_db = $fila['clave'];
        if (password_verify($password, $password_en_db)) {
            session_start();
            $_SESSION['login ok'] = true;
            $_SESSION['usuario_id'] = $fila['id'];
            header("Location: principal.php");
            die();
        } else {
            die("Contraseña incorrecta");
        }
    }
}
?>
 
<!DOCTYPE html>
<html>
 
<head>
    <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
    <title>BASE SECTIP</title>
</head>
 
<div style="background-color: #FFF;">
    <div class="login-container" style=" width: 55%; margin: auto;margin-top: 5%;padding: 5%;background-color: #f1f1f1;box-shadow: 0 2px 4px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)!important">
        <div style="background-color: white;    border-left: 4px solid #694E73; padding: 5%;">
            <h1 style="text-align: center">BASE SECTIP</h1>
            <div class="form-box">
                <form role="form" action="principal.php" class="form-group" method="post">
                    <div class="error"></div>
                    <input class="form-control" name="usuario" type="text" placeholder="USUARIO" required><br>
                    <input class="form-control" name="clave" type="password" placeholder="CONTRASEÑA" required><br>
                    <input type="submit" name="operar" value="INICIAR SESION" class="btn btn-info btn-block login">
                </form>
            </div>
        </div>
    </div>
</div>

Les dejo la imagen de mi base de datos en phpMyAdmin

Como verán, tengo únicamente esos dos usuarios.

Pero como decía anteriormente, si pongo otro cosa en usuario y contraseña (como por ejemplo banana y banana) me redirige a la pagina principal sin verificar.
phpMyAdmin
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 2.927
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Error Login. no verifica los datos del login con la base de datos

Publicado por joel (917 intervenciones) el 26/12/2019 11:01:24
Pero en tu formulario lo envias directamente a la pagina principal.php!!!

.. action="principal.php" ...

tendrías que enviarlo al login.php, no?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 108
Ha aumentado su posición en 8 puestos en PHP (en relación al último mes)
Gráfica de PHP

Error Login. no verifica los datos del login con la base de datos

Publicado por Jorge (36 intervenciones) el 26/12/2019 18:12:45
Yo lo que veo es que estás solicitando en tu form usuario y clave, pero solo mandas buscar el usuario, entonces no utilizas la clave para autenticar, tú estás aplicando el query: select * from usuario where username='$usuario'

Cuando debería ser: Select Col1, Col2, Coln From Usuario where username = $usuario and password = $password

Recomiendo por seguridad que valides por ambas columnas, y no por una sola como lo estás haciendo; adicionalmente estás aplicando
select *, para que traes todas las columnas de la tabla, trae solo lo estrictamente necesario, tú solo requieres el usuario_id para subirlo en sesion.

Finalmente dos cosas: lo primero que no deberías ejecutar este query acá deberías tener una capa de acceso a datos (DAO) y centralizar todo lo que tiene que ver con la BD en esa capa; y lo segundo es que ese query como lo estás ejecutando es susceptible de que te apliquen SQL Injection, usa sentencias preparadas y consultas parametrizadas en vez de como lo estás haciendo, yo recomendaría mejor utilizar Procedimientos Almacenados directamente en la base de datos.

Te puedes guiar con código que hay en https://github.com/JCorreal

Busca: https://github.com/JCorreal/ControlMantenimiento_PHP
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 108
Ha aumentado su posición en 8 puestos en PHP (en relación al último mes)
Gráfica de PHP

Error Login. no verifica los datos del login con la base de datos

Publicado por Jorge (36 intervenciones) el 27/12/2019 01:05:47
Espero sigas todos los consejos que te he dado, pero tu error realmente está en esta línea:

1
$password_en_db = $fila['clave'];

Tu columna en la BD no se llama clave, se llama password, tendrás que cambiarle por:

1
$password_en_db = $fila['password'];
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar