Foros del Web » Programando para Internet » PHP »

Consultas seguros MySQL en PHP

Estas en el tema de Consultas seguros MySQL en PHP en el foro de PHP en Foros del Web. Hola a todos, tengo un problema con las consultas a MySQL y es que no son del todo seguras, yo he hecho una funcion como ...
  #1 (permalink)  
Antiguo 26/05/2012, 13:10
Avatar de daffyduck  
Fecha de Ingreso: febrero-2012
Mensajes: 13
Antigüedad: 12 años, 2 meses
Puntos: 1
Consultas seguros MySQL en PHP

Hola a todos, tengo un problema con las consultas a MySQL y es que no son del todo seguras, yo he hecho una funcion como esta:

Código PHP:
function clean($clean

    
$clean preg_replace("/[^a-zA-Z0-9\s]/"""$clean);
    return 
$clean

Que solo permite numeros y letras, pero no creo que esto sea del todo seguro, deberia de usar mysql_real_escape_string() y sprintf() pero no se muy bien como usarlas.

¿Alguien puede ayudarme a como hacer una query segura para evitar MySQL injection?

Normalmente mis Querys son asi...

Código PHP:
$consulta 'SELECT * FROM tabla WHERE id='.$id.; 

Desde ya muchas gracias a todos, un saludo
  #2 (permalink)  
Antiguo 26/05/2012, 13:26
 
Fecha de Ingreso: enero-2011
Ubicación: /root
Mensajes: 530
Antigüedad: 13 años, 3 meses
Puntos: 61
Respuesta: Consultas seguros MySQL en PHP

Puedes usar PDO http://php.net/manual/es/intro.pdo.php

Saludos
  #3 (permalink)  
Antiguo 26/05/2012, 14:11
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Consultas seguros MySQL en PHP

matt_1985. Corrígeme si me equivoco, pero usar PDO, no va a filtrar ninguna inyección tipo where id=12 or 1=1.

A parte de eso, PDO es una buena recomendación.

Saludos.
  #4 (permalink)  
Antiguo 26/05/2012, 15:12
Avatar de daffyduck  
Fecha de Ingreso: febrero-2012
Mensajes: 13
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Consultas seguros MySQL en PHP

Gracias por responder

Pero no entiendo muy bien como utilizar PDO de todas formas, tengo todo armado como he mencionado el ejemplo de MySQL arriba, me gustaria saber como hacer la consulta mas segura, muchas gracias :)
  #5 (permalink)  
Antiguo 26/05/2012, 15:20
Avatar de oscartt67  
Fecha de Ingreso: abril-2012
Ubicación: fonollosa
Mensajes: 481
Antigüedad: 12 años
Puntos: 97
Respuesta: Consultas seguros MySQL en PHP

PDO crea una capa entre tu código y la base de datos, pero esa es otra guerra.

Respecto a la inyección, es un tema que no domino lo suficiente para contestarte correctamente. espero que alguien con más conocimiento lo haga.

Salud!
  #6 (permalink)  
Antiguo 26/05/2012, 20:11
Avatar de daffyduck  
Fecha de Ingreso: febrero-2012
Mensajes: 13
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Consultas seguros MySQL en PHP

Bueno, gracias por el consejo de usar PDO, lo estoy tratando, pero como aun no lo domino lo suficiente voy primero a hacer seguras las consultas actuales y cuando ya acomode esto, pasare a PDO.

He encontrado esta forma de hacer mas segura la consulta mysql, ¿podria alguien decirme si es medianamente segura, o deberia de añadir algo mas?

Código PHP:
$consultasprintf("SELECT * FROM tabla WHERE id='%s'"mysql_real_escape_string($id)); 
Muchas gracias!:)
  #7 (permalink)  
Antiguo 27/05/2012, 01:28
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
Respuesta: Consultas seguros MySQL en PHP

mysql_real_escape_string funciona muy bien contra inyección SQL, pero tiene un defecto, si las magic_quotes están habilitadas estarias "escapando" 2 veces las comillas (sencillas y dobles) lo preferente es primero verificar si magic_quotes están habilitadas o no...

Código PHP:
Ver original
  1. function sanitize($string) {
  2.      if (function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc()) {
  3.           if (!empty(ini_get('magic_quotes_sybase'))) {
  4.                $string = str_replace("''", "'",$string);
  5.           }else {
  6.                $string = filter_var(stripslashes($string),FILTER_SANITIZE_STRING);
  7.           }
  8.      }
  9.  
  10.      return $string;
  11. }

PD: para usar la función filter_var es necesario PHP 5.2.0 en adelante!
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #8 (permalink)  
Antiguo 27/05/2012, 03:42
 
Fecha de Ingreso: enero-2011
Mensajes: 59
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Consultas seguros MySQL en PHP

Cita:
Iniciado por daffyduck Ver Mensaje
Bueno, gracias por el consejo de usar PDO, lo estoy tratando, pero como aun no lo domino lo suficiente voy primero a hacer seguras las consultas actuales y cuando ya acomode esto, pasare a PDO.

He encontrado esta forma de hacer mas segura la consulta mysql, ¿podria alguien decirme si es medianamente segura, o deberia de añadir algo mas?

Código PHP:
$consultasprintf("SELECT * FROM tabla WHERE id='%s'"mysql_real_escape_string($id)); 
Muchas gracias!:)
Tengo la misma duda que tu, yo realizo las consultas sin ningún tipo de seguridad, y vamos sé que en mi "miniweb" nadie se va a molestar en hacer una inyección jejejeje
Pero en futuros proyectos sé que debo de enviar las consultas lo mas seguras posibles ;)

Código PHP:
$consultasprintf("SELECT * FROM tabla WHERE id='%s'"mysql_real_escape_string($id)); 
¿Como se queda definido eso de '%s'?
¿Que pasa si en la consulta hay mas condiciones o mas selects?
Ej:
Código PHP:
$consulta= ("SELECT * FROM tabla WHERE id=$id AND email='$email'"
No se como va eso de quedar definido el '%s'
¡Que perdido estoy!
  #9 (permalink)  
Antiguo 27/05/2012, 04:10
 
Fecha de Ingreso: enero-2011
Mensajes: 59
Antigüedad: 13 años, 3 meses
Puntos: 2
Respuesta: Consultas seguros MySQL en PHP

Hola,

He ido probando y probando y parece ser que lo unico que define '%s' es que estén en orden, no?
Mi consulta queda así:
Código PHP:
$usuarios mysql_query(sprintf("SELECT * FROM usuarios WHERE nick='%s' and pass='%s'",
mysql_real_escape_string($nick),
mysql_real_escape_string($pass))); 
Y bueno, ahora sigo con la pregunta de daffyduck, ¿esto es lo suficientemente seguro para protegerme frente a los ataques en SQL?
Si con esto evito que me "borren la tabla usuarios", es mas que suficiente
Saludos!

Etiquetas: mysql, seguros, tabla
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 18:57.