Foros del Web » Programando para Internet » PHP »

Hace falta usar mysql_real_escape_string, si se limpia antes el string?

Estas en el tema de Hace falta usar mysql_real_escape_string, si se limpia antes el string? en el foro de PHP en Foros del Web. Hola, Para limpiar las entadas de datos de los usuarios estoy usando una funcion que encontre que quita los caracteres no permitidos: Código PHP: function  ...
  #1 (permalink)  
Antiguo 24/03/2008, 18:10
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Hace falta usar mysql_real_escape_string, si se limpia antes el string?

Hola,

Para limpiar las entadas de datos de los usuarios estoy usando una funcion que encontre que quita los caracteres no permitidos:


Código PHP:
function quitar($mensaje)
{
    
$nopermitidos = array("'",'\\','<','>',"\"",";");
    
$mensaje str_replace($nopermitidos""$mensaje);
    return 
$mensaje;
}
$usuario quitar($_POST["usuario"]); //limpio la entrada POST 
Y mi pregunta es que si es necesario usar

mysql_real_escape_string

si ya he usado esta funcion.

Gracias.
  #2 (permalink)  
Antiguo 24/03/2008, 18:36
 
Fecha de Ingreso: febrero-2008
Ubicación: Bahia Blanca
Mensajes: 173
Antigüedad: 16 años, 2 meses
Puntos: 7
Re: Hace falta usar mysql_real_escape_string, si se limpia antes el string?

mysql_real_escape_string es lo mas seguro que hay.

Lo ideal es crear una funcion que haga lo siguiente:

Si las comillas magicas están activadas en tu .php.ini usar mysql_real_escape_string
Si están desactivadas, usar primero add_slashes, y luego mysql_real_escape_string

Tu funcion tambien sirve, pero habría que agregarle otros valores mas al array como "#" "%" , etc)
  #3 (permalink)  
Antiguo 24/03/2008, 18:43
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: Hace falta usar mysql_real_escape_string, si se limpia antes el string?

Gracias por responder,

agrgare esos caracteres que me comentas y alguno mas que vea.

Gracias.
  #4 (permalink)  
Antiguo 24/03/2008, 19:13
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Hace falta usar mysql_real_escape_string, si se limpia antes el string?

Cita:
Iniciado por shock_dude Ver Mensaje
Lo ideal es crear una funcion que haga lo siguiente:

Si las comillas magicas están activadas en tu .php.ini usar mysql_real_escape_string
Si están desactivadas, usar primero add_slashes, y luego mysql_real_escape_string
No es del todo cierto. Más parece que es al revés. Veamos.

Si tienes magic_quotes activados y tienes este código:

Código PHP:
echo $_GET['variable']; 
al llamar al archivo de la forma archivo.php?variable=D'jango, el script imprimirá esto:
Cita:
D\'jango
Ahora, si encima de eso le aplicas el mysql_real_escape_string() tendremos:
Cita:
D\\\'jango
Osea, está escapando la barra invertida que escapa la comilla, y la comilla (otra vez). Por lo tanto, al guardar a la base de datos se guardará de la primera forma, con las barras agregadas.

Lo mismo si magic_quotes están desactivadas. Ese es el modo óptimo. Si usas addslashes es como que estuvierras imitando el comportamiento de magic_quotes, y sucede el mismo caso anterior.

La lógica para este caso sería:
  • magic_quotes activado: Aplicar a la cadena un stripslashes() y luego la función mysql_real_escape_string()
  • magic_quotes desactivado: Aplicar direactamente la función mysql_real_escape_string().
La función "ideal" que mencionas sería en todo caso:

Código PHP:
function mysql_escape($cadena) {
    if(
get_magic_quotes_gpc() != 0) {
        
$cadena stripslashes($cadena);
    }
    return 
mysql_real_escape_string($cadena);

El manual de PHP lo dice:
Cita:
Iniciado por http://www.php.net/mysql_real_escape_string
Note: Si se habilita magic_quotes_gpc, aplique stripslashes() sobre los datos primero. Usar esta función sobre datos que ya han sido escapados los escapará dos veces.
Saludos,
  #5 (permalink)  
Antiguo 24/03/2008, 19:29
Avatar de MoDoRrO  
Fecha de Ingreso: septiembre-2005
Ubicación: Php+Flash+AS
Mensajes: 1.072
Antigüedad: 18 años, 7 meses
Puntos: 12
Re: Hace falta usar mysql_real_escape_string, si se limpia antes el string?

me suscribo a este tema, es bueno ;)

como quien dice, tambien sirve para evitar ataques XSS ??

Saludes
  #6 (permalink)  
Antiguo 24/03/2008, 19:41
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Hace falta usar mysql_real_escape_string, si se limpia antes el string?

@MoDoRrO, de tiempo que te leo. El XSS es frecuentemente usado para evadir e inyectar código Script (javascript, vbscript, etc):

http://es.wikipedia.org/wiki/Cross_Site_Scripting
Cita:
XSS, del inglés Cross-site scripting es un ataque basado en la explotación de vulnerabilidades del sistema de validación de HTML incrustado.

[...]

XSS es un ataque basado en explotar vulnerabilidades del sistema de validación de HTML incrustado. Su nombre original "Cross Site Scripting", y renombrado XSS para que no sea confundido con las hojas de estilo en cascada (CSS), originalmente abarcaba cualquier ataque que permitiera ejecutar código de "scripting", como VBScript o javascript, en el contexto de otro dominio.

Recientemente se acostumbra a llamar a los ataques de XSS "HTML Injection", sin embargo el término correcto es XSS. Estos errores se pueden encontrar en cualquier aplicación HTML, no se limita a sitios web, ya que puede haber aplicaciones locales vulnerables a XSS, o incluso el navegador en sí. El problema está en que normalmente no se validan correctamente los datos de entrada que son usados en cierta aplicación.
Ahora, con la aparición y el cada vez más frecuente uso de AJAX, están apareciendo nuevas formas de XSS que justamente tratan de identificar vulnerabilidades en estos sistemas.

Pero en general, mysql_real_escape_string() y funciones afines, así como magic_quotes, fueron inicialmente pensados para evitar el SQL Injection (Servidor; XSS es más Cliente).

Un saludo,
  #7 (permalink)  
Antiguo 25/03/2008, 05:03
Avatar de jaronu  
Fecha de Ingreso: febrero-2008
Mensajes: 2.183
Antigüedad: 16 años, 2 meses
Puntos: 52
Re: Hace falta usar mysql_real_escape_string, si se limpia antes el string?

gracias de nuevo okram,

estoy usando esa funcion que pusiste y funcuina bien, o eso parece,

llamo a la funcion asi:

Cita:
$comentario = mysql_escape($comentario);
Pero de todas formas usare los dos sistemas, limpiare el string y luego la funcion

Cita:

mysql_escape($comentario);
Gracias por las respuestas
  #8 (permalink)  
Antiguo 25/03/2008, 14:26
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Hace falta usar mysql_real_escape_string, si se limpia antes el string?

Tu decides. Con tu función estás eliminando esos caracteres. Si el usuario los escribe no quedará rastro de ellos. Si los escapas los caracteres seguirán ahi, pero no hay riesgo de SQL Injection ni esas cosas.

Saludos,
  #9 (permalink)  
Antiguo 26/03/2008, 09:46
Avatar de MoDoRrO  
Fecha de Ingreso: septiembre-2005
Ubicación: Php+Flash+AS
Mensajes: 1.072
Antigüedad: 18 años, 7 meses
Puntos: 12
Re: Hace falta usar mysql_real_escape_string, si se limpia antes el string?

Gracias por la Respuesta oKram!

siempre ma haz ayudado directa o indirectamente

Saludos!

te agrego a mi lista de amigos ahora....
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 09:07.