Foros del Web » Programando para Internet » PHP »

ayuda con seguridad en web logins

Estas en el tema de ayuda con seguridad en web logins en el foro de PHP en Foros del Web. Buenas tardes, estoy trabajando en la elaboracion de un sitio web y me han comentado que el login esta muy debil, me dicen que hay ...
  #1 (permalink)  
Antiguo 17/06/2009, 15:00
 
Fecha de Ingreso: mayo-2009
Ubicación: Arequipa
Mensajes: 51
Antigüedad: 15 años
Puntos: 1
Exclamación ayuda con seguridad en web logins

Buenas tardes, estoy trabajando en la elaboracion de un sitio web y me han comentado que el login esta muy debil, me dicen que hay algunas personas que han logrado pasarse tales logins, asi que me an pedido que le de seguridad, ese es el problema, he revisado el login y a mi parecer esta ok, pero quisas me pueden dar consejos de como poder mejorarlos...
comentenme cuales serian errores comunes para arreglar

parte de mi login es:
Código PHP:
Código PHP:
if ( isset($_POST["user"]) and isset($_POST["pass"]) ){
    include(
"conexionBD.inc.php");
    
$_POST["user"]= trim($_POST["user"]); $_POST["pass"]=trim($_POST["pass"]);
    
$db="users";
    
$sql "SELECT * FROM $db";
    
$sql .= " WHERE user = '".$_POST['user']."' and pass = '".$_POST['pass']."' ";

q creo es lo mas comun...

gracias...
  #2 (permalink)  
Antiguo 17/06/2009, 15:11
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 15 años
Puntos: 1517
Respuesta: ayuda con seguridad en web logins

Trata de ingresar esto en los campos da un espacio a user y un espacio a password y dale submit sin enviar nada solo espacios
  #3 (permalink)  
Antiguo 17/06/2009, 15:14
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Respuesta: ayuda con seguridad en web logins

para empezar amigo los isset son para botones isset es cuando presiono y pues para darle mas seguridad podrias encriptar la contraseña con md5 o sha1 puedes ver esto en las preguntas frecuentes ya se ha tratado. en aportes y sistemas creo que tambien esta hablado el tema ;)
igual lo mas imporatnte tratar de escapar a caracteres especiales y demas

saludos
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #4 (permalink)  
Antiguo 17/06/2009, 15:19
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: ayuda con seguridad en web logins

que pasa si un usuario pone como usuario admin y como password: passnovalida' OR '1'='1

La consulta quedaria:
SELECT * FROM users WHERE user = 'admin' and pass = 'passnovalida' OR '1'='1'

No necesariamente podria ingresar con algo tan sencillo, pero puede seguir intentando, probando diferentes combinaciones, hasta lograrlo.

Solucion: Antes de colocar cualquier dato introducido por el usuario en una base de datos debes escaparlo:

$usuario = mysql_real_escape_string($_POST['usuario']);
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 17/06/2009, 15:39
 
Fecha de Ingreso: mayo-2009
Ubicación: Arequipa
Mensajes: 51
Antigüedad: 15 años
Puntos: 1
Respuesta: ayuda con seguridad en web logins

lo probe y el login lo aguanta es decir le dice usuario o password incorrecto, bueno algun dato mas que me han podido dar es que lo hicieron con asteriscos, etc, (signos raros) , bueno crei que fue el sql inyector pero hasta donde mis conocimientos dan no he podido pasar con el sql inyector, estoy a punto de decir que esta solucionado, pero nunca se sabe, de todos modos gracias por postear...
  #6 (permalink)  
Antiguo 17/06/2009, 15:45
 
Fecha de Ingreso: mayo-2009
Ubicación: Arequipa
Mensajes: 51
Antigüedad: 15 años
Puntos: 1
Respuesta: ayuda con seguridad en web logins

hey triby, es un buen punto este del sql inyector, he hecho algunas pruebas y hasta donde se el $_post al parecer añade \ a todos los signos que podrian significar algun peligro, y si en un caja de texto pongo alex' or 1=1 -- entonces el $_post los pone alex\' or 1=1 -- y ya no hay problema,

pregunta hay algun otro caracter q signifique una amenaza y el $_post no me ayuda???;

de todos modos voy mas a fondo con el

mysql_real_escape_string

gracias por los consejos
  #7 (permalink)  
Antiguo 17/06/2009, 15:53
Avatar de iDkInf  
Fecha de Ingreso: junio-2009
Mensajes: 52
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: ayuda con seguridad en web logins

Hola alexvb yo utilizaba antes esta funcion que encontre por algun lado y fui añadiendole cosas que necesitaba, no es 100% segura por que nada lo es pero evita por lo menos SQL Injection por ejemplo, ademas que te ayudara aprender lo básico

Saludos y espero que te valga, aunque es recomendable que hagas lo que te ha comunicado hades87

Por cierto te he puesto este mismo mensaje en otro post que tenias duplicado, te lo dejo aqui y borro el otro


Código HTML:
<form method="post" action="index.php" id="alta_usuario">
<p>
<label>Usuario:</label>
<input type="text" class="textbox_log" name="usuario" id="usuario"/>
</p>
<p>
<label>Contraseña:</label>
<input type="password" class="textbox_log" name="password" id="password"/>
</p>
<p>
<input type="image" class="bEnviar" src="bEnviar.gif"/>
</p>
</form> 


Código PHP:
<?php

// Iniciamos sesión.
session_start();

function 
verificarUsuario()
{
     
// Modificamos las variables pasadas por URL
    
foreach( $_GET as $variable => $valor )
        
$_GET $variable ] = str_replace "'" " " $_GET $variable ] );

    
// Modificamos las variables de formularios
    
foreach( $_POST as $variable => $valor )
        
$_POST $variable ] = str_replace "'" " " $_POST $variable ]);

    if ( isset( 
$_POST['usuario'] ) && isset( $_POST['password'] ) )
    {
        
// chequear si se llama directo al script.
        
if ($_SERVER['HTTP_REFERER'] == "")
        {
            
// Paramos la ejecucion del script.
            
die ("Error cod.:1 - Acceso incorrecto!");
            
            
// Salimos del script.
            
exit;    
        }
    
        
// RECOJO LAS VARIABLES
        // Quitamos caracteres extraños al valor de la variable.
        
$USUARIO stripslashes$_POST['usuario'] );
        
$PASSWORD stripslashes$_POST['password'] );
        
$consultaVerUsuario;
        
$aConsultaVerUsuario;
        
        
// Consultamos si el usuario y la contraseña son correctas.
        
$consultaVerUsuario mysql_query"SELECT * FROM iDkAdmin_usuarios 
                                            WHERE NOMBRE = '"
mysql_real_escape_string($USUARIO) . "' AND PASSWORD = '"mysql_real_escape_string($PASSWORD) . "'" )    
                                            or die( 
"Error en la consulta." );

        
// Si nos devuelve 0, esque no ha encontrado a ningun usuario o la contraseña esta escrita inconrrectamente.
        
if ( mysql_num_rows$consultaVerUsuario ) == )
        {
            echo 
'<script language="javascript">'."\n"
                
.'alert(\'El usuario no existe o el password no es valido.\');'."\n"
                
.'</script>'."\n";
        
            echo 
"<META HTTP-EQUIV='refresh' CONTENT='0; URL=index.php'>";
        }
        else
        {
            
// Guardamos la consulta en un array.
            
$aConsultaVerUsuario mysql_fetch_array$consultaVerUsuario );            
            
            
// Le damos nombre a la sesión.
            
session_name$USUARIO );
            
            
// Le decimos al explorador que no guarde en cache nada de esta página.
            
session_cache_limiter'nocache,private' );
            
            
// Guardamos información del nivel de usuario.
            
$_SESSION['usuario_nivel'] = $aConsultaVerUsuario['ID_PRIVILEGIO'];
            
            
// Guardamos información del nombre de usuario.
            
$_SESSION['usuario_login'] = $aConsultaVerUsuario['NOMBRE'];
            
            
// Recargamos la web para entrar en modo administracion.                        
            
Header ("Location: index.php");
            
            
// Salimos del script.
            
exit;
        }
        
        
// Liberamos la consulta.
        
mysql_free_result$consultaVerUsuario );
        
        
// Borramos las variables.
        
unset( $USUARIO$PASSWORD$consultaVerUsuario$aConsultaVerUsuario );
    }
}

?>

__________________

Última edición por tunait; 18/06/2009 a las 00:58 Razón: remover firma
  #8 (permalink)  
Antiguo 17/06/2009, 16:02
 
Fecha de Ingreso: mayo-2009
Ubicación: Arequipa
Mensajes: 51
Antigüedad: 15 años
Puntos: 1
Respuesta: ayuda con seguridad en web logins

iDkInf me parece muy resistente este codigo, lo voy a probar mas detenidamente,

gracias...
  #9 (permalink)  
Antiguo 17/06/2009, 16:06
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: ayuda con seguridad en web logins

alexvb, acepta mi consejo: lee un poco acerca de "comillas magicas" y no confies en que la configuracion del servidor realizara el trabajo por ti, informate un poco mas, busca y elige las mejores practicas para evitar los accesos no permitidos a tu sitio.
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 17/06/2009, 16:14
Avatar de iDkInf  
Fecha de Ingreso: junio-2009
Mensajes: 52
Antigüedad: 14 años, 10 meses
Puntos: 0
Respuesta: ayuda con seguridad en web logins

Totalmente de acuerdo con Triby, la function que te pasado no es perfecta, es solo para empezar aprender y poder tener alguna base para poder hacer algo mas grande. Espero que te sirva.

Saludos!

Última edición por tunait; 18/06/2009 a las 00:59 Razón: remover firma
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:09.