2009-12-14 13 views
2

Je travaille sur un grand produit logiciel ASP.NET. Nous souhaitons autoriser les utilisateurs à saisir des expressions plutôt que des constantes pour certains champs. En général quelque chose comme:Est-il sûr d'exécuter des expressions entrées par l'utilisateur comme IronPython

(Price * 1.175) + 25 

La solution la plus évidente semble être d'intégrer IronPython, créer une étendue, passer le « prix » (et d'autres) les variables puis exécutez le code ci-dessus comme IronPython.

Cependant, il n'y aurait rien qui empêche les utilisateurs d'entrer:

1/0 

ou

def func1(): 
    func1() 
func1() 

ou

import System.IO 
File.Delete(....) 

Mais si je prends toutes les exceptions et exécuter le code IronPython dans un domaine d'application avec le jeu d'autorisations Internet, suis-je sûr?

Répondre

4

Vous répondez à votre propre question en notant que rien n'empêche l'utilisateur d'entrer un code valide. Ne faites jamais confiance à l'utilisateur. Déjà.

0

Dans une situation similaire, j'ai opté pour le JScript côté serveur. Pour ajouter une autre couche de protection J'emballage l'expression dans une fonction, puis exécuter la fonction:

function generated123(p1, p2, p3) { 
    return 
    // user code goes here 
    ; 
} 

De cette façon, l'utilisateur ne peut pas forcer importer quoi que ce soit dangereux. Juste un côté de JScript de serveur est compilé qui est bon pour la perforation

+0

Juste une pensée, si l'utilisateur entre "0;}/* code mal ici */fonction dummyFunc() {return 0" Ne pourraient-ils pas alors vous exécuter? leur code maléfique? – d4nt

+0

Non. Le script lui-même n'est pas exécuté. Mon code n'appelle que la fonction generated123 – mfeingold