¿Qué tan segura es esta función para el saneamiento de XSS?

0

Acabo de escribir esta función para analizar cadenas y evitar XSS:

  function tep_sanitize_string($string) {
    $patterns = array ('/ +/','/[<>]/');
    $replace = array (' ', '_');
    return preg_replace($patterns, $replace, trim($string));
  }

¿Hay alguna forma de evitar este filtro? P.S .: En mi aplicación, la cadena $ nunca tendrá lugar en los parámetros src="" o similares.

    
pregunta user136149 12.01.2017 - 16:03
fuente

1 respuesta

4

Si su seguridad se basa en "en mi aplicación, el caso X de uso común nunca ocurrirá", es probable que falle.

Primero, el saneamiento de entrada no es el enfoque correcto para XSS, la codificación dependiente del contexto es.

Su enfoque también es demasiado complejo. ¿Por qué filtra el espacio y + ? ¿Por qué reemplazar < y > con _ , pero los otros con espacio?

Su enfoque tampoco es muy fácil de usar. < y > se usan legítimamente todo el tiempo, al igual que + .

Dicho todo esto, no, en un contexto HTML simple - no en un contexto de atributo HTML, contexto CSS o JS, etc. - XSS no puede tener lugar sin < y > , por lo que no habría manera de evitar el filtro. En otros contextos, XSS todavía puede suceder. Incluso si actualmente no coloca la información del usuario en otros contextos, usted u otro desarrollador lo harán en el futuro. Y solo asumirán que una función llamada tep_sanitize_string también estará segura aquí.

    
respondido por el tim 12.01.2017 - 16:19
fuente

Lea otras preguntas en las etiquetas