Je voudrais faire quelque chose comme TryRuby.org.
Je prends une ligne d'une ligne de l'utilisateur (par exemple J'ai essayé de faire Quelqu'un peut-il m'aider ou donner un conseil comment implémenter cette fonctionnalité. P>
THX beaucoup. P> écho __file __ code>) et je veux l'exécuter en PHP et retourner la sortie au client. P>
EXEC ('php -r'. commandement $, $ SORTIE) code> mais
$ sortie code> contient toujours la section d'aide PHP. P>
4 Réponses :
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');
Pour faire Exemple: P> php -r code> Vous devez devoir mettre le code que vous souhaitez exécuter entre
' code> .. Votre code ..
' code>
php -r ' $var = 34; print_r($var); '
http://truby.org semble avoir une coque de rubis interactive. Cela semble être un bon point de départ. P>
Voici deux projets qui fournissent une telle coquille pour PHP: php_repl et phpsh . p>
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. P>
Avec cette combinaison, vous devriez pouvoir compléter le projet CAN. P>
On dirait que votre problème est que vous n'envoyez pas votre code pour être exécuté avec En fait, si vous insistez sur l'utilisation de vous pourrait em> utiliser Le problème principal ici (à la fois avec La construction de la langue eval () est É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: p> exemple AJAX à l'aide de jQuery: p> pour la base 64 coding dans JavaScript, Voir ceci . P> P> '' code>. Vous devez également méfier de
' code> dans le code, les caractères spéciaux, les séquences d'échappement, etc.
EXEC () code>, il Peut-être mieux de faire cela (pour éviter complètement de devoir vous inquiéter de l'échappement et de la sorte): p>
eval () code> au lieu de ce que vous postez ci-dessus. p>
eval () code> et votre
exécuté () code> code) est-ce que la prise de code PHP de l'utilisateur
Suggestion forte> p>
Essayez
exécuté ("php -r \" $ commande \ "", $ sortie) code>. 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 code> 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 code> a >.
Ce sera une liste spécifique des commandes utilisateurs autorisés à taper