Ver Mensaje Individual
  #22 (permalink)  
Antiguo 22/07/2005, 16:16
Knightmare
 
Fecha de Ingreso: abril-2005
Mensajes: 15
Antigüedad: 19 años
Puntos: 0
Cita:
Iniciado por turco_7
Para mi la mejor forma de evitar esto y si las funciones agregan o no una barra ... se me ocurre preguntar si los resultados que encontro son iguales a lo que habia en la caja de texto, caso contrario, no le permito el acceso, si vos me pones ' OR 1 = '1 no importa, vos si queres podes escribir una subconsulta, que nunca va a poder acceder, repito, ya que cuando termino de hacer la consulta, pregunto si los valores que encontre son los mismos que venian del FORM .. es simple... con eso no tengo problema ..saludos ...
codigo de ejemplo:

Código PHP:
if ($_POST["usuario"]!="" && $_POST["clave"]!=""){ 
    
$usuario $_POST["usuario"]; 
    
$clave $_POST["clave"]; 
    
$clave md5($clave);
    
$sql "SELECT * FROM usuarios where usuario='$usuario' and clave='$clave'"
    
$res mysql_query($sql) or die("Error en la consult SQL: " mysql_error()); 
    if(
mysql_num_rows($res) > 0){ 
        list(
$usr,$pwd) = mysql_fetch_array($res)
     if(
$usr == $usuario and $pwd == $clave){
        
//session_start(); 
        
$_SESSION["autentificado"]= "SI"
        print 
"<meta http-equiv=Refresh content=\"3 ; url=panel.php\">"
      }else{
                echo 
"El usuario o clave es incorrecta";
       }
   }else{ 
        print 
"<meta http-equiv=Refresh content=\"3 ; url=index.php?errorusuario=si\">"
    } 

Asi evitaria de que inyecten codigo SQL ... saludos
mmm con eso solucionas que no se pueda autentificar, pero no solucionas el tema de que no te puedan hacer un sql injection, porque, yo pued inyectar algun sentencia, que haga que la consulta de error, y como consecuencia sacar info de la bd, o del servidor, etc. O sea, esta bien, nose van a poder loguear, pero no solucionas el tema de SQL Injection.

Ademas el SQL Injection no necesriamente puede estar en un formulario de login sino en cualquier lado que haga una consulta a una base de datos. Por lo que yo recomiendo siempre hacerles un addslashes() a cualquier campo que vaya a pasar por una consulta. Y si por ejemplo tenemos que guardar el registro para luego poder mostrarlo, le hariamos un addslashes() al momento de agregarlo, y cuando lo vayamos a imprimir le hacemos un stripslashes() que devolveria la cadena al formato original.

Y para evitar HTML Injection como ya dije puede usar htmlentities() que convierte todos los caracteres html en sus respectivas entidades, de manera tal que se impriman tal cual en la pagina, y que no puedan afectar al codigo html.