Proxy
Proxy PHP pour le Service d'Images Thumbor
Introduction
Un 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 proxy PHP sert à rediriger les requêtes d'images vers Thumbor tout en appliquant des règles 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.
Fonctionnalités principales
- Journalisation : Enregistrement des requêtes et des erreurs dans un fichier de log pour faciliter le 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_debugenregistre des messages dans un fichierdebug.logpour le suivi et le débogage des requêtes.
function log_debug($message) { file_put_contents('debug.log', date('[Y-m-d H:i:s] ') . $message . "\n", FILE_APPEND); } - La fonction
-
Validation des Domaines Autorisés
- La fonction
isDomainAllowedvérifie si l'URL de l'image provient d'un domaine autorisé. - Les 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; } - La fonction
-
Construction de l'URL Thumbor
- Le script extrait les paramètres Thumbor et l'URL de l'image de la requête entrante, puis construit 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 de l'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.
-
Gestion des Accès
- Simplicité de 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 tous les sous-domaines d'un domaine principal sans avoir à lister chacun individuellement.
-
Traçabilité et Débogage
- Journalisation des accès : En journalisant les requêtes, vous pouvez suivre quelles requêtes ont été autorisées ou refusées, facilitant ainsi le débogage et la surveillance des accès.
Conclusion
Ce proxy PHP est un outil puissant pour sécuriser et gérer l'accès aux transformations d'images via Thumbor. En implémentant ce proxy, vous pouvez contrôler les requêtes, améliorer la sécurité et centraliser la gestion des images pour votre infrastructure web.