Problema cuando mysql_real_escape_string guarda las comillas

Iniciado por dimitrix, 26 Enero 2012, 02:48 AM

0 Miembros y 1 Visitante están viendo este tema.

dimitrix

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?




jdc

Que tan necesario es guardarlas? Podrías reemplazarla por un hash y luego reestablecerlas del mismo modo a la inversa no?

dimitrix

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?




jdc

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

BlackZeroX

#4
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!¡.
The Dark Shadow is my passion.

dimitrix





[u]nsigned

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) . "'";

No hay atajo ante la duda, el misterio se hace aquí...
Se hace carne en cada uno, el misterio es existir!

WHK

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);

dimitrix

Ahora me estoy cambiando a otro servidor, veré si en el nuevo me pasa y si me pasa ya veré lo que decis.

Gracias^^




peib0l