Skip to main content

Proxy

Proxy PHP pour leThumbor Serviceavec d'ImagesSupport Thumborde NocoDB

Introduction

Description

UnCe proxy est un serveur intermédiaire qui se place entre un client et un autre serveur, facilitant ou contrôlant les requêtes échangées entre eux. Dans ce contexte, le proxyscript PHP sert de proxy pour accéder à rediriger les requêtes d'images vers ThumborThumbor, tout en appliquanttéléchargeant et en traitant les images provenant de NocoDB. Il cache également les images pour améliorer les performances et inclut des règlesfonctionnalités de sécurité et de validation. Cette approche permet de contrôler l'accès aux images et d'assurer que seules les requêtes autorisées sont traitées par Thumbor.journalisation.

Fonctionnalités

Structure principales

du Projet
  1. proxy.php: Script principal pour servir les images via Thumbor.
config.php: Fichier de configuration contenant les paramètres essentiels. cleanup.php: Script pour nettoyer les fichiers temporaires et le cache. debug.log: Fichier de journalisation des événements du proxy. temp/: Dossier pour stocker temporairement les images téléchargées. cache/: Dossier pour stocker les images mises en cache.

Explication du Code

1. proxy.php

    Initialisation :

      Active les rapports d'erreurs et affiche les erreurs. Charge les dépendances via Composer. Charge la configuration depuis config.php. Initialise le cache.

      Fonction de Journalisation :

      Enregistrement
      deslog_message requêtesécrit etles desmessages erreursde log dans un fichier despécifié logsi pourla faciliterjournalisation leest débogage. Validation de Domaine : Seules les requêtes provenant de domaines autorisés peuvent accéder au service. Transformation d'Images : Construction et redirection des requêtes vers Thumbor pour appliquer des transformations d'images. Gestion des Erreurs : Gestion des erreurs de requêtes et réponse avec des codes d'état HTTP appropriés.
      Fonctionnalités et Explications

        Journalisation

          La fonction log_debug enregistre des messagesactivée dans unla fichier debug.log pour le suivi et le débogage des requêtes.configuration.

          function log_debug($message) { file_put_contents('debug.log', date('[Y-m-d H:i:s] ') . $message . "\n", FILE_APPEND); }

          ValidationVérification et Création des DomainesDossiers AutorisésTemporaire :

          • LaVérifie fonctionet crée le dossier temporaire s'il n'existe pas.
          Vérifie si le dossier est accessible en écriture.

          Fonction de Vérification de Domaine Autorisé :

            isDomainAllowed vérifie si le domaine d'une URL donnée est autorisé en se basant sur une liste de domaines autorisés.

            Fonction pour Générer des Noms de Fichier Aléatoires :

              generateRandomFileName génère un nom de fichier aléatoire pour les fichiers temporaires.

              Traitement de la Requête :

                Récupère et analyse les paramètres de la requête. Vérifie si l'URL de l'image provientest d'unvide domaineou autorisé.mal formée. LesVérifie domaines autorisés peuvent inclure des wildcards pour permettre l'accès à tous les sous-domaines d'un domaine principal.

                function isDomainAllowed($url, $allowedDomains) { $parsedUrl = parse_url($url); if (!isset($parsedUrl['host'])) { return false; } $host = $parsedUrl['host']; foreach ($allowedDomains as $allowedDomain) { if ($allowedDomain[0] === '*') { $domain = substr($allowedDomain, 2); // Enlève '.*' if (substr($host, -strlen($domain)) === $domain) { return true; } } else { if ($host === $allowedDomain) { return true; } } } return false; }

                Construction de l'URL Thumbor

                  Le script extrait les paramètres Thumbor etsi l'URL de l'image est une URL NocoDB ou une URL externe autorisée. Télécharge et traite l'image si elle provient de laNocoDB. requête entrante, puis construitConstruit l'URL de transformation pour Thumbor.

                  $requestUri = $_SERVER['QUERY_STRING']; $protocolPos = strpos($requestUri, 'http'); $thumborParams = substr($requestUri, 0, $protocolPos); $imageUrl = substr($requestUri, $protocolPos); if (!isDomainAllowed($imageUrl, $allowedDomains)) { http_response_code(403); echo "Domaine non autorisé"; exit; } $thumborUrl = $thumborBaseUrl . $requestUri;

                  Requêtes vers Thumbor et Gestion des Erreurs

                    Le script utilise GuzzleHttp pour effectuer les requêtes vers Thumbor et transférer les réponses au client.

                    $client = new Client(); try { $response = $client->get($thumborUrl, ['stream' => true]); foreach ($response->getHeaders() as $name => $values) { foreach ($values as $value) { header("{$name}: {$value}"); } } $body = $response->getBody(); while (!$body->eof()) { echo $body->read(1024); } } catch (RequestException $e) { log_debug("Erreur : " . $e->getMessage()); if ($e->hasResponse()) { $statusCode = $e->getResponse()->getStatusCode(); http_response_code($statusCode); echo "Erreur lors de la récupération derécupère l'image:image " . $statusCode; } else { http_response_code(500); echo "Erreur interne du serveur"; } }
                    Utilité du Proxy

                      Sécurité

                        Protection contre les abus : En restreignant l'accès aux seuls domaines autorisés, vous protégez votre service contre les requêtes abusives provenant de sources inconnues ou malveillantes. Contrôle des ressources : Vous limitez l'utilisation des ressources du serveur Thumbor aux seuls domaines de confiance, évitant ainsi une surcharge potentielle par des requêtes externes non contrôlées.transformée.

                        GestionMise desen AccèsCache :

                        • SimplicitéMet deen gestion : Ajouter ou retirer des domaines de la liste des domaines autorisés est une opération simple, rendant la gestion des accès flexible et adaptable aux besoins changeants.
                        Support des sous-domaines : Grâce aux wildcards, vous pouvez facilement autoriser touscache les sous-domainesimages d'untransformées domainepour principalaméliorer sansles avoir à lister chacun individuellement.performances.

                        2. config.php

                        TraçabilitéCe etfichier Débogagecontient les paramètres de configuration pour le proxy, incluant :

                        • Les domaines autorisés.
                        Les URLs de base pour Thumbor et NocoDB. Les chemins pour les dossiers temporaires et de cache. Les options de journalisation. Les types MIME autorisés. Les tailles maximales d'image.

                        3. cleanup.php

                          JournalisationNettoyage des accèsFichiers Temporaires et de Cache : En
                          journalisantcleanupOldFiles supprime les requêtes,fichiers vousplus pouvezanciens suivrequ'une quellescertaine requêtespériode ontdans étéles autoriséesdossiers ou refusées, facilitant ainsi le débogagetemporaires et lade surveillance des accès.cache.

                          Conclusion

                          Ce proxy PHP est un outil puissantconçu pour sécuriserservir etles gérer l'accès aux transformations d'images via Thumbor.Thumbor Entout implémentanten cetéléchargeant proxy,et vousen pouvez contrôlertraitant les requêtes,images améliorerprovenant lade sécuritéNocoDB. etIl centralisermet laen gestioncache desles images pour votredes infrastructureperformances web.optimales et inclut des fonctionnalités de journalisation et de nettoyage pour gérer les fichiers temporaires et de cache.