10
votes

Inline php (ligne de commande)

Je voudrais faire quelque chose comme TryRuby.org. Je prends une ligne d'une ligne de l'utilisateur (par exemple écho __file __ ) et je veux l'exécuter en PHP et retourner la sortie au client.

J'ai essayé de faire EXEC ('php -r'. commandement $, $ SORTIE) mais $ sortie contient toujours la section d'aide PHP.

Quelqu'un peut-il m'aider ou donner un conseil comment implémenter cette fonctionnalité.

THX beaucoup.


4 commentaires

Essayez exécuté ("php -r \" $ commande \ "", $ sortie) . Mais en tout cas, c'est trop dangereux que les utilisateurs puissent exécuter la commande sur votre machine


Jetez un coup d'œil à eval PHP.net/manual/fr/ Fonction.val.php Mais je ne recommanderais pas simplement de mettre n'importe quoi de l'utilisateur là-bas. Vous voudriez le filtrer lourdement à l'avance.


Mieux encore, jetez un coup d'œil à runkit_sandbox .


Ce sera une liste spécifique des commandes utilisateurs autorisés à taper


4 Réponses :


0
votes

Rechercher 'Eval ()' et plus important encore, pourquoi Eval () et ce que vous essayez de faire est très difficile à réaliser de manière sécurisée. Imagerie, par exemple, l'utilisateur qui saisit:

echo file_get_contents('/etc/passwd');


0 commentaires

20
votes

Pour faire php -r code> Vous devez devoir mettre le code que vous souhaitez exécuter entre ' code> .. Votre code .. ' code>

Exemple: P>

php -r ' $var = 34; print_r($var); '


0 commentaires

0
votes

http://truby.org semble avoir une coque de rubis interactive. Cela semble être un bon point de départ.

Voici deux projets qui fournissent une telle coquille pour PHP: php_repl et phpsh .

L'autre partie est l'interface Web de la coque interactive. Pour cette partie, je vous suggère de regarder repl.it , qui fournit ce service pour de nombreuses langues (mais malheureusement pas Php). Voici un lien à son code source.

Avec cette combinaison, vous devriez pouvoir compléter le projet CAN.


0 commentaires

6
votes

On dirait que votre problème est que vous n'envoyez pas votre code pour être exécuté avec '' . Vous devez également méfier de ' dans le code, les caractères spéciaux, les séquences d'échappement, etc.

En fait, si vous insistez sur l'utilisation de EXEC () , il Peut-être mieux de faire cela (pour éviter complètement de devoir vous inquiéter de l'échappement et de la sorte): xxx

vous pourrait utiliser eval () au lieu de ce que vous postez ci-dessus.

Le problème principal ici (à la fois avec eval () et votre exécuté () code) est-ce que la prise de code PHP de l'utilisateur isn ' t Safe :

La construction de la langue eval () est très dangereuse car elle permet d'exécuter du code PHP arbitraire. son utilisation est donc découragé. Si vous avez soigneusement vérifié qu'il n'y a pas d'autre option que d'utiliser cette construction, payez une attention particulière ne pas transmettre aucun Utilisateur fourni des données dans elle sans la valider correctement à l'avance.


Suggestion

Étant donné que vous souhaitez renvoyer le résultat du code PHP, vous pouvez potentiellement faire quelque chose de refroidir avec Ajax, où vous passez le code PHP à un script (base 64 codé, peut-être) en tant que paramètre: xxx

exemple AJAX à l'aide de jQuery: xxx

pour la base 64 coding dans JavaScript, Voir ceci .


0 commentaires