Saliendo del atributo entre comillas dobles

3

Tengo un código que permite

[url]someurl[/url] 

BB-Code y lo reemplaza con

<a href="someurl">someurl</a>

Se requieren dos precauciones para prevenir XSS.

  1. Reemplaza < , > y " usando un simple str_replace .
  2. Utiliza una expresión regular para detectar los manejadores de protocolo javascript: y data: .

Dado que los navegadores descodifican el valor del atributo antes de seguir interpretándolo, puedes sortear la comprobación de expresiones regulares mediante la codificación de la URL usando [url]&#x6A ... [/url] .

Así obtengo:

<a href="javascript:alert(1)">javascript:alert(1)</a>

En pocas palabras, quiero más que un atributo de steenkin (¿¡quién haría clic en un enlace con ese aspecto ?!)

¿Puedo codificar de alguna manera mi " , < , etc. para que no sea reemplazado por el str_replace pero todavía se interprete en el contexto de HTML?

    
pregunta er4z0r 15.01.2013 - 13:09
fuente

2 respuestas

7

Un enfoque de lista negra siempre será defectuoso. Por ejemplo, en internet explorer puede usar el URI vbscript: para ejecutar el código vbscript. También hay formas de codificar javascript: para omitir esta comprobación. Ha habido un gran número de explotaciones de iTunes que se basan en el URI itunes: para explotar iTunes desde el navegador. Estos son solo dos ejemplos, pero en realidad podría haber un controlador de URI registrado en un sistema de destino.

Ejecutaría esto a través de una rutina htmlencode para codificar todas las comillas y los corchetes angulares. El beneficio de esto es que la URL podría legítimamente contener comillas sin dañarse. Esto se debe a que el navegador realizará automáticamente una decodificación html de todos los valores de atributo a medida que se cargan. Entonces haría cumplir que los primeros 4 caracteres son http . Si la cadena no comienza con http:// o https:// , prepárese http://

    
respondido por el rook 15.01.2013 - 17:26
fuente

Lea otras preguntas en las etiquetas