2012-05-15 12 views

Respuesta

19

No realmente. .val() se usa para establecer el atributo value de un campo de formulario, por lo que escaparse no es realmente necesario. Vas a establecer el valor a través del DOM, por lo que no es como si estuvieras construyendo HTML a través de la concatenación de cadenas. .prop(), por otro lado, ni siquiera interactúa con los atributos en absoluto, solo con las propiedades DOM, por lo que no es necesario que trabaje sobre HTML escapándolos tampoco.


Editar: en aras de la claridad, estoy asumiendo que usted está pidiendo esto porque le preocupa .prop() o .val() como un vector de ataque XSS (o simplemente una oportunidad para disparar en el pie)? Si ese es el caso, debe recordar que al establecer atributos y propiedades a través del DOM, los valores que establece son esencialmente de espacio aislado para el atributo o valor con el que estaba interactuando. Por ejemplo, dada la siguiente:

<div id="foo"></div> 

Y ha intentado abusar de un valor de atributo, como por ejemplo:

$('#foo').attr('rel', '"></div><script>alert("bang");</script><div rel="'); 

Usted puede estar preocupado de que esto daría lugar a algo como lo siguiente:

<div id="foo" rel=""></div><script>alert("bang");</script><div rel=""></div> 

Esto nunca sucederá, sin embargo. De hecho, tendrá un atributo rel con la cadena de aspecto maligno como su valor, pero no se creará ningún nuevo marcado o nodos DOM. La cadena en sí no se escapó, simplemente no se interpreta como marcado. Es solo una cadena y eso es todo.

+1

Por lo tanto, establecer el 'valor' de un elemento en una cadena' malvada' podría * nunca * causar ningún problema? –

+1

Correcto: cualquier peligro se produciría después de eso, con respecto a lo que haces con el valor una vez que lo hayas recuperado del elemento. Esto también está asumiendo que lo está configurando a través de '.val()' u otro método respaldado por la API DOM. Acabo de expandir mi respuesta con alguna aclaración. – jmar777

+0

@ jmar777 ¿Es lo mismo para el método jquery .attr() para configurar el src de una imagen? es decir $ ("# profile_pic"). attr ('src', profile_image); ¿Debo preocuparme por la codificación de la variable profile_image aquí? cuando trato de codificarlo usando ESAPI encodeForHTMLAttribute() no funciona de todos modos así que supongo que no es necesario? gracias – Sarah

6

Esperan cadenas, no HTML. No necesitas escapar de nada.

Los métodos en sí no escapan tampoco, las API de DOM subyacentes que utilizan también tratan en cadenas, no en HTML.

Una vez que empiece a utilizar JavaScript, casi nunca tendrá que preocuparse por la sintaxis HTML, la única excepción que se me ocurre es la innerHTML que trata explícitamente con (de) serializar el DOM hacia y desde HTML.

+0

Probablemente valga la pena aclarar que las API DOM subyacentes tampoco escapan en realidad a nada. Cuando estableces valores de propiedades y atributos, no estás creando un nuevo marcado o nodos DOM ni nada por el estilo, por lo que escapar es una especie de problema. – jmar777

+0

@Quentin. ¿Es lo mismo para el método jquery .attr() para configurar el src de una imagen? es decir $ ("# profile_pic"). attr ('src', profile_image); ¿Debo preocuparme por la codificación de la variable profile_image aquí? cuando trato de codificarlo usando ESAPI encodeForHTMLAttribute() no funciona de todos modos así que supongo que no es necesario? gracias – Sarah

0

Solo quiero agregar que TIENE que preocuparse al insertar valores dentro de los atributos con efectos secundarios que pueden causar la ejecución del código. Estos incluyen el atributo src de la imagen que se puede usar para xss. Ver: https://www.owasp.org/index.php/Script_in_IMG_tags

Cuestiones relacionadas