2010-12-03 11 views

Respuesta

4

Desafortunadamente no, hay una variedad de ataques disponibles, por ejemplo, la ejecución de JavaScript a través del elemento <img> también. Recomiendo usar una biblioteca XSS para cualquier plataforma que esté en el servidor.

He aquí un ejemplo de lo que quiero decir:

<img src="javascript:alert('hi');"> 
<input type="image" src="javascript:alert('hi');"> 

... no esos ejemplos en sí son inofensivos, pero ver cómo hay otras maneras de ejecutar JavaScript. Qué exploits funcionan depende del navegador, pero ten en cuenta que existen otros métodos.

+0

¿Qué bibliotecas recomendarías? – samy

+0

@Nick, ¿qué capacidad tienen esas bibliotecas XSS? – Starx

+0

@samy - depende de la plataforma, no estoy seguro de qué tiene el OP en el lado del servidor - PHP, ASP.Net, Ruby? @Starx: estas bibliotecas se especializan en eliminar todos (o * con suerte * todos) los diversos métodos de ataque XSS desinfectando adecuadamente el HTML entrante. –

1

Además de los mencionados por Nick, también debe estar en el puesto de observación para los eventos de JavaScript, tales como: "onload", "onclick", ...

2

myspace fue cortado debido a las expresiones CSS . La lista negra no funciona, la lista blanca es la única ruta.

18

No, el bloqueo de casos específicos no es suficiente - tarde o temprano, alguien presentará un caso artificial en el que no haya pensado.

Consulte este list of XSS attacks para conocer los más comunes (otros, aún más exóticos, pueden existir). Necesita incluir en la lista blanca la sintaxis permitida en lugar de suponer que todo lo que esté al lado de los vectores conocidos debería estar bien.

+0

+1 ese enlace es excelente, sabía que la inclusión de listas negras era una tarea imposible, pero no me di cuenta de lo imposible. Escribí un código de lista negra muy ingenuo hace unos años, habría capturado muy pocos de esos ataques – andynormancx

+0

@andynormancx: yup, la Ley de Postel contraataca: una gran parte de los ejemplos son marcas no válidas, que el navegador convierte en algo válido pero desagradable. – Piskvor

+2

Me gustó especialmente el ejemplo de žscriptualert (EXSSE) ž/scriptu, cuando se lo inyecta en un sitio que emite ASCII que se convierte en código ejecutable, impresionante. – andynormancx

9

Depende también de lo que esté haciendo con la entrada. Aquí está un ejemplo simplificado que encontré en un sitio web real de algún servicio de tarjeta de felicitación:

Contenía un campo de selección con el que se haya podido seleccionar el color del texto:

<select name="color"> 
    <option value="red">Red</option> 
    <option value="green">Green</option> 
    <option value="blue">Blue</option> 
</select> 

se utilizó el valor sin filtro en la página de la tarjeta de felicitación. Por lo que es fácil de manipular los datos POST enviados, y cambiar

color=red 

a algo así como

color=red%22+onload%3D%22alert(%27foo%27) 

lo que resultaría en

<font color="red" onload="alert('foo')"> 

en lugar de <font color="red">.


Así que el punto no es la confianza ninguna intervención del usuario, ni siquiera los valores predefinidos que defina.

1

<s<scriptcript después de una eliminación se convierte en <script.

Si bloquea eso, hay muchos otros. Es mucho más simple y más correcto para escapar (no eliminar) todas las ocurrencias <, " y &.

+0

mientras que el índice de " Dropout

+0

Debe suponer que hay un número infinito de cosas que inician scripts, p. ' Kornel

Cuestiones relacionadas