Foros del Web » Programando para Internet » PHP »

seguridad mysql

Estas en el tema de seguridad mysql en el foro de PHP en Foros del Web. hola a todos! estoy ya en los pasos finales para lanzar mi web, pero antes quiero tocar el tema de seguridad, he encontrado mucha informacion ...
  #1 (permalink)  
Antiguo 01/09/2012, 19:04
 
Fecha de Ingreso: julio-2012
Ubicación: Guatemala
Mensajes: 99
Antigüedad: 11 años, 9 meses
Puntos: 2
Pregunta Seguridad php y mysql

hola a todos! estoy ya en los pasos finales para lanzar mi web, pero antes quiero tocar el tema de seguridad, he encontrado mucha informacion sobre el tema en google, acerca de inyecciones sql, bots, etc. sin embargo es tanto que no se que aplicar, que recomiendan ustedes? en mi pagina utilizo : html, php, mysql, open flash chart. Estoy usando phpmyadmin para los datos.
  #2 (permalink)  
Antiguo 01/09/2012, 19:22
Avatar de carlospc  
Fecha de Ingreso: noviembre-2008
Ubicación: Huancayo/Perú
Mensajes: 240
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: Seguridad php y mysql

para evitar los sql injections hay comandos php para validar los datos entregados, uno es el stripslashes, busca al respecto... saludos.
__________________
Mi web --> www.CarlosPC.net
  #3 (permalink)  
Antiguo 01/09/2012, 20:21
 
Fecha de Ingreso: julio-2012
Ubicación: Guatemala
Mensajes: 99
Antigüedad: 11 años, 9 meses
Puntos: 2
Respuesta: Seguridad php y mysql

muchas gracias Carlos, voy a investigar, habia leído tambien algo por ahí de ruby on rails (RoR), son lo mismo estas opciones de seguridad? son excluyentes entre si o se pueden usar al mismo tiempo?

Una pregunta sobre los captcha, estaria haciendo doble trabajo si instalo estos script antes de subir la pagina a la red si hablamos del tema de la ubicacion de los mismos? o estoy totalmente equivocado?

Ya se que son muchas preguntas pero bueno... asi se aprende, gracias!
  #4 (permalink)  
Antiguo 02/09/2012, 15:28
 
Fecha de Ingreso: julio-2012
Ubicación: Guatemala
Mensajes: 99
Antigüedad: 11 años, 9 meses
Puntos: 2
Pregunta seguridad mysql

he entendido que debo usar el mysql_real_escape_string en cualquier formulario donde el usuario ingrese datos a mi base de datos, la duda que tengo es: en mi pagina tengo una encuesta que solo utiliza botones select en donde solo pueden escoger numeros del 0 al 10, es necesario que utilice esta funcion para proteger el envio de estos numeros? o aqui no es necesario? igualmente tengo consultas a la base de datos para generar gráficas, aqui tambien seria necesario proteger las consultas mysql?... en resumen tendria que aplicar esta funcion a cualquier consulta independiente de si solo se trata de procesos internos?
  #5 (permalink)  
Antiguo 02/09/2012, 15:54
 
Fecha de Ingreso: marzo-2011
Mensajes: 68
Antigüedad: 13 años, 2 meses
Puntos: 9
Respuesta: seguridad mysql

En toda consulta donde uses datos enviados por los usuarios
  #6 (permalink)  
Antiguo 02/09/2012, 20:26
 
Fecha de Ingreso: julio-2012
Ubicación: Guatemala
Mensajes: 99
Antigüedad: 11 años, 9 meses
Puntos: 2
Respuesta: seguridad mysql

cuando utilizan la funcion siempre la "conectan" despues del where en la consulta, pero si tengo algo como esto:

$query="select ".$EXP." from ".$CM." order by ".$EXP." asc limit 1,100";

como haria para aplicarle el mysql_real_escape_string? o aqui no es necesario aplicarla?
  #7 (permalink)  
Antiguo 02/09/2012, 20:39
Avatar de AdrianSeg  
Fecha de Ingreso: enero-2010
Mensajes: 595
Antigüedad: 14 años, 3 meses
Puntos: 14
Respuesta: seguridad mysql

http://php.net/manual/es/function.my...ape-string.php
  #8 (permalink)  
Antiguo 02/09/2012, 21:29
 
Fecha de Ingreso: julio-2012
Ubicación: Guatemala
Mensajes: 99
Antigüedad: 11 años, 9 meses
Puntos: 2
Respuesta: seguridad mysql

gracias ya he leido la mayoria de lo que hay en ese link, pero no veo un ejemplo de como hacerlo con :

$query="select ".$EXP." from ".$CM." order by ".$EXP." asc limit 1,100";
  #9 (permalink)  
Antiguo 02/09/2012, 21:34
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: seguridad mysql

Siempre que incluyas una variable no numérica debes escaparla, ejemplo:

Código PHP:
Ver original
  1. $var = mysql_real_escape_string($_POST['var']);
  2.  
  3. $query = "SELECT * FROM tabla WHERE campo = '$var' LIMIT 0, 10";

P.D1: La librería mysql ya es obsoleta y deberías considerar migrar a mysqli o PDO
P.D2: Por favor no abras dos o más temas con la misma consulta
__________________
- León, Guanajuato
- GV-Foto
  #10 (permalink)  
Antiguo 02/09/2012, 22:43
 
Fecha de Ingreso: julio-2012
Ubicación: Guatemala
Mensajes: 99
Antigüedad: 11 años, 9 meses
Puntos: 2
Respuesta: seguridad mysql

gracias!

estuve aplicandolo a un update:

$cli1=sprintf ("UPDATE ".$MC." SET $EXP='".$reg["$EXP"]."' WHERE ".$NG."='%s' ", mysql_real_escape_string('1')); mysql_query($cli1);

pero ya no me actualizo los campos en mi base de datos, y no me da error, a que se debe?
  #11 (permalink)  
Antiguo 02/09/2012, 22:54
Avatar de rodrigo791  
Fecha de Ingreso: noviembre-2009
Ubicación: Uruguay
Mensajes: 1.339
Antigüedad: 14 años, 5 meses
Puntos: 168
Respuesta: seguridad mysql

que es lo que estas queriendo hacer con eso
?
  #12 (permalink)  
Antiguo 02/09/2012, 23:03
 
Fecha de Ingreso: julio-2012
Ubicación: Guatemala
Mensajes: 99
Antigüedad: 11 años, 9 meses
Puntos: 2
Respuesta: seguridad mysql

No me tira ningun error, de hecho todas las demas sentencias funcionan, excepto esta que fue la que modifique.. lo que quiero hacer es proteger el codigo de inyecciones sql, estuve investigando y de esta manera lo hacen

Última edición por ANDRESDD; 02/09/2012 a las 23:09
  #13 (permalink)  
Antiguo 02/09/2012, 23:30
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: seguridad mysql

- $reg[$EXP] es una cadena?, entonces deberías escaparla
- El valor para $NG es numérico?, no necesitas escaparlo sólo asegurarte de que sea numérico
- Los valores de $MC y $EXP son tomados de alguna entrada del usuario ($_GET, $_POST, etc.)?, entonces deberías verificar que el contenido sea adecuado
__________________
- León, Guanajuato
- GV-Foto
  #14 (permalink)  
Antiguo 02/09/2012, 23:45
 
Fecha de Ingreso: julio-2012
Ubicación: Guatemala
Mensajes: 99
Antigüedad: 11 años, 9 meses
Puntos: 2
Respuesta: seguridad mysql

Cita:
Iniciado por Triby Ver Mensaje
- $reg[$EXP] es una cadena?, entonces deberías escaparla
- El valor para $NG es numérico?, no necesitas escaparlo sólo asegurarte de que sea numérico
- Los valores de $MC y $EXP son tomados de alguna entrada del usuario ($_GET, $_POST, etc.)?, entonces deberías verificar que el contenido sea adecuado
- $reg[$EXP] si es un cadena, voy a escaparla.
- $NG si es un valor numerico, y lo tenia como ".$NG."=1 deberia dejarlo asi o como me aseguro de que sea numerico?
-$MC Y $EXP son seleccionados en base a un dato que se envia, dejo el codigo para que se vea mejor:

$var=mysql_real_escape_string($_POST['r1']);
$registro=mysql_query("select ".$EXP.", ".$AP.", ".$A.",from ".$PB." where ".$NG."='$var' ");

while($reg=mysql_fetch_array($registro)){

$cod1=mysql_real_escape_string($reg[$EXP]);

mysql_query("UPDATE ".$MC." SET $EXP=$cod1 WHERE ".$NG."=1 ",$conexion);
mysql_query("UPDATE ".$MC." SET $AP=".$reg["$AP"]." WHERE ".$NG."=1 ", $conexion);
mysql_query("UPDATE ".$MC." SET $A=".$reg["$A"]." WHERE ".$NG."=1 ", $conexion);

}

Última edición por ANDRESDD; 03/09/2012 a las 12:11
  #15 (permalink)  
Antiguo 03/09/2012, 12:15
 
Fecha de Ingreso: julio-2012
Ubicación: Guatemala
Mensajes: 99
Antigüedad: 11 años, 9 meses
Puntos: 2
Respuesta: seguridad mysql

Cuando hago esto

$var=mysql_real_escape_string($_POST['r1']);
$registro=mysql_query("select ".$EXP.", ".$AP.", ".$A.",from ".$PB." where ".$NG."='$var' ");

while($reg=mysql_fetch_array($registro)){

$cod1=mysql_real_escape_string($reg[$EXP]);

mysql_query("UPDATE ".$MC." SET $EXP=$cod1 WHERE ".$NG."=1 ",$conexion);
mysql_query("UPDATE ".$MC." SET $AP=".$reg["$AP"]." WHERE ".$NG."=1 ", $conexion);
mysql_query("UPDATE ".$MC." SET $A=".$reg["$A"]." WHERE ".$NG."=1 ", $conexion);

}


en vez de imprimirme el valor en mi base de datos me imprime literalmente la cadena $reg[$EXP], ya probe con comillas, sin comillas, etc. y ninguno dio resultado
  #16 (permalink)  
Antiguo 03/09/2012, 17:54
 
Fecha de Ingreso: julio-2012
Ubicación: Guatemala
Mensajes: 99
Antigüedad: 11 años, 9 meses
Puntos: 2
Respuesta: seguridad mysql

no he logrado arreglarlo, alguien sabe porque sucede esto?

Etiquetas: mysql, mysql_real_escape, seguridad
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 08:52.