Bonjour a tout le monde, une petite question me taraude l'esprit:
Pourquoi la fonction Exec() est-elle critiquée par beaucoup de personnes?
J'ai lu de nombreux post, et souvent il est conseillé de ne pas utiliser Exec, pourquoi?
Bonjour a tout le monde, une petite question me taraude l'esprit:
Pourquoi la fonction Exec() est-elle critiquée par beaucoup de personnes?
J'ai lu de nombreux post, et souvent il est conseillé de ne pas utiliser Exec, pourquoi?
En raison de sa dangerosité évidente. exec() permet d'executer des commandes et de lancer des programmes. Du coup la moindre faille d'injection dans le script PHP permet à un utilisateur malicieux d'executer des commandes en tant que x.apache sur la plateforme, lancer des CGI ou des scripts shell par exemple ou tout simplement créer et exécuter des scripts malicieux. Tout est permi.
Exemple:
Qu'est ce qu'il se passerait si quelqu'un mettait $_POST['c'] à "test; cd /var/www/; rm -rfv *" ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part exec("/var/www/unprogramme -b {$_POST['c']}");
Hormis pour cette raison, je ne vois pas pourquoi on ne devrait pas l'utiliser, si elle a été créer, c'est qu'il y a des cas ou on ne peut pas faire autrement que de l'utiliser?
Le souci c'est que je ne vois pas vraiment de cadre d'utilisation sans passer des variable dedans, ou de cas dans lesquels la fonction exec() est indispensable?
D'un point de vue technique, cette fonction est bâtarde. Tout ce que tu fais dans un exec() tu dois être techniquement capable de le faire en PHP - sauf cas particulier, c'est pour ça qu'elle existe. De plus, tout ce qui va se passer dans exec() échappe au contrôle de PHP, ce qui est potentiellement dangereux car tu ne sais pas ce qui s'est réellement déroulé. Par exemple: un script fait un traitement et renvoie 1 en cas d'erreur et 0 en cas de succès. Bien. Mais comment va-t'on savoir quelle erreur est survenue ? Ou pire, le programme s'est terminé normalement mais une erreur masquée est survenue, comment savoir ?
Ok, donc pas de doute, la fonction Exec() est a bannir de nos codes source?
Non car parfois tu ne peux vraiment pas faire autrement.
Mais la plupart du temps c'est vrai elle est utilisée à tord. Je me souviens d'un script shell qui était appelé par exec pour seul motif que "shell est -soi disant- plus rapide que PHP"... J'ai refais l'algorithme du script shell en PHP, je l'ai optimisé et il à tourné 2x plus vite, le contrôle en plus.
Mais par exemple dans un autre cas, je devais démarrer un daemon écrit en C, là j'avais pas tellement le choix.
Il ne faut donc pas la bannir mais l'utiliser avec parcimonie. Ah et puis un détail, la plupart des hébergeurs interdisent purement et simplement l'usage de cette fonction dans php.ini pour des raisons de sécurité.
Partager