2012-03-29 7 views
4

Je dois autoriser les utilisateurs du site à fournir des images "hotlinked" distantes.manipuler en toute sécurité des images "hotlinked" distantes

Je sais que cela est un peu dangereux, voici donc la procédure actuellement:

1) analyser le chemin d'accès fourni à l'aide pathinfo PHP et de briser le chemin en plusieurs parties (hôte, nom de fichier, extension) qui sont ensuite correctement saisies.

2) exécutez une requête curl pour les en-têtes d'image comme décrit ici: How can one check to see if a remote file exists using PHP? et vérifiez qu'elle a un type png ou jpg mime valide et un code de retour HTTP 200.

3) vérifier que le nom de fichier et l'extension (du pathinfo ci-dessus) est un fichier png ou jpg valide (je ne suis pas accepter gifs, etc.)

4) enfin, stocker les données de chemin d'image dans plusieurs colonnes dans le DB (échapper les données)

Ai-je rien manqué? Y a-t-il un danger qui guette? Je pensais que je devrais peut-être refaire la fonction de boucle sur l'écran aussi, pour m'assurer que l'image est toujours là et que c'est toujours une image.

Merci pour tout conseil.

+0

Si vous voulez être encore plus intelligent, vous pouvez essayer d'extraire les données réelles, puis essayer de créer l'objet image en PHP. Cependant, quoi que vous fassiez à ce stade n'empêchera personne de mettre une image correcte sur un serveur distant, vous fournissant l'URL et ensuite changer cette image à quelque chose de malveillant. –

+0

@AleksG - oui, c'est le problème, et pourquoi je pense qu'il serait peut-être préférable de faire la boucle sur l'affichage ainsi que sauvegarder. Cependant, cela va à l'encontre de l'objectif de permettre des images distantes (puisque j'obtiendrai la bande passante ainsi que le succès du stockage, même temporairement). – julio

+0

Pourquoi voulez-vous faire cela de toute façon? Quels risques craignez-vous lorsque le chemin ne serait pas audité? – Gumbo

Répondre

1

Assurez-vous que ce n'est pas un âne porno?

... Sérieusement, la seule chose que je peux penser est si c'est un script/exe/bin qui produit une image à l'écran (pensez PHP/GD), mais fait quelque chose d'autre en arrière-plan en même temps. Les CAPTCHAs, par exemple, sortent une image mais peuvent stocker la "bonne réponse" dans la session en même temps (dans les coulisses) en appelant simplement <img src="/img/captcha.php" ... />.

Il n'y a aucune raison pour que mod_rewrite ne puisse pas être utilisé pour appeler ce même script PHP avec <img src="/img/captcha.jpg" ... />. Les en-têtes HTTP peuvent être configurés pour signaler le type MIME en tant que "image/jpg" avec une réponse de 200.

Je pense que vous faites à peu près tout ce que vous pouvez; Bien que vous puissiez probablement utiliser la bibliothèque GD pour lire dans l'image que l'utilisateur a soumise et en créer une copie (sous la forme d'une image) sur votre système plutôt que d'effectuer une liaison à distance.

+0

lol-- porn est le moindre de mes soucis. Si c'est juste une image offensive, cela peut être traité. Je suis plus préoccupé par XSS, malware, etc. Merci pour l'idée re: un type d'installation CGI. – julio

Questions connexes