Dans le développement de PHP, les chaînes de requête URL de construction sont une tâche très courante. http_build_query () est un outil puissant qui convertit rapidement les tableaux en chaînes de requête codées par URL. Mais dans les applications pratiques, nous devons généralement obtenir des paramètres de l'entrée de l'utilisateur. Afin de traiter ces entrées en toute sécurité, filter_input () est une fonction indispensable. L'utilisation des deux ensemble peut améliorer considérablement la sécurité tout en assurant l'efficacité et prévenir des problèmes tels que les XS et l'injection.
http_build_query () prend un tableau et le convertit en une chaîne de requête URL qui se conforme au format de codage RFC 3986. Par exemple:
<code> $ params = ['search' => 'php', 'page' => 2]; $ querystring = http_build_query ($ params);
// sortie: recherche = php et page = 2
</code>
Cette fonction est très adaptée à l'épissage des chaînes de requête et peut rapidement construire des liens de saut lorsqu'il est utilisé avec les chemins:
<code> $ url = 'https://m66.net/search.php?' . $ Querrystring; </code>Lors du traitement des entrées de l'utilisateur, vous ne pouvez pas utiliser $ _get ou $ _post directement, car les entrées non filtrées peuvent transporter du contenu malveillant. filter_input () fournit une interface standard pour obtenir et filtrer les données d'entrée:
<code> $ search = filter_input (input_get, 'search', filter_sanitize_string); $ page = filter_input (input_get, 'page', filter_validate_int); </code>Dans le code ci-dessus, le paramètre de recherche est nettoyé en texte brut et le paramètre de la page est vérifié comme un entier.
Supposons que nous voulons construire un lien de redirection basé sur l'entrée utilisateur. Nous espérons extraire des paramètres de l'URL, le vérifier et le nettoyer, puis le faire pivoter dans une chaîne de requête sûre. À ce stade, nous pouvons le faire:
<code> $ params = []; $ search = filter_input (input_get, 'search', filter_sanitize_string);
if ($ search! == null && $ search! == false) {
$ params ['search'] = $ search;
}
$ page = filter_input (input_get, 'page', filter_validate_int);
if ($ page! == null && $ page! == false) {
$ params ['page'] = $ page;
}
$ querystring = http_build_query ($ params);
$ redirectUrl = ' https://m66.net/results.php ?' . $ Querrystring;
// Effectuer une redirection (exemple, ne sautez pas directement sans vérification dans un environnement de production réel)
En-tête («Emplacement:». $ redirectUrl);
sortie;
</code>
De cette façon, nous nous assurons que seuls les paramètres légaux et sécurisés sont épissés dans l'URL.
Le contenu non fiable entré par l'utilisateur peut contenir des scripts malveillants, tels que <cript> alert (1) </cript> . En combinant Filter_Input () avec filter_sanitize_string et filter_validate_ * , nous pouvons filtrer les caractères potentiellement dangereux ou rejeter les types de données qui ne répondent pas aux attentes, empêchant ainsi ces attaques de se produire.
De plus, le risque d'injection est encore réduit en ne faisant passer que les paramètres vérifiés à http_build_query () .
Bien que l'utilisation de http_build_query () pour construire des chaînes de requête soit pratique, la prémisse doit être que les paramètres ont été entièrement vérifiés. Le combiner avec filter_input () peut non seulement améliorer la qualité du code, mais également améliorer efficacement la sécurité des applications Web. Surtout lorsqu'il est nécessaire d'épisser l'entrée des utilisateurs pour générer des liens, cette méthode de combinaison devrait devenir une pratique standard pour les développeurs.