Secure XSS función de limpieza (actualizada regularmente)

Llevo unos días buscando en la red tratando de resolver esto, pero obtengo respuestas contradictorias.

¿Existe una biblioteca, clase o función para PHP que desinfecte / codifique de forma segura una cadena contra XSS? Necesita actualizarse regularmente para contrarrestar nuevos ataques.

Tengo algunos casos de uso:

Utilice el caso 1) Tengo un campo de texto plano, digamos para un Nombre o Apellido

User ingresa el texto en el campo y envía el formularioAntes de que esto se guarde en la base de datos que quieroun recorte cualquier espacio en blanco del frente y el final de la cadena, ysi elimine todas las etiquetas HTML de la entrada. Es un campo de texto de nombre, no deberían tener ningún HTML en él.Entonces guardaré esto en la base de datos con declaraciones preparadas para PDO.

Estoy pensando que podría hacertrim() ystrip_tags() luego use unaSanitize Filter o RegEx con una lista blanca de caracteres. ¿Realmente necesitan personajes como? y? o< > en su nombre, no realmente.

Utilice el caso 2) Al enviar el contenido de un registro de base de datos previamente guardado (o de un formulario enviado previamente) a la Vista / HTML, quiero limpiarlo a fondo para XSS. @NÓTESE BIEN Puede o no haber pasado por el paso de filtrado en el caso de uso 1, ya que podría ser un tipo diferente de entrada, por lo tanto, suponga que no se ha realizado la desinfección.

Inicialmente pensé que HTMLPurifier haría el trabajo, pero parece que esn lo que necesito cuandoHe planteado la pregunta a su apoyo:

Aquí está la prueba de fuego: si un usuario envía<b>foo</b> debería aparecer como<b>foo</b> o foo? Si es lo primero, no necesita HTML Purifier.

Así que prefiero que aparezca como<b>foo</b> porque no quiero que se muestre ningún HTML para un campo de texto simple o cualquier ejecución de JavaScript.

Así que he estado buscando una función que lo haga todo por mí. Me tropecé con elxss_clean método utilizado por Kohana 3.0 que supongo que funciona, pero solo si desea mantener el HTML. Ahora está en desuso de Kohana 3.1 ya que lo han reemplazado con HTMLPurifier. Así que supongo que se supone que debes hacerHTML::chars() en cambio, que solo haceeste código:

public static function chars($value, $double_encode = TRUE)
{
    return htmlspecialchars( (string) $value, ENT_QUOTES, Kohana::$charset, $double_encode);
}

Ahora aparentemente se supone que debes usar htmlentities en lugar de lo mencionadoen bastantes lugares en Stack Overflow porque es más seguro que htmlspecialchars.

Entonces, ¿cómo uso htmlentities correctamente?Eso es todo lo que necesit¿Cómo protege contra los valores codificados hexadecimales, decimales y base64 que se envían desde los ataques enumeradosaqu?

Ahora veo que el tercer parámetro para el método htmlentities es el juego de caracteres que se utilizará en la conversión. Ahora mi sitio / db está en UTF-8, pero tal vez los datos del formulario enviado no estaban codificados en UTF-8, tal vez enviaron ASCII o HEX, ¿tal vez necesito convertirlo a UTF-8 primero? Eso significaría un código como:

$encoding = mb_detect_encoding($input);
$input = mb_convert_encoding($input, 'UTF-8', $encoding);
$input = htmlentities($input, ENT_QUOTES, 'UTF-8');

¿Si o no? Entonces todavía no estoy seguro de cómo proteger contra las posibles entradas XSS hexadecimales, decimales y base64 ...

Si hay alguna biblioteca o marco PHP de código abierto que pueda proteger XSS correctamente, me interesaría ver cómo lo hacen en código.

Cualquier ayuda muy apreciada, ¡perdón por la larga publicación!

Respuestas a la pregunta(2)

Su respuesta a la pregunta