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í.