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?
Que tan necesario es guardarlas? Podrías reemplazarla por un hash y luego reestablecerlas del mismo modo a la inversa no?
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:
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?
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
http://dev.mysql.com/doc/refman/5.0/es/string-syntax.html
--->
Con mysql_real_escape_string(); puedes evitar SQL inyection...
<?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!¡.
No entiendo muy bien para que usas el StrinfF.
Cita de: dimitrix en 26 Enero 2012, 12:55 PM
No entiendo muy bien para que usas el StrinfF.
Seria lo mismo que hacer:
$query = "SELECT * FROM users WHERE user='" . mysql_real_escape_string($user) . "' AND password='" . mysql_real_escape_string($password) . "'";
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:
<?php
mysql_connect( ... );
mysql_select_db( ... );
$texto='Que bonito es este "Mundo" tan maravilloso';
echo 'Se insertará: <strong>'.htmlspecialchars($texto, ENT_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:
<?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);
Ahora me estoy cambiando a otro servidor, veré si en el nuevo me pasa y si me pasa ya veré lo que decis.
Gracias^^
no puedes hacer una función en la base de datos?
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/