Maison >développement back-end >tutoriel php >Comment remplacer les filtres de nettoyage de chaînes PHP 8.1 obsolètes (FILTER_SANITIZE_STRING et FILTER_SANITIZE_STRIPPED) ?

Comment remplacer les filtres de nettoyage de chaînes PHP 8.1 obsolètes (FILTER_SANITIZE_STRING et FILTER_SANITIZE_STRIPPED) ?

DDD
DDDoriginal
2024-12-05 07:13:13521parcourir

How to Replace Deprecated PHP 8.1 String Sanitization Filters (FILTER_SANITIZE_STRING and FILTER_SANITIZE_STRIPPED)?

Remplacement des constantes de filtre obsolètes : FILTER_SANITIZE_STRING et FILTER_SANITIZE_STRIPPED

Avec PHP 8.1, les filtres constants FILTER_SANITIZE_STRING et FILTER_SANITIZE_STRIPPED sont devenus obsolète. Cela a suscité des inquiétudes parmi les développeurs qui utilisaient auparavant ces filtres pour la désinfection des chaînes.

La raison de la dépréciation

Ces constantes de filtre ont été jugées déroutantes et peu claires dans leur objectif. Leur fonctionnalité se chevauchait avec d'autres filtres de chaînes, entraînant de la confusion et des résultats incohérents. La communauté PHP a décidé d'interrompre son support.

Options de remplacement

Il existe plusieurs options disponibles pour remplacer ces filtres obsolètes :

  • Utilisez FILTER_UNSAFE_RAW : Il s'agit du filtre de chaîne par défaut qui n'effectue aucun filtrage. Il convient si vous n'avez besoin d'aucune désinfection spécifique.
  • Utilisez htmlspecialchars() pour la prévention XSS : Si vous utilisiez FILTER_SANITIZE_STRING principalement pour prévenir les vulnérabilités XSS, remplacez-le par htmlspecialchars(). Cette fonction doit être appelée sur la sortie, et non sur l'entrée, pour garantir une protection efficace.
  • Créer un polyfill : Si vous avez besoin du comportement exact des filtres obsolètes, vous pouvez créer un polyfill en utilisant des expressions régulières.

Le code suivant démontre une fonction polyfill pour filter_string_polyfill :

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

N'oubliez pas que la désinfection des entrées est moins efficace que l'échappement des sorties. Concentrez-vous sur l'encodage des données potentiellement vulnérables avant qu'elles ne soient affichées ou utilisées.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn