XSS con entrada en el atributo onclick

1

Si tengo ...

<table onclick="texttexttexttextUSERINPUTHERE"></table> ¿Sería posible XSS? Me refiero con > y "filtrado. Sé que si no había texto detrás de la entrada del usuario, podría poner alerta (0), y eso se activaría al hacer clic, pero no sé si es posible con este caso.

    
pregunta Michael Blake 07.07.2014 - 09:00
fuente

2 respuestas

5

Es muy posible:

texttexttext=function(){};alert(document.cookie); 

Le daría la ejecución de su código, independientemente de cuál sea la cadena literal. Simplemente lo conviertes en una función no utilizada, y ejecutas todo después de eso.

Editar: más: a menudo puedes usar comillas simples como sustituto de comillas dobles.

    
respondido por el ndrix 07.07.2014 - 10:33
fuente
1

Probablemente desee utilizar un campo de formulario de entrada oculto para almacenar las opiniones del usuario en lugar de ponerlo en línea. Puede desinfectarlo antes de almacenarlo, pero en este ejemplo se desinfecta a pedido.

El saneamiento real de la entrada del usuario se puede realizar en diferentes momentos en diferentes idiomas, por lo que solo se abstrae con jazzhands .

<script>
    var myNamespace = {};
    myNamespace.sanitize = function (ickyUserInput) {
        var sanitizedUserInput = "*jazzhands*";
        //do real work here
        return sanitizedUserInput;
    }
    myNamespace.tableClick = function (tableClickParameter) {
        var userInput = myNamespace.sanitize($('#userInput1').val());
        //do work without fear of bad users
    };
</script>

<table onclick="myNamespace.tableClick('texttexttexttext')">
    <tr><td>Hi mom!</td></tr>
</table>

<input id="userInput1" type="hidden" value="=function(){};alert(document.cookie);" />
    
respondido por el Andrew Hoffman 07.07.2014 - 21:49
fuente

Lea otras preguntas en las etiquetas