2011-05-07 15 views
6

Mi javascript lee datos de una cadena de consulta y los coloca en un cuadro de texto usando jQuery.val().Javascript/jQuery XSS lectura potencial de cadenas de consulta

Esto funciona bien, pero me pregunto si esto es seguro contra los ataques XSS.

Diga la cadena de consulta parecía ...

site.com?q="javascript:alert(document.cookie)

cual sería efectivamente hacer:

jQuery.val('"javascript:alert(document.cookie)')

Por lo que he probado en IE8/firefox Esto establece el valor de entrada como se ve y no hace la inyección real.

Si me quedo esta función durante la primera cadena:

function htmlEncode(str) { 
    return str.replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/'/g, '&#039;').replace(/"/g, '&quot;'); 
} 

A continuación, literalmente, ver &quot;javascript:alert(document.cookie) en el valor de entrada que no es lo que quiero.

Uso de jQuery 1.5.2 Supongo que mi pregunta es si jQuery.val() maneja las entidades HTML por usted y, por lo tanto, se considera seguro?

Respuesta

8

Dada la siguiente:

jQuery("#SomeTextbox").val("new value for SomeTextbox") 

el código jQuery para la función val simplemente hace esto:

this.value = "new value for SomeTextbox"; 

donde this es una referencia al objeto Text en el DOM que representa el cuadro de texto con id "SomeTextbox". La cadena "new value for SomeTextbox" se almacena como la propiedad value de ese objeto DOM. No se transforma ni desinfecta de ninguna manera. Pero el motor de JavaScript tampoco lo analiza/interpreta (por ejemplo, como lo haría con InnerHTML). Entonces, independientemente de cuál sea su argumento al val, no va a "hacer" nada. Simplemente cambia el valor de una propiedad de cadena de un objeto en el DOM. Entonces, sí, sería seguro.

EDIT:

Aquí hay alguna información adicional que le puede ser útil.

En general, poner algo en un cuadro de texto, no importa qué tan dañino que pueda parecer, y con independencia de cómo se llega allí es "seguro" con tal de que se mantiene en el cuadro de texto. Pero importa mucho a dónde va desde allí.

Si el contenido del cuadro de texto se representa posteriormente en una secuencia de HTML analizado, ya no es seguro. Un escenario común es almacenar el contenido de un cuadro de texto en una base de datos, luego recuperarlo más tarde y presentarlo en un contexto donde el navegador analiza como HTML. Si la reexpresión ocurre en el contexto de un usuario diferente, crea una oportunidad para que un usuario malintencionado ingrese datos en el cuadro de texto para obtener acceso a la información privada de otros usuarios en el futuro.

+0

@fire - Después de publicar la respuesta anterior, pensé en algo más que podría ser útil.Aunque ya ha aceptado mi respuesta original, decidí publicar el material adicional de todos modos, porque creo que puede responder a una pregunta más profunda que subyace a la que usted solicitó. ¡¡Buena suerte manteniendo a raya a los piratas informáticos !! –

Cuestiones relacionadas