recepcion de formularios. buenas practicas

sandri
18 de Mayo del 2004
buenas,

como haceis cuando en un formulario se introducen caracteres como \' o ' o \.... para introducirlo en una base de datos? Es decir, caracteres que puedan cortar la sentencia SQL.

Si no hago ningun tratamiento la sentencia SQL no es buena, lo que me parece lógico.
Por eso, para cada caso tengo un pequeño modulo que analiza campo por campo si aparecen caracteres de ese tipo (con la classe StringTokenizer). Pero me parece complicadisimo,y seguro que alguna opcion siniestra se me escapa.

Por eso me gustaria saber como se hace (de ahi el título del mensaje -> buenas practicas) para recoger e introducir en la base de datos lo que el cliente introduce en el formulario. Algo asi como CDATA de XML.

Gracias y un saludo

menchok
18 de Mayo del 2004
Tomcat tiene un ejemplo para comprobar el codigo que es similar al HTML. Te lo pego para si te sirve (yo lo uso siempre que cojo parametros de formulario):


/*
/**
* HTML filter utility.
*
* @author Craig R. McClanahan
* @author Tim Tye
* @version $Revision: 1.1 $ $Date: 2002/04/23 15:17:25 $
*/

package util;


public final class HTMLFilter {


/**
* Filter the specified message string for characters that are sensitive
* in HTML. This avoids potential attacks caused by including JavaScript
* codes in the request URL that is often reported in error messages.
*
* @param message The message string to be filtered
*/
public static String filter(String message) {

if (message == null)
return (null);

char content[] = new char[message.length()];
message.getChars(0, message.length(), content, 0);
StringBuffer result = new StringBuffer(content.length + 50);
for (int i = 0; i < content.length; i++) {
switch (content[i]) {
case '<':
result.append("&lt;");
break;
case '>':
result.append("&gt;");
break;
case '&':
result.append("&amp;");
break;
case '"':
result.append("&quot;");
break;
case ' ':
result.append("&nbsp;");
break;
case 'n':
result.append("<br>");
break;

default:
result.append(content[i]);
}
}
return (result.toString());

}


}