Quanto è sicura questa funzione per la sanitizzazione XSS?

0

Ho appena scritto questa funzione per analizzare le stringhe e prevenire XSS:

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

C'è un modo per aggirare questo filtro? P.S .: Nella mia applicazione la stringa $ non avrà mai luogo in src="" parametri o simili.

    
posta user136149 12.01.2017 - 16:03
fonte

1 risposta

4

Se la sicurezza è basata su "nella mia applicazione, il caso d'uso comune X non accadrà mai", probabilmente fallirà.

Prima di tutto, l'igienizzazione degli input non è l'approccio corretto per XSS, la codifica dipendente dal contesto è.

Il tuo approccio è anche eccessivamente complesso. Perché filtri lo spazio e + ? Perché sostituire < e > con _ , ma gli altri con spazio?

Il tuo approccio non è molto user-friendly. < e > sono sempre utilizzati legittimamente, come + .

Tutto ciò che viene detto, no, in un semplice contesto HTML - non in un contesto di attributo HTML, contesto CSS o JS, ecc. - XSS non può aver luogo senza < e > , quindi non ci sarebbe modo di aggirare il filtro. In altri contesti, XSS può ancora accadere. Anche se al momento non inserisci l'input dell'utente in altri contesti, tu o un altro sviluppatore lo farai in futuro. E supporteranno che anche una funzione chiamata tep_sanitize_string sarà sicura anche qui.

    
risposta data 12.01.2017 - 16:19
fonte

Leggi altre domande sui tag