2010-07-23 4 views
6

Je souhaite limiter la fonctionnalité PHP à laquelle mes utilisateurs ont accès. Par exemple, il existe un objet $data et l'utilisateur aime utiliser iffor et echo. De toute évidence, lui permettre d'écrire en PHP serait une sérieuse vulnérabilité.Code PHP des utilisateurs de Sandboxing

Existe-t-il un moyen d'exécuter ce PHP dans un sandbox ou recommanderiez-vous un moteur de template PHP léger?

+0

Voir: http: // stackoverflow.com/questions/324726/est-il-un-moyen d'exécuter-php-code-dans-un-sandbox-de-dans-php – troelskn

Répondre

8

Si vous n'avez pas votre propre serveur, vous n'avez probablement pas de runkit. Mais ce que vous avez (probablement) est Tokenizer! En utilisant le Tokenizer, vous pouvez regarder à travers le code source donné et abandonner si vous trouvez un jeton invalide. Here an example how to validate an array using this. Vous pourriez faire la même chose pour votre but. La documentation PHP a a list of tokens. Si vous avez besoin d'aide pour décider quels jetons autoriser ou interdire, veuillez le dire.

€ dit: Et évidemment, je recommande d'utiliser Twig, aussi. C'est tellement agréable - et a sandboxing!

+0

Twig a le code modèle de bac à sable. aussi bon que runkit-sandbox mais je n'ai pas besoin de réinstaller le serveur php Merci beaucoup! – jantimon

2

Essayé Smarty? http://www.smarty.net/

+2

Il y a aussi Dwoo: http://dwoo.org/ qui est plus PHP5-ish – Macmade

+0

@Ghommey: Si vous voulez vraiment seulement une sortie personnalisable, alors c'est votre choix. Un moteur de template est beaucoup plus facile à maintenir qu'un php-sandbox. – Baju

1

Le PECL runkit extension ne fournit sandboxing, mais il est peut-être un peu exagéré pour ce que vous voulez faire

4

Le seul que je connaisse est à ce jour runkit.

L'extension runkit fournit des moyens pour modifier les constantes, fonctions définies par l'utilisateur et les classes définies par l'utilisateur. Il fournit également des variables superglobales personnalisées et des sous-interprètes embarquables via le sandboxing.

Mise à jour:

je pourrais trouver ces deux liens concernant zend et runkit vous devriez jeter un oeil à:

http://framework.zend.com/wiki/display/ZFPROP/Zend_Http_Server+-+Mat+Scales
http://www.dunfy.me.uk/?p=38

+0

Runkit nécessite que la sécurité des threads soit activée et que Zend exige que la sécurité des threads soit désactivée. Existe-t-il un moyen d'utiliser Zend et Runkit? – jantimon

+0

'La classe Runkit_Sandbox n'est disponible qu'à partir de PHP 5.1.0 ou de versions spécialement corrigées de PHP 5.0, et nécessite que la sécurité des threads soit activée' Dans mon 'phpinfo()' runkit est activé mais runkit_sandbox est probablement désactivé à cause du sécurité des threads – jantimon

+0

@Ghommey: Voilà ce que nous avons jusqu'à présent :( – Sarfraz

4

Le long des lignes de Smarty, donner twig un essai!

Il existe également un extension system très robuste qui vous permet d'autoriser/interdire les balises intégrées, personnalisées, les analyseurs de jetons, les nœuds, etc. dans le langage de gabarit lui-même. De cette façon, les utilisateurs peuvent avoir une logique de base (instructions conditionnelles, "fonctions" (blocs) et itérateurs) sans recourir aux maux d'eval.

+1

+1 pour proposer Twig - c'est BEST! – NikiC

+0

Twig souffle smarty hors de l'eau et il est encore en développement actif –

1

PHP Fat-Free Framework possède un moteur de template qui interdit l'utilisation du code PHP et vous permet de définir quelles fonctions peuvent être utilisées dans les templates HTML. Il existe également une véritable fonctionnalité de sandboxing qui rend les fonctions et les fichiers indépendants des autres, c'est-à-dire que les variables/fonctions dans un fichier include ne sont pas connues par les autres, vous pouvez donc avoir une fonction avec un nom identique. Cela peut être utile aux équipes de développeurs (dysfonctionnelles).