Tengo una idea de cómo derrotar a XSS tan simple que puede funcionar y me preguntaba si alguien ya había hecho algo similar.
El objetivo aquí no es la eficiencia sino la seguridad. En otras palabras, no me importa intercambiar ancho de banda por seguridad. Mi idea sería servir a todos los caracteres dentro de etiquetas HTML simples.
Básicamente, si lo siguiente, por el motivo que fuera, sería un exploit XSS funcional: 0WNED!byXSS
(que por cualquier motivo nadie lo hubiera detectado), se serviría como:
<i>0</i><i>W</i><i>N</i>E<i>D</i>!<i>by</i>X<i>S</i>S<i>
Básicamente, un bucle se aseguraría de hacer solo:
- escribe
<i>
- escribe un solo carácter
- escribe
</i>
¿Podría funcionar algo así técnicamente (aparte de las interpretaciones y los problemas de ancho de banda) y se ha hecho algo así?
EDIT
Aquí hay un ejemplo (simplificado) de lo que estoy pensando.
En lugar de servir esto:
<html>
<head>
<title>Sample</title>
</head>
<body>
<table>
<tr>
<td>Here goes user input</td>
<td>potentially containing an XSS exploit</td>
</tr>
</table>
</table>
</body>
</html>
Yo serviría esto:
<html>
<head>
<title>Sample</title>
</head>
<body>
<table>
<tr>
<td><i>H</i><i>e</i><i>r</i><i>e</i><i> </i><i>g</i><i>o</i><i>e</i><i>s</i><i> </i><i>u</i><i>s</i><i>e</i><i>r</i><i> </i><i>i</i><i>n</i><i>p</i><i>u</i><i>t</i></td>
<td><i>p</i><i>o</i><i>t</i><i>e</i><i>n</i><i>t</i><i>i</i><i>a</i><i>l</i><i>l</i><i>y</i><i> </i><i>c</i><i>o</i><i>n</i><i>t</i><i>a</i><i>i</i><i>n</i><i>i</i><i>n</i><i>g</i><i> </i><i>a</i><i>n</i><i> </i><i>X</i><i>S</i><i>S</i><i> </i><i>e</i><i>x</i><i>p</i><i>l</i><i>o</i>it</td>
</tr>
</table>
</table>
</body>
</html>
La etiqueta <i>
se eligió de manera arbitraria, cualquier etiqueta (preferiblemente de una letra) sería suficiente.
Varias funcionalidades del sistema operativo / navegador parecen seguir funcionando correctamente:
- Puedo cortar y pegar correctamente en el portapapeles
- Todavía puedo buscar texto ( por ejemplo puedo buscar "va" y, a pesar del hecho de que cada letra de "va" está envuelto por etiquetas que el navegador aún encuentra bien)
Supongo que el motor de búsqueda todavía analizaría / indexaría correctamente el contenido (no estoy muy seguro de lo que dice).
A mi parecer, es una forma bastante simple y efectiva de prevenir muchos ataques basados en las entradas maliciosas de los usuarios.