Mitigando XSS asegurándose de que no haya ninguna letra después de un corchete angular [duplicado]

0

Opino que es bastante seguro mitigar XSS al no aplicar letras / símbolos especiales justo después del corchete < . Como se especifica en la especificación de HTML , el nombre de la etiqueta debe seguir el < para formar una válida elemento html. ¿Es la solución simple capaz de mitigar XSS?

Suponiendo que se necesita crear un elemento html en nuestro ataque.

    
pregunta Timothy Leung 19.01.2017 - 11:44
fuente

1 respuesta

1

Esto es seguro bajo dos suposiciones:

  1. Los navegadores realmente siguen la especificación.
  2. Solo inserta datos no confiables entre etiquetas.

En cuanto al # 1, probé versiones recientes de IE, Chrome y Firefox y todas parecen seguirlo. Pero en el pasado, los navegadores eran criaturas muy tolerantes, por lo que podría haber algunos antiguos que amablemente asuman que te refieres a <script> y no a < script> .

En cuanto al # 2, es importante recordar que XSS depende del contexto. Suponiendo que cleaned() es una implementación de su esquema, lo siguiente sería seguro:

<div><?= cleaned(userdata); ?></div>                         <!-- Between tags. -->

Pero por ejemplo lo siguiente no sería seguro:

<input value="<?= cleaned(userdata); ?>">                    <!-- Inside attribute. -->
<script> let x = "<?= cleaned(userdata); ?>"; </script>      <!-- Inside script. -->
<style> a { color: <?= cleaned(userdata); ?>; } </style>     <!-- Inside style. -->

Como siempre, recomiendo el Chuleta de prevención OWASP XSS .

Editar: Dices que no hay letras . Según esta respuesta probablemente no quiera permitir <! , </ o <? tampoco , ya que podrían utilizarse para iniciar comentarios y cerrar etiquetas. Podría no llevar a XSS, pero aún podría arruinar tu página con consecuencias inesperadas.

    
respondido por el Anders 19.01.2017 - 11:57
fuente

Lea otras preguntas en las etiquetas