Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Prevencion Secuencia Comandos PDF
Prevencion Secuencia Comandos PDF
Este artículo proporciona un modelo positivo simple para evitar que XSS utilice
la salida de escape / codificación correctamente. Si bien hay una gran cantidad
de vectores de ataque XSS, seguir algunas reglas simples puede defenderse
completamente de este ataque grave.
Dada la forma en que los navegadores analizan HTML, cada uno de los
diferentes tipos de ranuras tiene reglas de seguridad ligeramente
diferentes. Cuando coloca datos no confiables en estas ranuras, debe seguir
ciertos pasos para asegurarse de que los datos no se rompan de esa ranura
en un contexto que permita la ejecución del código. En cierto modo, este
enfoque trata un documento HTML como una consulta de base de datos
parametrizada: los datos se mantienen en lugares específicos y se aíslan de
los contextos de código con escape.
Este documento establece los tipos más comunes de ranuras y las reglas para
colocar datos no confiables en ellas de forma segura. Según las diversas
especificaciones, los vectores XSS conocidos y una gran cantidad de pruebas
manuales con todos los navegadores populares, hemos determinado que las
reglas propuestas aquí son seguras.
Directamente en un script:
<script>...NEVER PUT UNTRUSTED DATA HERE...</script>
Dentro de un comentario HTML:
<!--...NEVER PUT UNTRUSTED DATA HERE...-->
En un nombre de atributo:
<div ...NEVER PUT UNTRUSTED DATA HERE...=test />
En un nombre de etiqueta:
<NEVER PUT UNTRUSTED DATA HERE... href="/test" />
Directamente en CSS:
<style>
...NEVER PUT UNTRUSTED DATA HERE...
</style>
Lo más importante, nunca acepte código JavaScript real de una fuente no
confiable y luego ejecútelo. Por ejemplo, un parámetro llamado "devolución de
llamada" que contiene un fragmento de código JavaScript. Ninguna cantidad
de escape puede arreglar eso.
' not recommended because its not in the HTML spec (See: section 24.4.1)
' is in the XML and XHTML specs.
Por ejemplo:
<script>
window.setInterval('...EVEN IF YOU ESCAPE UNTRUSTED DATA YOU ARE XSSED
HERE...');
</script>
A excepción de los caracteres alfanuméricos, escape todos los caracteres
menores de 256 con el \xHHformato para evitar cambiar el valor de los datos al
contexto del script o a otro atributo. NO use atajos de escape como \"porque
el carácter de comillas puede coincidir con el analizador de atributos HTML
que se ejecuta primero. Estos atajos de escape también son susceptibles a los
ataques de escape donde el atacante envía \"y el código vulnerable convierte
aquello \\"que permite la cotización.
Si un controlador de eventos se cotiza correctamente, el desglose requiere la
cotización correspondiente. Sin embargo, hemos hecho esta regla
intencionalmente bastante amplia porque los atributos del controlador de
eventos a menudo se dejan sin comillas. Los atributos sin comillas se pueden
dividir con muchos caracteres, incluidos [space] % * + , - / ; < = > ^y |.
Además, una </script>etiqueta de cierre cerrará un bloque de secuencia de
comandos aunque esté dentro de una cadena entre comillas porque el
analizador HTML se ejecuta antes que el analizador JavaScript. Tenga en
cuenta que esta es una política de escape agresiva que codifica en exceso. Si
hay una garantía de que se logra una cita adecuada, se necesita un conjunto
de caracteres mucho más pequeño. Consulte los ejemplos de escape de
JavaScript del codificador Java OWASP para ver ejemplos de uso adecuado
de JavaScript que requieren un escape mínimo.
El valor de la propiedad:
<style>
selector { property : ...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE...; }
</style>
<style>
selector { property : "...ESCAPE UNTRUSTED DATA BEFORE PUTTING HERE..."; }
</style>
<span style="property : ...ESCAPE UNTRUSTED DATA BEFORE PUTTING
HERE...">text</span>
Tenga en cuenta que hay algunos contextos CSS que nunca pueden usar de
forma segura datos no confiables como entrada, ¡ INCLUSO SI ES
CORRECTAMENTE CSS ESCAPADO! Deberá asegurarse de que las URL
solo comiencen con httpnot javascripty que las propiedades nunca
comiencen con "expresión".
Por ejemplo:
{ background-url : "javascript:alert(1)"; } // and all other URLs
{ text-size: "expression(alert('XSS'))"; } // only in IE
Excepto los caracteres alfanuméricos, escape todos los caracteres con valores
ASCII inferiores a 256 con el formato de escape \ HH. NO use atajos de escape
como \"porque el carácter de comillas puede coincidir con el analizador de
atributos HTML que se ejecuta primero. Estos atajos de escape también son
susceptibles a los ataques de escape donde el atacante envía \"y el código
vulnerable convierte aquello \\"que permite la cotización.
Si se cita el atributo, la ruptura requiere la cotización correspondiente. Todos
los atributos deben estar entre comillas, pero su codificación debe ser lo
suficientemente fuerte como para evitar XSS cuando los datos no confiables
se colocan en contextos sin comillas.
HtmlSanitizer
Reaccionar dangerouslySetInnerHTML
Codificación de
Cuerpo
Cuerda entidad HTML
HTML <span>UNTRUSTED DATA </span>
(regla n. ° 1).
Codificación de
entidad HTML
agresiva (regla n. °
2), solo coloque
datos no
confiables en una
lista blanca de
Atributos
<input type="text" name="fname" atributos seguros
Cuerda HTML
value="UNTRUSTED DATA "> (enumerados a
seguros
continuación),
valide
estrictamente los
atributos inseguros
como el fondo, la
identificación y el
nombre.
<a
Obtener Codificación de
Cuerda href="/site/search?value=UNTRUSTED
parámetro DATA ">clickme</a>
URL (regla # 5).
Canonicalice la
entrada, la
URL no validación de URL,
confiable la verificación
en un <a href="UNTRUSTED URL ">clickme</a> segura de URL, la
Cuerda
atributo <iframe src="UNTRUSTED URL " />
lista blanca de http
SRC o y https solo (evite
HREF el protocolo
JavaScript para
abrir una nueva
Tipo
de Contexto Muestra de código Defensa
datos
ventana),
codificador de
atributos.
Validación
estructural estricta
(regla # 4),
html <div style="width: UNTRUSTED
Cuerda Valor CSS codificación CSS
DATA ;">Selection</div>
Hex, buen diseño
de características
CSS.
Asegurar las
variables
JavaScript se
citan, JavaScript
<script>var currentValue='UNTRUSTED
Codificación Hex,
Variable DATA ';</script>
Cuerda JavaScript
JavaScript <script>someFunction('UNTRUSTED
DATA ');</script> codificación
Unicode, evite
barra invertida
codificación
( \"o \'o \\).
Validación HTML
Cuerpo (JSoup, AntiSamy,
HTML <div>UNTRUSTED HTML</div>
HTML HTML Sanitizer
...).
Tipo de
Mecanismo de codificación
codificación
Codificación de Convertir &a &, Convertir <a <, Convertir >a >,
entidad HTML Convertir "a ", Convertir 'a ', Convertir /a/
Artículos relacionados
XSS Attack Cheat Sheet
OWASP: XSS Filter Evasion Cheat Sheet - Basado en - RSnake's: "XSS Cheat
Sheet" .
Descripción de vulnerabilidades XSS