Question

Bonjour, J'ai quelques questions au sujet de PHP exec () et passthru ().

1) Je ne ai jamais utilisé exec () en PHP, mais je l'ai vu est parfois utilisé avec ImageMagick. Je suis maintenant curieux, ce qui est d'autres utilisations courantes où exec est bon dans une application web?

2) Il y a environ 6 ans quand j'ai commencé à jouer avec PHP, je ne savais pas vraiment quoi que ce soit, juste des trucs très basique et j'avais un site qui a obtenu compromis et la configuration de quelqu'un propre fichier PHP qui utilisait la fonction passthru () pour passer un tas du trafic throught mon site pour télécharger de la musique gratuitement ou vidéo et je suis frappé avec une charge de la bande passante de 4000 $ de mon hôte! 6 ans plus tard, je sais soo beaucoup plus sur la façon d'utiliser PHP mais je ne sais toujours pas comment cela me soit jamais arrivé auparavant. Comment quelqu'un peut-il beable pour ajouter un fichier à mon serveur par le biais du mauvais code?

Était-ce utile?

La solution

1] Exec () est vraiment utile lorsque vous:

A) à exécuter un programme / utilitaire sur le serveur que PHP ne dispose pas d'une commande équivalente pour. Par exemple ffmpeg est l'utilité commune exécutée via un appel exec (pour toutes sortes de conversion de médias).

B) L'exécution d'un autre processus - que vous pouvez bloquer ou pas bloquer sur - c'est très puissant. Parfois, vous QANT un pcnt_fork bien, ou similaire, ainsi que les CL args correctes pour le blocage non.

C) Un autre exemple est quand il faut traiter XSLT 2.0 - I doivent exec () un service de petits java je marche pour gérer les transformations. Très utile. PHP ne supporte pas les transformations XSLT 2.0.

2] Maudit soit est une honte. Eh bien, beaucoup de façons. Theres une famille de vulnérabilité appelé « fichier distant comprend vulns », qui permettent essentiellement un attaquant d'inclure la source arbitraire et donc d'exécuter sur votre serveur. Jetez un oeil à: http://lwn.net/Articles/203904/

En outre, mentionné ci-dessus, dites-vous faire quelque chose comme (très simplifié):

exec("someUnixUtility -f $_GET['arg1']"); 

Eh bien, imaginez l'attaquant fait, url.come arg1 = "bla, rm -rf /", votre code sera essentiellement faire bouillir jusqu'à:

exec("someUnixUtility -f blah; rm -rf /");

Ce qui dans les commandes unix, vous séparez w / la; Alors oui -. Qui pourrait être beaucoup de dégâts

Même avec un téléchargement de fichier, imaginez que vous dépouillez les quatre derniers caractères (.ext), pour trouver l'extension. Eh bien, quelque chose comme ça « exploit.php.gif », puis Déshabillez-vous l'extension, vous avez donc exploit.php et vous déplacer dans votre / utilisateurs / imgs / dossier. Eh bien, tout l'attaquant doit faire maintenant parcourir pour les utilisateurs / imgs / exploit.php et ils peuvent exécuter un code qu'ils veulent. Vous avez été le propriétaire à ce moment-là.

Autres conseils

  1. Utilisez exec ou lorsque vous voulez exécuter un autre programme.

  2. La documentation pour passthru dit:

  

Avertissement

     

Quand permettant aux données fournies par l'utilisateur à transmettre à cette fonction, utiliser escapeshellarg() ou escapeshellcmd() pour faire en sorte que les utilisateurs ne peuvent pas tromper le système en exécutant des commandes arbitraires.

Quelqu'un avait probablement trouvé un trou de sécurité dans votre script qui leur a permis d'exécuter des commandes arbitraires. Utilisez les fonctions données pour aseptiser vos entrées la prochaine fois. Rappelez-vous, rien envoyé du client peut jamais faire confiance.

exec() vous permet d'utiliser le code compilé qui est sur votre serveur, qui courir plus vite que php, ce qui est interprété.

Donc, si vous avez une grande quantité de traitement qui doit être fait rapidement, exec() pourrait être utile.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top