Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: dimitrix en 26 Enero 2012, 02:48 am



Título: Problema cuando mysql_real_escape_string guarda las comillas
Publicado por: dimitrix en 26 Enero 2012, 02:48 am
El problema es que si tengo esto:

$texto='Que bonito es este "Mundo" tan maravilloso'.

site le paso el mysql_real_escape_string();

Lo que se guarda en la base de datos es:

Que bonito es este \"Mundo\" tan maravilloso



Está claro que luego puedo quitar las barras con stripslashes, no obstante necesito guardar en la base de datos el texto tal y como está (con las comillas y sin la barra).

¿Cual es la forma "más" segura para no perder seguridad?


Título: Re: Problema cuando mysql_real_escape_string guarda las comillas
Publicado por: jdc en 26 Enero 2012, 03:02 am
Que tan necesario es guardarlas? Podrías reemplazarla por un hash y luego reestablecerlas del mismo modo a la inversa no?


Título: Re: Problema cuando mysql_real_escape_string guarda las comillas
Publicado por: dimitrix en 26 Enero 2012, 03:20 am
Que tan necesario es guardarlas? Podrías reemplazarla por un hash y luego reestablecerlas del mismo modo a la inversa no?

Sí, la razón es que habría que modificar muuucho código.


Una cosa que pensé fue esto:

Código
  1. function limpia($texto){
  2. $texto=mysql_real_escape_string($texto);
  3. $texto=stripslashes($texto);
  4. return $texto;
  5. };

Pero en parte es tontería limpiar la variable ¿No?

¿Alguna solución?


Título: Re: Problema cuando mysql_real_escape_string guarda las comillas
Publicado por: jdc en 26 Enero 2012, 07:48 am
Quizás sea una brutalidad pero para ahorrar tiempo podrías tratar de quitar los \ con javascript, se supone que es para maquillar nada más o no? Igual lo más óptimo es darse el trabajo y hacerlo bien poniendo y quitando


Título: Re: Problema cuando mysql_real_escape_string guarda las comillas
Publicado por: BlackZeroX en 26 Enero 2012, 08:24 am
http://dev.mysql.com/doc/refman/5.0/es/string-syntax.html

--->

Con mysql_real_escape_string(); puedes evitar SQL inyection...

Código
  1.  
  2. <?php
  3. // Connect
  4. $link = mysql_connect('mysql_host', 'mysql_user', 'mysql_password')
  5.    OR die(mysql_error());
  6.  
  7. // Query
  8. $query = sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
  9.            mysql_real_escape_string($user),
  10.            mysql_real_escape_string($password));
  11.  
  12. // Show Query
  13. echo $query;
  14.  
  15. ?>
  16.  
  17.  

En pocas palabras tu problema lo solucionas con sprintf();

Dulces Lunas!¡.


Título: Re: Problema cuando mysql_real_escape_string guarda las comillas
Publicado por: dimitrix en 26 Enero 2012, 12:55 pm
No entiendo muy bien para que usas el StrinfF.


Título: Re: Problema cuando mysql_real_escape_string guarda las comillas
Publicado por: [u]nsigned en 26 Enero 2012, 20:38 pm
No entiendo muy bien para que usas el StrinfF.

Seria lo mismo que hacer:

Código
  1. $query = "SELECT * FROM users WHERE user='" . mysql_real_escape_string($user) . "' AND password='" . mysql_real_escape_string($password) . "'";


Título: Re: Problema cuando mysql_real_escape_string guarda las comillas
Publicado por: WHK en 27 Enero 2012, 14:44 pm
Eso que dices que te sucede es imposible, lo mas seguro es que tengas activado las magic quotes, intenta guardar una variable y no _GET para que pruebes. Las slashses las agrega para evitar inyección pero el motor sql las elimina cuando las guarda.

Intenta:
Código
  1. <?php
  2. $texto='Que bonito es este "Mundo" tan maravilloso';
  3. echo 'Se insertar&aacute;: <strong>'.htmlspecialchars($texto, ENT_QUOTES).'</strong>';
  4. mysql_query('insert into `textos` (`value`) values ("'.mysql_real_escape_string($texto).'")');
  5.  

Ahora a texto ponle $_GET['texto'] y verifica si te sale diferente.

Puedes también agregarle esto a tus scripts:
Código
  1. <?php
  2. ini_set('magic_quotes_gpc',     false);
  3. ini_set('magic_quotes_runtime', false);
  4. ini_set('allow_url_fopen',      false);
  5. ini_set('allow_url_include',    false);
  6. ini_set('register_globals',     false);


Título: Re: Problema cuando mysql_real_escape_string guarda las comillas
Publicado por: dimitrix en 27 Enero 2012, 16:11 pm
Ahora me estoy cambiando a otro servidor, veré si en el nuevo me pasa y si me pasa ya veré lo que decis.

Gracias^^


Título: Re: Problema cuando mysql_real_escape_string guarda las comillas
Publicado por: peib0l en 27 Enero 2012, 19:05 pm
no puedes hacer una función en la base de datos?


Título: Re: Problema cuando mysql_real_escape_string guarda las comillas
Publicado por: dimitrix en 28 Enero 2012, 21:39 pm
Me sigue fallando y lo de @WHK no me funciona.

¿Existe alguna función PHP que sirva para limpiar el SQL?

¿Algo parecido a esto?
http://snipplr.com/view/376/