Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => Mensaje iniciado por: ars1993 en 22 Enero 2014, 12:05 PM

Título: Problema con el login (PostgreSQL+Apache+PHP5)
Publicado por: ars1993 en 22 Enero 2014, 12:05 PM
Buenas, es la primera vez que utilizo PostgreSQL como gestor de base de datos y estoy haciendo un informe sobre SQL injection. El problema es que estoy teniendo un error en el código y no tengo ni idea de donde estoy cometiendo el fallo. A ver si alguien mas experimentado me hecha una mano :P Basicamente son dos archivos:

login.php

<?php
session_start
();

include 
'pg.inc.php';

//Si se ha rellenado anteriormente el formulario, comprobar los datos
if(isset($_POST["nombre"])){

//Sentencia SQL a ejecutar
$sql "SELECT * FROM usuarios WHERE nombre = ".$_POST["nombre"]." and contrasena = ".$_POST["pwd"];
echo $sql;
$resultado ejecutar_SQL($conexion,$sql);

//Si hay filas, los datos de acceso eran correctos
if(numero_filas($resultado) != 0){

//Obtener los datos del usuario loggeado
$fila fila($resultado,0);

//Almacenar su ID en los datos de la sesión
$_SESSION["usuario"] = $fila["id"];

//Dar la bienvenida
echo "<h3>Login OK</h3> Bienvenid@ ".$fila["desc"]."<br> Pulse <a href='prducto.php'>aqui;</a> para continuar.";
}
else{
echo "<h3>Login fallido</h3>";
}
}

//Si no se ha iniciado la sesión, mostrar un formulario de logon
if(!isset($_SESSION["usuario"])){
print  '<form method="POST" action="login.php">
<table border="1">
<tr>
<td colspan="2"> Introduzca sus datos de acceso</td>
</tr>
<tr>
<td>Nombre:&nbsp;</td>
<td><input type="text" name="nombre" id="nombre"></td>
</tr>
<tr>
<td>Clave:&nbsp:</td>
<td><input type="password" name="pwd" id="pwd"></td>
</tr>
</table>
<input type="submit" value="Enviar">
</form>'
;
}

?>




pg.inc.php

<?php
//Abrir una conexión con la Base de Datos
function conectar($host$db$usuario$contraseña){
return pg_connect("host=$host dbname=$db user=$usuario password=$contraseña");
}

//Cerrar una conexión
function cerrar_conexion($conexion){
pg_close($conexion);
}

//Ejecutar una consulta SQL sobre una conexión
function ejecutar_SQL($conexion$cadena){
return pg_exec($conexion$cadena);
}

//Obtener el número de filas de un resultado
function numero_filas($resultado){
return pg_numrows($resultado);
}

//Obtiene la fila número $i de un resultado
//Para obtener un campo se usa la sintaxis $fila_obtenida["nombre-de-la-columna"]
function fila($resultado$i){
return pg_fetch_array($resultado$i);
}


//Nos conectamos a la bd
$conexion conectar('localhost''SQL_injection''postgres''***********');
?>



El error que me da cuando hago el submit en el formulario es el siguiente:
Warning: pg_exec(): Query failed: ERROR: column "faqef" does not exist LINE 1: SELECT * FROM usuarios WHERE nombre = faqef and contrasena =... ^ in C:\xampp\htdocs\sql_injection\pg.inc.php on line 14


Pero lo mejor de todo, es que hago un echo de la consulta SQL que construyo y es correcta! :S
SELECT * FROM usuarios WHERE nombre = faqef and contrasena = fewe
En este caso, tendria que devolver un "login fallido" en vez de tirar un error.


Aver si alguien tiene mas vista que yo. Muchas gracias ;D ;D
Título: Re: Problema con el login (PostgreSQL+Apache+PHP5)
Publicado por: engel lex en 22 Enero 2014, 13:01 PM
los valores a comprar en los parámetros van entre comillas simples porque siempre puede causar errores
Título: Re: Problema con el login (PostgreSQL+Apache+PHP5)
Publicado por: Shell Root en 22 Enero 2014, 20:16 PM
Cambia esto,
Código (php) [Seleccionar]
$sql = "SELECT * FROM usuarios WHERE nombre = ".$_POST["nombre"]." and contrasena = ".$_POST["pwd"];

Por esto,
Código (php) [Seleccionar]
$sql = "SELECT * FROM usuarios WHERE nombre = '".$_POST["nombre"]."' AND contrasena = '".$_POST["pwd"]."'";
Título: Re: Problema con el login (PostgreSQL+Apache+PHP5)
Publicado por: ars1993 en 23 Enero 2014, 14:08 PM
@shellroot, tu solucion me ha funcionado, muchas gracias