2012-07-02 246 views
5

Actualmente estoy usando este método con la solución jQuery, para limpiar cadenas de posibles ataques XSS.Sanitización de Javascript: la forma más segura de insertar una posible cadena XSS html

sanitize:function(str) { 
    // return htmlentities(str,'ENT_QUOTES'); 
    return $('<div></div>').text(str).html().replace(/"/gi,'&quot;').replace(/'/gi,'&apos;'); 
} 

Pero tengo la sensación de que no es lo suficientemente seguro. ¿Extraño algo?

He tratado de htmlentities phpjs proyectan aquí: http://phpjs.org/functions/htmlentities:425/

pero es un poco micrófonos ocultos y devuelve algunos símbolos especiales adicionales. Tal vez es una versión antigua?

Por ejemplo:

htmlentities('test"','ENT_QUOTES'); 

Produce:

test&amp;quot; 

pero debe ser:

test&quot; 

¿Cómo estás manejando esto a través de javascript?

+0

¿Cómo pretende utilizar la cadena "desinfectado"? – penartur

+0

Insertar en html document ofc como texto. Como href = "sanitized" o src = "sanitized", o

sanitized
Somebody

+0

¿Desde dónde se desencadena el inserto? ¿Desea insertar la cadena en una página ya abierta dinámicamente utilizando Javascript, o en el documento HTML generado por el servidor utilizando PHP? – penartur

Respuesta

3

Si su cadena se supone que es texto plano sin formato HTML, simplemente use .createTextNode(text)/asignando a .data propiedad del nodo de texto existente. Lo que sea que coloques allí siempre será interpretado como texto y no necesita más escapes.

+0

¿Qué pasa con "o" y otros símbolos de los cuales tal vez no sé? – Somebody

+0

Escribí "lo que sea" y es "lo que sea" de hecho, estarías manipulando un campo en la estructura DOM que solo puede contener texto. Esas operaciones nunca causarán invocaciones automáticas de analizador de HTML, como harían los famosos 'innerHTML' (esto, por cierto, todavía se considera una de los peores defectos de diseño de esa característica). –

1

Usted debe citar a otros personajes también:. ' " < > ( ) ; Todos ellos se pueden utilizar para XSS attacsk

3

Sí dinámicamente usando JavaScript cadena proviene de que no se confía. fuente

Entonces no es necesario desinfectarlo manualmente. Con jQuery, puede escribir

​var str = '<div>abc"def"ghi</div>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​'; 

​$​('test').text(str); 
$('test').attr('alt', str); 

El navegador separará los datos del código por usted.

Ejemplo: http://jsfiddle.net/HNQvd/

+0

Si bien 'alt' es seguro, aún tendrá problemas con los atributos que pueden interpretarse como texto sin texto en la línea. Obviamente, 'onclick' y otros manejadores, pero también' src'. –

+0

Todo podría considerarse dañino. Si el OP va a cambiar los atributos arbitrarios (con nombres proporcionados por el usuario), entonces tienen un problema mucho más grande que simplemente desinfectar los valores. – penartur

+0

personas. Tengo una solución de trabajo en mi publicación. Solo quiero que la gente lo actualice si tiene algunas vulnerabilidades si se usa dentro de

HERE
o , o . Eso es todo. :) – Somebody

Cuestiones relacionadas