No se si viene a cuento, pero mirando este hilo he visto que las consultas sql las lanzais a pelo sin preformatear la consulta sql.
Una forma de enviar problemas con las consultas sql, es usar cadenas preformateadas para construir las consultas dinámicas.
Me explico: Cuando usamos una cadena preformateada tenemos que indicar el tipo de dato que se va a incluir en la cadena. Esto se hace con los formatos de tipo %s, %d, %f, etc... Esto quiere decir que si la cadena formateada espera un entero y recibe una cadena, este convertirá la cadena a un número entero (cero por defecto).
Ejemplo:
$sql = "SELECT * FROM {nodos} WHERE nid=%d";
$sql = sprintf($sql,'pepitoperez'); // la salida será "SELECT * FROM {nodos} WHERE nid=0";
mysql_query($sql);
De esta forma, preformateando las consultas e indicándoles los tipos de datos, podemos asegurarnos que la consulta sql va a usar los tipos de datos correctos y evitar en gran medida problemas de seguridad debidos a parámetros dinámicos que vienen por los métodos POST y GET que se usan para hacer consultas SQL.
Si encapsulamos la consulta en una función tipo:
function my_db_query() {
$args = func_get_args();
$values = array_slice($args,1);
$sql = mysql_real_escape_string(vprintf($args[0],$values));
return mysql_query($sql);
}
Podemos conseguir que todas las consultas sql que lancemos sobre nuestra base de datos sean mas seguras.
Añado más cosas que se me han ocurrido después de leer vuestros mensajes:
Existe un pecl que se llama bbcode (bulletin board code
http://es2.php.net/manual/es/book.bbcode.php) que permite hacer todo eso sin necesidad de mucho más. La instalación es bastante sencilla (pecl install <paquete>). En el caso que no se pueda instalar un pecl en el servidor existe la alternativa PEAR HTML_BBCodeParser.
La clave de estas piezas de código es que ya están probadas y nos evitan en gran medida tener demasiado código en nuestra aplicación ya que no tenemos que implementar la funcionalidad de parseo, ni el mapeo de tags para los bbcodes. Al tener menos código implementado por nosotros (la mayoría de las veces codificado con prisas y sin prestar atención al conjunto de la aplicación. Esto es una constante en las aplicaciones web que he visto y vivido durante algunos años) para tareas rutinarias mejoramos el mantenimiento de la aplicación y la seguridad.
Algún día dominaremos el mundo