La constante FILTER_SANITIZE_STRING está en desuso

Resuelto Dharman asked hace 54 años • 6 respuestas

Instalé PHP 8.1 y comencé a probar mi antiguo proyecto. He usado el filtro FILTER_SANITIZE_STRINGasí:

$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);

Ahora me sale este error:

En desuso: la constante FILTER_SANITIZE_STRING está en desuso

Lo mismo sucede cuando uso FILTER_SANITIZE_STRIPPED:

En desuso: la constante FILTER_SANITIZE_STRIPPED está en desuso

¿Con qué puedo reemplazarlo?

Dharman avatar Jan 01 '70 08:01 Dharman
Aceptado

Este filtro tenía un propósito poco claro. Es difícil decir qué pretendía lograr exactamente o cuándo debería utilizarse. También se confundió con el filtro de cadena predeterminado, debido a su nombre, cuando en realidad el filtro de cadena predeterminado se llama FILTER_UNSAFE_RAW. La comunidad PHP decidió que el uso de este filtro ya no debería ser compatible.

El comportamiento de este filtro fue muy poco intuitivo. Eliminó todo lo que había entre <el final de la cadena o hasta la siguiente >. También eliminó todos NULlos bytes. Finalmente, codificó 'y "en sus entidades HTML.

Si deseas reemplazarlo, tienes un par de opciones:

  1. Utilice el filtro de cadena predeterminado FILTER_UNSAFE_RAWque no realiza ningún filtrado. Esto debería usarse si no tenía idea del comportamiento de FILTER_SANITIZE_STRINGy solo desea usar un filtro predeterminado que le dará el valor de la cadena.

  2. Si utilizó este filtro para protegerse contra vulnerabilidades XSS, reemplace su uso con htmlspecialchars(). No llame a esta función en los datos de entrada. Para protegerse contra XSS, ¡necesita codificar la salida!

  3. Si sabía exactamente qué hace ese filtro y desea crear un polyfill, puede hacerlo fácilmente con expresiones regulares.

    function filter_string_polyfill(string $string): string
    {
        $str = preg_replace('/\x00|<[^>]*>?/', '', $string);
        return str_replace(["'", '"'], ['&#39;', '&#34;'], $str);
    }
    

No intentes desinfectar la entrada. Salida de escape.

Dharman avatar Sep 16 '2021 11:09 Dharman

La constante más cercana que puede usar en su lugar, si desea convertir su variable en una cadena html segura, es FILTER_SANITIZE_FULL_SPECIAL_CHARS

Chouettou avatar Dec 13 '2021 09:12 Chouettou