2011-06-08 19 views
15

He leído tantos artículos que describen métodos para evitar ataques XSS en contenido HTML enviado por el usuario utilizando funciones como htmlspecialchars y regexs, whitelisting/blacklisting y usando html filtering guiones como purificador HTML, etc, etc HTMLawedPrevención de ataques XSS en el contenido HTML enviado por el usuario en PHP, el modo eBay

Por desgracia, ninguno de ellos explicar cómo un sitio como eBay es capaz de permitir una amplia gama de etiquetas HTML potencialmente maliciosos tales como <link>, <script>, <object> y CSS y estilos Atributos HTML como background: url() etc. Parece como si permitieran a los usuarios enviar casi cualquier cosa en sus descripciones de elementos. He visto algunas de las plantillas más elaboradas de HTML, Javascript y Flash en las descripciones de los artículos.

¿Qué está haciendo eBay de manera diferente? ¿Existe otra técnica o capa que me falta, que les permite bloquear ataques XSS y al mismo tiempo permitir que prácticamente todo se incluya en la descripción del elemento del usuario?

¡Cualquier idea o visión de esto sería muy apreciada!

+1

Si utiliza el enfoque de listas blancas htmlpurifier buena conocida marcado, y construir una lista blanca muy robusta, puede hacerlo de forma segura. –

+1

heh. Pude crear una lista que contenía una alerta, pero cuando probé 'alert (document.cookie)', recibí el siguiente error: "Proporcione la información correcta en los campos resaltados. Descripción: su ficha no puede contener javascript (".cookie", "cookie (", "replace (", IFRAME, META, o includes), cookies o href base. " –

+0

Me pregunto qué ingeniosos son sus filtros. Es decir, escribir javascript para generar" alert (document.cookie) " –

Respuesta

11

Es fácil cuando tienes un ejército de programadores y un cofre de guerra lleno de dinero.

Esto no es ciencia de cohetes. Identifican un caso de vulnerabilidad y están codificando a su alrededor, probablemente a través de Regex y Javascript en el front-end, así como una validación profunda de back-end para garantizar que los datos no se vean comprometidos antes de la inserción. Es lo mismo que todos deberíamos hacer, excepto que para Ebay es mucho más maduro que lo que la mayoría de nosotros trabajamos, y MUCHO más grande.

Si se parece al banco en el que solía trabajar, tienen un equipo de PAS dedicado a detectar errores diminutos en prod, abrir tickets con ingenieros y seguir el proceso con prioridad. Entre desarrolladores, probadores, gestión de calidad y PAS, no hay ninguna razón para que una vulnerabilidad se elimine, pero si se produce un error, debe reaccionar rápidamente.

Considere tomar un enfoque de "mejora progresiva" para este desafío si planea seguir esta ruta. Comience por bloquear javascript completamente al principio. Luego, mejore para permitir --alguno-- a través de un método que considere seguro - y solo permita lo seguro mientras continúa. Continúe este proceso permitiendo cada vez más mientras atrapa las cajas de borde a medida que surgen en pruebas o producción. Gradualmente, migrará de permitir lo que está permitido para bloquear lo que NO ES. Si bien esto no debería ser un pan comido, incluso las empresas de vanguardia pierden el conocimiento del concepto básico de gestión y mejora del ciclo de vida.

Dicho esto, cuando se trata de desinfectar las entradas, es mejor combinar los métodos de validación frontales y de fondo. Front-end proporciona una retroalimentación más intuitiva y rápida a los clientes, pero al igual que con cualquier lenguaje del lado del cliente puede ser superado por los usuarios expertos. La validación de back-end es su cortafuegos, lo que garantiza que todo lo que se desliza más allá de la interfaz se trate de forma adecuada. Su base de datos es su línea de vida, ¡así que protéjala a toda costa!

A menos que tenga un ejército y un gran presupuesto, tratando de codificar para todos los casos de borde en algo tan amplio como un CMS que permite cerca de la entrada carta blanca casi siempre termina por una empresa financiera perder.

+1

Awesome comment. ¡Gracias por el consejo! – Mike

2

pasé algún tiempo con él, y yo era capaz de alert(document.cookie) - algo que sus listas negras tratan con claridad para evitar que - basándose en un año de edad, hazaña que aparece aquí:

http://menno.b10m.net/blog/blosxom.cgi/web/ebay-xss.html

I en realidad no he publicado la lista, por lo que solo puedo decir con certeza que esto funciona en el modo de vista previa de la lista.

Si esto es una indicación, entonces la respuesta a su pregunta es la siguiente: eBay en realidad no prevenir los ataques XSS. Tienen algunas listas negras en su lugar, pero parecen ser bastante triviales para evadir.

Edit: parecen tener este trabajo en mi eBay "acerca de mí" página ahora , una página real en vivo. Para resumir, los intentos de eBay de filtrar XSS parecen ser bastante patéticos.

+0

Sus informes son geniales, así que gracias por eso. Tenga cuidado de no prohibir su cuenta de eBay: P – Mike

1

Aunque no puedo decir con seguridad, hay muchas técnicas por ahí para ayudar. El principal componente para que esto funcione es contar con un departamento de desarrollo y seguridad activo y disponible.

A pesar de que sin duda tienen un mecanismo de filtro, el código es probablemente evaluaron en simuladores y clasificado de acuerdo a ciertos criterios (tales como contenido sospechoso, la ofuscación, etc).

Luego, está también el aspecto Mechanical Turk, que Amazon está empleando salvajemente (básicamente, emplean humanos de "mano de obra barata" para juzgar algo inteligentemente).

+0

Hmmmmm..interesting. Gracias. – Mike

Cuestiones relacionadas