Foros del Web » Programando para Internet » PHP »

Evitar sql injection?

Estas en el tema de Evitar sql injection? en el foro de PHP en Foros del Web. Hola, estoy a punto de abrir mi web y estoy algo preocupado por el tema del sql injection . Por lo que he leido es ...
  #1 (permalink)  
Antiguo 05/03/2007, 09:00
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 13 años, 2 meses
Puntos: 8
Evitar sql injection?

Hola, estoy a punto de abrir mi web y estoy algo preocupado por el tema del sql injection. Por lo que he leido es un tema bastante importante a tomar en cuenta y me gustaria conocer vuestra opinión...

En la web tengo conexiones a la base de datos y consultas dinámicas que reciben parámetros para acceder a la base de datos. Por lo visto si algun usuario modifica los datos de la consulta, puede llegar a borrar tablas y cosas del estilo?

Que sistemas recomendais para evitar este problema? de los que he visto yo, el que me parece mas seguro es usar una cuenta de usuario sin privilegios administrativos, desde la que se realizarian todas las operaciones de consulta en la web. Como lo veis?

Si creeis que hay sistemas mejores.. podrias decirme algun buen manual con referencia a esto?

Tenia pensado abrir la web sin proteger los scripts pero después de leer me ha entrado el canguele xDD

Muchas gracias.
  #2 (permalink)  
Antiguo 05/03/2007, 09:12
 
Fecha de Ingreso: enero-2005
Ubicación: Barcelona
Mensajes: 1.473
Antigüedad: 14 años, 10 meses
Puntos: 10
Re: Evitar sql injection?

Hola AbdelioR,
si sigues el hilo veras q al final empiezan hablar de SQL Injection.. puede q te interese:
http://www.forosdelweb.com/showthrea...itar+injection

saludos
__________________
"Cada hombre es el hijo de su propio trabajo"
Miguel de Cervantes Saavedra
"La experiencia es algo que no consigues hasta justo depués de necesitarla"
Laurence Olivier
  #3 (permalink)  
Antiguo 06/03/2007, 02:11
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 13 años, 2 meses
Puntos: 8
Re: Evitar sql injection?

Gracias sergi_climent. Voy a echarle un ojo con calma.

Saludos.
  #4 (permalink)  
Antiguo 06/03/2007, 02:59
Avatar de MarioNunes  
Fecha de Ingreso: agosto-2005
Mensajes: 280
Antigüedad: 14 años, 4 meses
Puntos: 1
Re: Evitar sql injection?

Puedes usar la funcion addslashes:

http://de2.php.net/manual/es/function.addslashes.php

Un saludo.
__________________
www.pensandoenred.com
  #5 (permalink)  
Antiguo 06/03/2007, 13:58
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 13 años, 2 meses
Puntos: 8
Re: Evitar sql injection?

Que opinais de esta funcion para evitar este problema? me la ha pasado un amigo y quiero saber que opinais vosotros :)

Código PHP:
  function antiinjection($str)
  {
    
$banwords = array ("'"","";""--"" or "")""("" OR "" and "" AND ","/n","/r");
      if ( 
eregi "[a-zA-Z0-9]+"$str ) )
      {
        
$str str_replace $banwords'', ( $str ) );
      } else {
        
$str NULL;
      }
    
$str trim($str);
    
$str strip_tags($str);
    
$str stripslashes($str);
    
$str addslashes($str);
    
$str htmlspecialchars($str);
     return 
$str;
  } 
Saludos.
  #6 (permalink)  
Antiguo 06/03/2007, 15:04
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 13 años, 2 meses
Puntos: 8
Re: Evitar sql injection?

Bueno a parte de lo que os parezca la funcion... me ha surgido una dudilla.

Tengo un panel de comentarios en los que si el usuario escribe (( :) )) los :) se sustituyen por una carita. Pero si antes de introducir los datos a la base de datos, sustituyo estos caracteres... pues me quedo sin carita.

Que me aconsejais?
  #7 (permalink)  
Antiguo 06/03/2007, 20:26
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 15 años
Puntos: 7
Re: Evitar sql injection?

Cita:
Iniciado por AbdelioR Ver Mensaje
Que opinais de esta funcion para evitar este problema? me la ha pasado un amigo y quiero saber que opinais vosotros :)

Código PHP:
  function antiinjection($str)
  {
    
$banwords = array ("'"","";""--"" or "")""("" OR "" and "" AND ","/n","/r");
      if ( 
eregi "[a-zA-Z0-9]+"$str ) )
      {
        
$str str_replace $banwords'', ( $str ) );
      } else {
        
$str NULL;
      }
    
$str trim($str);
    
$str strip_tags($str);
    
$str stripslashes($str);
    
$str addslashes($str);
    
$str htmlspecialchars($str);
     return 
$str;
  } 
Saludos.
No uses ese tipo de funciones, generalmente sólo basta un poco de imaginación para evitarlos, dependiendo del lugar donde sean usadas.

Para cada tipo de problema, debes usar una solución adecuada...

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #8 (permalink)  
Antiguo 07/03/2007, 03:29
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 13 años, 2 meses
Puntos: 8
Re: Evitar sql injection?

Que le falla a la funcion? Podrias decirmelo?

Gracias.
  #9 (permalink)  
Antiguo 07/03/2007, 06:36
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 15 años
Puntos: 7
Re: Evitar sql injection?

Un ejemplo sencillo de SQL Injection:
Código PHP:
$id=antiinjection('4 <>OR<> 1=1');

echo 
"select * from tabla where id = $id" 
Como dije, ese tipo de funciones generalmente no sirven de mucho puesto que no todas las veces necesitas hacer los mismos filtros. Y tal como tu mismo comentas, al usar este tipo de cosas lo más seguro es que tengas problemas:
Cita:
Tengo un panel de comentarios en los que si el usuario escribe (( :) )) los :) se sustituyen por una carita. Pero si antes de introducir los datos a la base de datos, sustituyo estos caracteres... pues me quedo sin carita.
Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
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 10:12.