Foros del Web » Programando para Internet » PHP »

mysql_real_escape_string

Estas en el tema de mysql_real_escape_string en el foro de PHP en Foros del Web. Estimados, He visto mucho por ahí que están utilizando mysql_real_escape_string() para porotegerse de posibles inyecciones, pero mi pregunta (por ignorancia) es: como funciona, que es ...
  #1 (permalink)  
Antiguo 04/12/2010, 09:49
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Información mysql_real_escape_string

Estimados,

He visto mucho por ahí que están utilizando mysql_real_escape_string() para porotegerse de posibles inyecciones, pero mi pregunta (por ignorancia) es: como funciona, que es lo que verdaderamente hace y como se deberia implementar

He visto esto y me sorporende el warning:
http://cl.php.net/manual/es/function...ape-string.php

en lugar encontré esto:
http://cl.php.net/manual/es/function...ape-string.php

pero sigo estando poco claro

Algun aporte para que muchos aprendamos?

Gracias
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #2 (permalink)  
Antiguo 04/12/2010, 10:00
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: mysql_real_escape_string

Encontré esto en el foro y esta bastante bueno y claro:
http://www.forosdelweb.com/f18/segur...string-771861/

Alguien colabora con algún otro aporte?
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #3 (permalink)  
Antiguo 04/12/2010, 10:24
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: mysql_real_escape_string

Hay mucha info sobre esto, pero para mi el tema es porque seguir usando esas funciones?, hoy en día no veo razón para ello(a no ser que tengas la desgracia de seguir con php 4),
PDO existe no es un adorno .
  #4 (permalink)  
Antiguo 04/12/2010, 10:28
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: mysql_real_escape_string

Cita:
Iniciado por masterpuppet Ver Mensaje
Hay mucha info sobre esto, pero para mi el tema es porque seguir usando esas funciones?, hoy en día no veo razón para ello(a no ser que tengas la desgracia de seguir con php 4),
PDO existe no es un adorno .
PDO?, excelente, que es?, donde puedo saber más de esto?

Agradezco tu post, seguro muchos también
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #5 (permalink)  
Antiguo 04/12/2010, 10:29
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: mysql_real_escape_string

Según el manual de PHP, esto es lo que hace :

Cita:
Escapes special characters in the unescaped_string, taking into account the current character set of the connection so that it is safe to place it in a mysql_query(). If binary data is to be inserted, this function must be used.

mysql_real_escape_string() calls MySQL's library function mysql_real_escape_string, which prepends backslashes to the following characters: \x00, \n, \r, \, ', " and \x1a.

This function must always (with few exceptions) be used to make data safe before sending a query to MySQL.
\x00 = NULL ( me corrigen si me equivoco )
\x1a = SUB

Fuente : http://www.pcguide.com/res/tablesASCII-c.html
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #6 (permalink)  
Antiguo 04/12/2010, 10:48
Usuario no validado
 
Fecha de Ingreso: diciembre-2010
Mensajes: 42
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: mysql_real_escape_string

Buen día,

mysql_real_escape_string se utiliza para escapar como su mismo nombre lo indica, algunos caracteres que pueden ser peligrosos en la hora de inyectar datos en tus consultas sql mediante php.
  #7 (permalink)  
Antiguo 04/12/2010, 10:49
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: mysql_real_escape_string

Cita:
Iniciado por spider_boy Ver Mensaje
Según el manual de PHP, esto es lo que hace :



\x00 = NULL ( me corrigen si me equivoco )
\x1a = SUB

Fuente : http://www.pcguide.com/res/tablesASCII-c.html

interesante, pero para mi nivel muy confuso e inentendible el de \x00 lo entiendo, pero Substitute, porque?, como demuestras que es un SUB?
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #8 (permalink)  
Antiguo 04/12/2010, 10:50
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: mysql_real_escape_string

Cita:
Iniciado por bluesnt Ver Mensaje
Buen día,

mysql_real_escape_string se utiliza para escapar como su mismo nombre lo indica, algunos caracteres que pueden ser peligrosos en la hora de inyectar datos en tus consultas sql mediante php.
PERFECTO y Simple, muy amable y sencillo,

osea que anteponer mysql_real_escape_string() a la consulta le antepone un \ por ejemplo, asi el dato guardado x quedaria \x, es eso?
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #9 (permalink)  
Antiguo 04/12/2010, 10:57
Usuario no validado
 
Fecha de Ingreso: diciembre-2010
Mensajes: 42
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: mysql_real_escape_string

Buen día, ampliando mi respuesta...

mysql_real_escape_string se utiliza para escapar como su mismo nombre lo indica, algunos caracteres que pueden ser peligrosos en la hora de inyectar datos en tus consultas sql mediante php.


Un claro ejemplo de lo que se podría evitar es el siguiente:

En el script para ejecutar la consulta sql se pasan datos mediante la variable $_GET..
Código PHP:
Ver original
  1. mysql_query("UPDATE usuarios SET nombre = '$_GET[nombre]' WHERE id = $id");

En la inteligencia que cualquier persona puede cambiar la variable $_GET en la petición de la url. El resultado seria fatal si el usuario se da cuenta de la vulnerabilidad, algo como esto:

[URL="http://localhost/index.php?nombre=';DELETE FROM"]http://localhost/index.php?nombre=';DROP TABLE usuarios;SELECT * FROM usuarios[/URL]

El resultado seria que el usuario podría modificar a su gusto la consulta sql pudiendo borrar datos, o alterandolos.

La funcion mysql_real_escape_string escaparia la comilla simple de la variable GET, quedando la consulta así:
Código SQL:
Ver original
  1. UPDATE usuarios SET nombre = '\\';DROP TABLE usuarios;SELECT * FROM usuarios' WHERE id = $id

Mi recomendación adicional es validar los datos para que no afecte el funcionamiento de su sistema un dato incongruente a lo que debería estar plasmado.

Si no se usara el mysql_real_escape_string entonces la consulta quedaría así:

Código SQL:
Ver original
  1. UPDATE usuarios SET nombre = '';DROP TABLE usuarios;SELECT * FROM usuarios WHERE id = $id
  #10 (permalink)  
Antiguo 04/12/2010, 11:06
Usuario no validado
 
Fecha de Ingreso: diciembre-2010
Mensajes: 42
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: mysql_real_escape_string

Cita:
Iniciado por function Ver Mensaje
PERFECTO y Simple, muy amable y sencillo,

osea que anteponer mysql_real_escape_string() a la consulta le antepone un \ por ejemplo, asi el dato guardado x quedaria \x, es eso?
En conclusión y una respuesta a lo que tu dices....

Lo unico que hace esta función es poner una barrita invertida (\) a los caracteres considerados peligrosos, como es la comilla simple ' la comilla doble " etc...


Espero te haya servido mi explicación...

Saludos
  #11 (permalink)  
Antiguo 04/12/2010, 11:10
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: mysql_real_escape_string

Cita:
Iniciado por bluesnt Ver Mensaje
En conclusión y una respuesta a lo que tu dices....

Lo unico que hace esta función es poner una barrita invertida (\) a los caracteres considerados peligrosos, como es la comilla simple ' la comilla doble " etc...


Espero te haya servido mi explicación...

Saludos
MUCHO!! la verdad es que me ha servido mucho,

Gracias
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #12 (permalink)  
Antiguo 04/12/2010, 11:15
Usuario no validado
 
Fecha de Ingreso: diciembre-2010
Mensajes: 42
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: mysql_real_escape_string

Cita:
Iniciado por function Ver Mensaje
MUCHO!! la verdad es que me ha servido mucho,

Gracias
Me alegro, soy nuevo en la comunidad, quiero aportar con mis conocimientos...

De una forma mas coloquial, lo que hace es lo mismo que cuando insertamos html en una variable con comillas dobles:
Código PHP:
Ver original
  1. $html = "<img src=\"img/logo.png\" alt=\"Logotipo\" />";

Las comillas dobles que se necesitan para encerrar a los atributos de una etiqueta se tienen que escapar para evitar errores de sintaxis
  #13 (permalink)  
Antiguo 04/12/2010, 11:24
Avatar de function  
Fecha de Ingreso: abril-2010
Mensajes: 278
Antigüedad: 14 años
Puntos: 13
Respuesta: mysql_real_escape_string

Cita:
Iniciado por bluesnt Ver Mensaje
Me alegro, soy nuevo en la comunidad, quiero aportar con mis conocimientos...

De una forma mas coloquial, lo que hace es lo mismo que cuando insertamos html en una variable con comillas dobles:
Código PHP:
Ver original
  1. $html = "<img src=\"img/logo.png\" alt=\"Logotipo\" />";

Las comillas dobles que se necesitan para encerrar a los atributos de una etiqueta se tienen que escapar para evitar errores de sintaxis

Osea que esto quedaría asi:

Código PHP:
$html "<img src=mysql-real_escape_string("img/logo.png") alt=mysql-real_escape_string("Logotipo") />"
?
__________________
~# echo Hemos logrado la independencia, pero no la libertad >> SimonBolivar
  #14 (permalink)  
Antiguo 04/12/2010, 11:30
Usuario no validado
 
Fecha de Ingreso: diciembre-2010
Mensajes: 42
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: mysql_real_escape_string

No, creo que ya te he confundido, el mysql_real_escape_string en una consulta se usa así...

Código PHP:
Ver original
  1. $query = mysql_query("SELECT * FROM usuarios WHERE username = ".mysql_real_escape_string($_POST['username'])."");

Usarlo en el ejemplo que tu me has dado es imposible, mas bien, no es imposible, pero tienes que tener en cuenta que tiene que ser una variable insegura... a esto ya se le conoce como xss hasta cierto punto pero se usa otro tipo de métodos para evitarlo, la función mysql_real_escape_string fue hecha para escapar datos en las consultas sql, y solo para eso...
  #15 (permalink)  
Antiguo 04/12/2010, 11:47
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: mysql_real_escape_string

function, te recomiendo que mires PDO y leas sobre Prepared Statments, como te decia sino utilizas php 4 no hay necesidad de usar las funciones mysql_*.

Salu2.
  #16 (permalink)  
Antiguo 04/12/2010, 11:49
Usuario no validado
 
Fecha de Ingreso: diciembre-2010
Mensajes: 42
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: mysql_real_escape_string

Cita:
Iniciado por masterpuppet Ver Mensaje
function, te recomiendo que mires [URL="http://www.php.net/manual/es/book.pdo.php"]PDO[/URL] y leas sobre [URL="http://dev.mysql.com/tech-resources/articles/4.1/prepared-statements.html"]Prepared Statments[/URL], como te decia sino utilizas php 4 no hay necesidad de usar las funciones mysql_*.

Salu2.
PDO es una buena alternativa, pero hay que tener en cuenta que no todos los servidores compartidos cuentan con PDO, estaría recortando compatibilidad a su aplicación...
  #17 (permalink)  
Antiguo 04/12/2010, 12:03
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: mysql_real_escape_string

Cita:
Iniciado por bluesnt Ver Mensaje
PDO es una buena alternativa, pero hay que tener en cuenta que no todos los servidores compartidos cuentan con PDO, estaría recortando compatibilidad a su aplicación...
No comparto bluesnt, cualquier hosting barato de 10U$D tiene PDO activado y si estas desarrollando una aplicacion al dia de hoy, al hostearla vas a buscar como minimo apache 2+ y php 5.2.3+, que es lo que brinda la mayoria de los hosting compartidos.
  #18 (permalink)  
Antiguo 04/12/2010, 12:13
Usuario no validado
 
Fecha de Ingreso: diciembre-2010
Mensajes: 42
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: mysql_real_escape_string

Cita:
Iniciado por masterpuppet Ver Mensaje
No comparto bluesnt, cualquier hosting barato de 10U$D tiene PDO activado y si estas desarrollando una aplicacion al dia de hoy, al hostearla vas a buscar como minimo apache 2+ y php 5.2.3+, que es lo que brinda la mayoria de los hosting compartidos.
Comparto tu idea hasta cierto punto, pero aun así, hay personas que aun utilizan php 4, de lo contrario algunos frameworks no seguirían dando soporte a php 4, un gran ejemplo es Codeigniter
  #19 (permalink)  
Antiguo 04/12/2010, 12:48
Avatar de masterpuppet
Software Craftsman
 
Fecha de Ingreso: enero-2008
Ubicación: Montevideo, Uruguay
Mensajes: 3.550
Antigüedad: 16 años, 3 meses
Puntos: 845
Respuesta: mysql_real_escape_string

Si también te podría dar un ejemplo de lo contrario Zend(minimo php 5.2.3+), mantener aplicaciones antiguas vale, pero crear hoy aplicaciones utilizando esas funciones me parece una muy mala elección.

Salu2.

Etiquetas: Ninguno
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 00:02.