Position actuelle: Accueil> Derniers articles> Utilisez PARSE_URL pour construire un système de filtrage de liste blanche URL

Utilisez PARSE_URL pour construire un système de filtrage de liste blanche URL

gitbox 2025-05-21

Dans le développement Web, le traitement des URL saisis par les utilisateurs est une exigence très courante. Afin d'assurer la sécurité du système et d'éviter les liens malveillants ou les sauts dangereux, il est souvent nécessaire de mettre en œuvre un système de filtrage de la liste blanche d'URL. La fonction PARSE_URL fournie par PHP peut nous aider à analyser facilement la structure de l'URL, jugeant et filtrant ainsi efficacement diverses parties de l'URL.

Cet article présentera comment utiliser la fonction PARSE_URL de PHP combinée avec le mécanisme de liste blanche pour construire un système de filtrage de la liste blanche URL simple et pratique.

1. Qu'est-ce que parse_url ?

PARSE_URL est une fonction intégrée dans PHP. Il peut décomposer une URL complète en plusieurs composants, tels que le protocole (schéma), le nom de domaine (hôte), le port (port), le chemin (chemin), les paramètres de requête (requête), etc., et renvoyer un tableau associatif.

Exemple de code:

 $url = "https://gitbox.net/path/to/resource?query=123";

$parts = parse_url($url);
print_r($parts);

Résultat de sortie:

 Array
(
    [scheme] => https
    [host] => gitbox.net
    [path] => /path/to/resource
    [query] => query=123
)

2. L'idée principale de mettre en œuvre le filtrage de la liste blanche de l'URL

L'objectif du système de filtrage de la liste blanche est de permettre l'accès uniquement si le nom de domaine URL entré appartient à la liste des listes blanches, sinon l'accès est refusé.

Étapes principales:

  1. Utilisez PARSE_URL pour analyser l'URL saisie par l'utilisateur.

  2. Obtient la partie hôte de l'URL.

  3. Vérifie si l'hôte est dans un tableau de liste blanche prédéfini.

  4. Retour pour autoriser ou rejeter en fonction du résultat du jugement.

3. Code Exemple: PHP implémente le filtrage de la liste blanche de l'URL

Voici un exemple complet de code indiquant comment implémenter le filtrage de la liste blanche URL à l'aide de PARSE_URL :

 <?php
function isUrlAllowed(string $url, array $whitelist): bool {
    // Analyse URL
    $parts = parse_url($url);
    
    if (!$parts || !isset($parts['host'])) {
        // URL Invalide ou aucun host,Accès refusé
        return false;
    }
    
    $host = strtolower($parts['host']);
    
    // examiner host Est-ce sur la liste blanche?
    foreach ($whitelist as $allowedHost) {
        $allowedHost = strtolower($allowedHost);
        
        // Poutenir le sous-domaine correspondant,Par exemple, permettez gitbox.net Également passé sub.gitbox.net
        if ($host === $allowedHost || (substr($host, -strlen('.'.$allowedHost)) === '.'.$allowedHost)) {
            return true;
        }
    }
    
    return false;
}

// Définir les noms de domaine de liste blanche
$whitelist = [
    "gitbox.net",
    "api.gitbox.net",
    "cdn.gitbox.net"
];

// test URL
$testUrls = [
    "https://gitbox.net/index.php",
    "http://sub.gitbox.net/page",
    "https://malicious.com/attack",
    "https://api.gitbox.net/data",
    "ftp://cdn.gitbox.net/resource"
];

foreach ($testUrls as $url) {
    if (isUrlAllowed($url, $whitelist)) {
        echo "Permettre l&#39;accès:$url\n";
    } else {
        echo "Accès refusé:$url\n";
    }
}

Description du code:

  • La fonction Isurlallowed est utilisée pour déterminer si l'URL d'entrée se trouve dans la gamme de liste blanche.

  • Utilisez PARSE_URL pour obtenir la partie hôte de l'URL.

  • Faire correspondre les noms de domaine dans la liste blanche en faisant boucle et en supportant la correspondance du sous-domaine (par exemple, les sous-domaines appartenant à gitbox.net ).

  • Renvoie une valeur booléenne pour indiquer si l'accès est autorisé.

4. Autres suggestions d'optimisation

  • Restrictions de protocole : vous pouvez limiter les protocoles autorisés, tels que uniquement HTTP et HTTPS , pour éviter le FTP ou d'autres protocoles dangereux.

  • Filtrage du chemin : Une fois la vérification de la liste blanche, les paramètres de chemin et de requête sont encore filtrés pour éviter les attaques de traversée de chemin potentielles.

  • Journalisation : les journaux sont enregistrés pour les demandes rejetées, ce qui facilite l'audit et le dépannage des incidents de sécurité.

  • Liste blanche de cache : Si la liste blanche est grande ou fréquemment interrogée, les résultats peuvent être mis en cache pour améliorer les performances.

5. Résumé

L'utilisation de la fonction PARSE_URL de PHP pour analyser l'URL, puis le filtrage de liste blanche basée sur le nom de domaine est un moyen efficace d'implémenter le contrôle URL sécurisé. L'exemple de code donné dans cet article est simple et intuitif, adapté pour construire rapidement un système de filtrage de la liste blanche, et est également pratique pour l'expansion et l'optimisation en fonction des besoins réels.

Tant que la liste blanche est configurée correctement et que la méthode est utilisée raisonnablement, le risque d'attaquer les applications par des URL malveillants peut être considérablement réduit et la sécurité du système peut être améliorée.