2009-04-17 8 views
20

Usamos jsp, servlets, beans con base de datos mysql. No queremos restringir los caracteres ingresados ​​por los usuarios en los campos de formulario. Entonces, ¿cómo puedo desinfectar la entrada y cómo asegurarme de que la salida no se modifique para actividades maliciosas? ¿Hay alguna forma de enviar el resultado que podría verificar si se envió código adicional? Supongamos que hay un campo de entrada de búsqueda: el usuario da algo como <script>alert("I am here")</script>. ¿Existe alguna manera de que pueda saber que esta es una etiqueta html? Si el usuario agrega un parámetro adicional a un campo de enlace, ¿hay algo así como un control de antes y después que pueda hacer para que el documento se dé cuenta de que ha habido un campo de enlace adicional?La mejor manera de desinfectar la entrada en la aplicación web Java

+0

Por favor, considere cambiar el nombre de sus preguntas a algo así como "La mejor manera de desinfectar la información en Java": el título de su pregunta no ayudará a quienes buscan respuestas similares en el futuro ... – razlebe

+10

Whoa, cuando vaya a volver a la pregunta, ejecuta el javascript en la pregunta! Mala stackoverflow, ¡malo! –

+0

@robhruska: ¡Buen descubrimiento! – Adnan

Respuesta

5

Siempre debe hacer un escaneo básico de HTML de los datos tomados de fuentes como la entrada del usuario o la base de datos que pueden contener caracteres no válidos. La etiqueta JSP <c:out> hace esto, por ejemplo. De esta forma, si el usuario ingresa "<script> ..." en un campo y lo está imprimiendo de nuevo, se imprimirá en HTML como "&lt;script&gt; ...".

10

Realmente debería permitir a los usuarios ingresar la menor cantidad de HTML y/o javascript posible. Una buena solución para validar y desinfectar esto es usar una biblioteca preparada como OWASP AntiSamy.

También, consulte OWASP Enterprise Security API para obtener una colección de métodos de seguridad que un desarrollador necesita para crear una aplicación web segura.

5

jsoup para ayudarlo con esto. Hagas lo que hagas, no trates de hackear esto usando expresiones regulares o algo así, porque entonces tendrás 2 problemas. :-)

Con jsoup, todo lo que necesita es un breve fragmento de código:

String safe = Jsoup.clean(unsafe, Whitelist.basic()); 

Puede añadir etiquetas y atributos a Whitelist con bastante facilidad, aunque me pareció que no soporta etiquetas de espacio de nombres.

Cuestiones relacionadas