La constante FILTER_SANITIZE_STRING está en desuso
Instalé PHP 8.1 y comencé a probar mi antiguo proyecto. He usado el filtro FILTER_SANITIZE_STRING
así:
$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?
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 NUL
los bytes. Finalmente, codificó '
y "
en sus entidades HTML.
Si deseas reemplazarlo, tienes un par de opciones:
Utilice el filtro de cadena predeterminado
FILTER_UNSAFE_RAW
que no realiza ningún filtrado. Esto debería usarse si no tenía idea del comportamiento deFILTER_SANITIZE_STRING
y solo desea usar un filtro predeterminado que le dará el valor de la cadena.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!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(["'", '"'], [''', '"'], $str); }
No intentes desinfectar la entrada. Salida de escape.
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