¿Va a prevenir los ataques XSS?
Si esta escapando en el momento adecuado (*) entonces sí, usted evitará que HTML-inyección. Esta es la forma más común de ataque XSS. No se trata solo de una cuestión de seguridad, debe hacer los escapes de todos modos para que las cadenas con esos caracteres se muestren correctamente de todos modos. El tema de la seguridad es un subconjunto del problema de la corrección.
Creo que se necesita a la lista blanca a un nivel de personaje también, para evitar ciertos ataques
Nº HTML-escape hará que cada uno de esos ataques como texto plano inactivo en la página, la cual es lo que quieres El rango de ataques en esa página está demostrando diferentes formas de hacer inyección de HTML, que puede evitar los "filtros XSS" más estúpidos que algunos servidores implementan para tratar de evitar los ataques comunes de inyección de HTML. Esto demuestra que los "filtros XSS" son inherentemente agujereados e ineficaces.
Existen otras formas de ataque XSS que podrían afectarlo o no, por ejemplo, esquemas incorrectos en URIs enviados por el usuario (javascript:
y otros), inyección de código en datos repetidos en un bloque JavaScript (donde necesita JSON- estilo de escape) o en hojas de estilo o encabezados de respuesta HTTP (una vez más, siempre necesita la forma apropiada de codificación al colocar texto en otro contexto, siempre debe sospechar si ve algo con interpolación sin escapular como PHP "string $var string"
).
Luego está el manejo de carga de archivos, la política de origen de Flash, las secuencias UTF-8 demasiado largas en navegadores heredados y los problemas de generación de contenido a nivel de aplicación; todos estos pueden conducir potencialmente a scripts entre sitios. Pero la inyección de HTML es la principal que enfrentará cada aplicación web, y la mayoría de las aplicaciones PHP se equivocan hoy.
(*: que es cuando se inserta contenido de texto en HTML, y en ningún otro momento. No escanee HTML los datos de envío de formularios en $_POST
/$_GET
al inicio de la secuencia de comandos; este es un error común equivocado.)
... Wikipedia dice "Vale la pena señalar que si bien es ampliamente recomendado, simplemente realizando entidad HTML codificación de los cinco caracteres XML significativos no siempre son suficientes para evitar muchas formas de XSS. La codificación puede ser complicada y se recomienda encarecidamente el uso de una biblioteca de codificación de seguridad ". y cita este artículo, aunque no puedo encontrar lo que en ese artículo justifica la afirmación: http://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet –
Es solo difícil si no sabes qué lo estás haciendo o lo estás haciendo en diferentes lugares (incorrectos). Solo sé consistente con eso. Codifique/escape TODA la entrada controlada por el usuario (URL de solicitud, parámetros de solicitud, cuerpo de solicitud, etc..etc ... todo lo que se originó del usuario) solo una vez durante (re) mostrarlos en la capa de vista. Eso es todo. – BalusC
Hey Pool - ¿Estás dispuesto a cambiar la respuesta preferida? La respuesta de @bobince es mejor y tiene más votos ascendentes. – nslntmnx