Foros del Web » Programando para Internet » PHP »

no logro hacer funcionar mysql_real_escape_string

Estas en el tema de no logro hacer funcionar mysql_real_escape_string en el foro de PHP en Foros del Web. he leido y leido y leido por internet acerca de el tema de evitar injeccion MySQL. y veo que hay que usar el mysql_real_escape_string y ...
  #1 (permalink)  
Antiguo 21/02/2012, 15:33
 
Fecha de Ingreso: febrero-2012
Mensajes: 8
Antigüedad: 12 años, 2 meses
Puntos: 0
De acuerdo no logro hacer funcionar mysql_real_escape_string

he leido y leido y leido por internet acerca de el tema de evitar injeccion MySQL.
y veo que hay que usar el mysql_real_escape_string y no logro hacerlo no me da la cabeza
pero no entiendo donde tengo que meter esa funcion o en que forma..
aqui dejo un formulario y el codigo php para meter los datos en la base de datos
si alguien es tan amable de darme una idea en que parte del codigo deberia poner la funcion mysql_real_escape_string o en que forma ponerla o algo lo agradeceria mucho.


Código HTML:
Ver original
  1. <form method="post" action="insertarenbase.php">
  2.        Nombre:<input type="text" name="nombre">
  3.            e-mail:   <input type="text" name="email">
  4.            País:      <input type="text" name="pais">
  5. </form>
Código PHP:
Ver original
  1. <?php
  2. $conexion = mysql_connect("localhost","root","");
  3. $seleccionar_bd = mysql_select_db("pruebas", $conexion);
  4. $nombre = $_POST['nombre'];
  5. $pais = $_POST['pais'];
  6. $email = $_POST['email'];
  7. $insertar = mysql_query("INSERT INTO paraguard (nombre, pais, email) VALUES ('$nombre', '$pais', '$email')");
  8. mysql_close($conexion);
  9. header('Location: index.html');
  10. ?>
  #2 (permalink)  
Antiguo 21/02/2012, 15:47
Avatar de CesarHC  
Fecha de Ingreso: junio-2011
Ubicación: localhost
Mensajes: 566
Antigüedad: 12 años, 10 meses
Puntos: 56
Respuesta: no logro hacer funcionar mysql_real_escape_string

Creo que el manual lo explica claramente y con ver solo el ejemplo.
__________________
Solo la práctica no te traicionara ¡¡¡¡¡¡

Seguir el camino tu debes PHP The Right Way.
  #3 (permalink)  
Antiguo 21/02/2012, 15:49
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 8 meses
Puntos: 202
Respuesta: no logro hacer funcionar mysql_real_escape_string

Únicamente debes usarlo en una variable y con una conexión abierta.
En el manual hay varios ejemplos de su uso.

Esta es una forma para evitar poner la función en cada variable:
www.php.net/manual/es/function.mysql-real-escape-string.php#97933

Muy muy sencillo. La variable $name pasa por la clase y la devuelve "limpia" con mysql_real_escape_string.
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #4 (permalink)  
Antiguo 21/02/2012, 16:42
 
Fecha de Ingreso: febrero-2012
Mensajes: 8
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: no logro hacer funcionar mysql_real_escape_string

la funcion mysql_real_escape_string lo que hace es tomar el contenido que el usuario introdujo por ejemplo en el campo <input type="text" name="nombre"> y "transformarlo" en texto simple antes de guardarse en la base de datos, osea que el servidor no lo tomará como codigo ejecutable??? eso hace? tengo la sensacion de que estoy entendiendo algo mal.
  #5 (permalink)  
Antiguo 21/02/2012, 16:45
Avatar de tata009  
Fecha de Ingreso: septiembre-2008
Ubicación: En mi casa
Mensajes: 426
Antigüedad: 15 años, 7 meses
Puntos: 3
Respuesta: no logro hacer funcionar mysql_real_escape_string

$variable2 = mysql_real_escape_string($variabledelform);
__________________
SI pones un CD de MIcrosoft al reves aparecen mensajes satanicos pero si lo pones a la derecha PEOR SE TE INSTALA WINDOWS!!!!
Para webmasters e informaticos
  #6 (permalink)  
Antiguo 21/02/2012, 16:50
Avatar de xpapachox  
Fecha de Ingreso: junio-2011
Mensajes: 77
Antigüedad: 12 años, 10 meses
Puntos: 12
Respuesta: no logro hacer funcionar mysql_real_escape_string

Un ejemplo sencillo seria asi..
Mayormente cuando se hace consulta enviando un parametro


$sql = "select codpro, nompro, prepro from producto where codpro=". mysql_escape_string($codigo);

$resul=mysql_quer($sql);


Pero leyendo un poco me he dado cuenta que esta función pasará hacer obsoleta.

En su reemplazo seria aconsejable usar: mysql_real_escape_string
  #7 (permalink)  
Antiguo 21/02/2012, 16:57
 
Fecha de Ingreso: febrero-2012
Mensajes: 8
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: no logro hacer funcionar mysql_real_escape_string

entonses estas dos funciones:

mysql_escape_string($codigo);
mysql_real_escape_string($variabledelform);

las tengo que usar cuando hago una consulta para obtener informacion de una base de datos, yo estaba equibocado, pensaba que la tenia que usar cuando hiba a meter informacion para que ya quede guardada de forma "segura".

entonses.
la forma que estaba usando de meter la informacion en las bases de datos:
Código PHP:
Ver original
  1. <?php
  2. $conexion = mysql_connect("localhost","root","");
  3. $seleccionar_bd = mysql_select_db("pruebas", $conexion);
  4. $nombre = $_POST['nombre'];
  5. $pais = $_POST['pais'];
  6. $email = $_POST['email'];
  7. $insertar = mysql_query("INSERT INTO paraguard (nombre, pais, email) VALUES ('$nombre', '$pais', '$email')");
  8. mysql_close($conexion);
  9. header('Location: index.html');
  10. ?>

esa forma es segura? al meter informacion no tengo que usar el mysql_real_escape_string() ?
tendré que usar esa funcion al querer consultar informacion para mostrarla en la pagina?
  #8 (permalink)  
Antiguo 21/02/2012, 17:10
Avatar de xpapachox  
Fecha de Ingreso: junio-2011
Mensajes: 77
Antigüedad: 12 años, 10 meses
Puntos: 12
Respuesta: no logro hacer funcionar mysql_real_escape_string

Bueno se puede utiliar para ambas cosas.

Pero las inyecciones sql solo atacaran a tus consultas Selects y no a tus INSERTS, UPDATES o DELETES.

Supongamos nos intentan meter una inyeccion de este tipo en la parte de acceso
al sistema(LOGIn)

$_POST['username'] = 'aidan';
$_POST['password'] = "' OR ''='";

-------------------------------------------------
Aca es donde recuperamos el codigo
$user = $_POST['username'] ;
$pass = $_POST['password'] ;

-De este modo no estariamos protejido..

$query = "SELECT * FROM users WHERE user='{$user }' AND password='{$pass }'";
mysql_query($query);


-Pero de este modo si:

$query = "SELECT * FROM users WHERE user='{mysql_real_escape_string($user) }' AND password='{mysql_real_escape_string($pass)}'";
mysql_query($query);
  #9 (permalink)  
Antiguo 21/02/2012, 17:11
 
Fecha de Ingreso: mayo-2008
Mensajes: 103
Antigüedad: 15 años, 10 meses
Puntos: 14
Respuesta: no logro hacer funcionar mysql_real_escape_string

Imaginate una función así:
Código PHP:
function manejaTexto ($texto) {
return 
$texto;
}

$miVariableLimpiada manejaTexto($miVariableFormulario); 
Esa función recoge un texto y te lo devuelve.
My_sql_real_escape_string hace lo mismo, pero gestionando el contenido de esa variable para buscar cosas feas y monstruosas y quitarlas. Para hacerlo necesita una conexión a la base de datos, así que cada vez que uses my_sql_real_escape_string hazlo como si fuera mysql_query, es decir, ten una conexión abierta.

Espero que te quede más claro :)
  #10 (permalink)  
Antiguo 21/02/2012, 17:22
 
Fecha de Ingreso: agosto-2010
Ubicación: Tenerife
Mensajes: 893
Antigüedad: 13 años, 8 meses
Puntos: 202
Respuesta: no logro hacer funcionar mysql_real_escape_string

Cita:
Iniciado por xpapachox Ver Mensaje
Pero las inyecciones sql solo atacaran a tus consultas Selects y no a tus INSERTS, UPDATES o DELETES.
Eso no es correcto. Una inyección SQL implica alterar la consulta u obtener información (nombre de campos, valores de los mismos y tablas) y vulnerar así una web.
Por norma general se hacen en los Selects por temas de login, pero dependiendo de como se ha programado la página puedes hacer auténticos destrozos.
Ya he visto en alguna que otra página deletes donde se les puede pasar el id por GET sin validar nada y burradas similares.
Una inyección se puede hacer a cualquier consulta.

Eso del lado del servidor pq ya ni hablemos de las vulnerabilidades XSS.

Cualquier usuario que se preocupe por la seguridad de su web +10
__________________
Pensaba que internet era una gran biblioteca de sabiduría, hasta que comprendí que un libro no puede tener mil páginas llenas de faltas de ortografía... :(
  #11 (permalink)  
Antiguo 21/02/2012, 19:13
 
Fecha de Ingreso: febrero-2012
Mensajes: 8
Antigüedad: 12 años, 2 meses
Puntos: 0
Respuesta: no logro hacer funcionar mysql_real_escape_string

gracias :D
puse este codigo y me funciona bien se guardan los datos en la tabla de datos, pero para corroborar que este usando correctamente la funcion, me podrian decir si está bien como la estoy usando la forma de escapar a string?

Código PHP:
Ver original
  1. <?php
  2. $conexion = mysql_connect("localhost","root","");
  3. $seleccionar_bd = mysql_select_db("pruebas2012", $conexion);
  4. $nombre = $_POST['nombre'];
  5. $pais = $_POST['pais'];
  6. $email = $_POST['email'];
  7. $insertar = mysql_query("INSERT INTO paramega (nombre, pais, email)
  8. VALUES ({mysql_real_escape_string('$nombre')},
  9. {mysql_real_escape_string('$pais')}, {mysql_real_escape_string('$email')} )");
  10.  
  11. mysql_close($conexion);
  12. header('Location: index.html');
  13. ?>

tengo una dudita tengo que poner la variable $pais entre comillas? '$pais'
ejemplo:
{mysql_real_escape_string('$pais')}
o sin comillas:
{mysql_real_escape_string($pais)}
???

por cierto, muchas gracias a todos :D son re amables

Última edición por KevinVG; 21/02/2012 a las 20:01

Etiquetas: mysql, mysql_real_escape_string
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:17.