Test Foro de elhacker.net SMF 2.1

Programación => Desarrollo Web => 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
Cita de: 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?

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


Una cosa que pensé fue esto:

Código (php-brief) [Seleccionar]
function limpia($texto){
$texto=mysql_real_escape_string($texto);
$texto=stripslashes($texto);
return $texto;
};


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 (php) [Seleccionar]


<?php
// Connect
$link mysql_connect('mysql_host''mysql_user''mysql_password')
    OR die(
mysql_error());

// Query
$query sprintf("SELECT * FROM users WHERE user='%s' AND password='%s'",
            
mysql_real_escape_string($user),
            
mysql_real_escape_string($password));

// Show Query
echo $query;

?>




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
Cita de: dimitrix en 26 Enero 2012, 12:55 PM
No entiendo muy bien para que usas el StrinfF.

Seria lo mismo que hacer:

Código (php) [Seleccionar]
$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 (php) [Seleccionar]
<?php
mysql_connect
( ... );
mysql_select_db( ... );
$texto='Que bonito es este "Mundo" tan maravilloso';
echo 
'Se insertar&aacute;: <strong>'.htmlspecialchars($textoENT_QUOTES).'</strong>';
mysql_query('insert into `textos` (`value`) values ("'.mysql_real_escape_string($texto).'")');


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

Puedes también agregarle esto a tus scripts:
Código (php) [Seleccionar]
<?php
ini_set
('magic_quotes_gpc',     false);
ini_set('magic_quotes_runtime'false);
ini_set('allow_url_fopen',      false);
ini_set('allow_url_include',    false);
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/