Hi there, I'm doing a system where I want the users to be able to 
set/change some scripts that are dynamically run(RPG like scripts).
So a user can change the way the Kill_a_player script is run.

I thought of doing this by using exec, like this:


class Script(models.Model):
>     script_py = models.TextField(u"Script Python")
>     
>     class Meta:
>         app_label = 'scripts'

 

 

    def run(self,**kwargs):
>         ret= None
>         #prepares the args
>         for key, val in kwargs.items():
>             exec("%s = val"%key)    
>         exec(self.script_py)
>         return ret


So that I can do:

s = Script() 

s.script_py = """character.kill(another_character)

                        character.win_exp()

                        ret = character.lvl"""

 

new_lvl = s.run(character = some_player, another_character = another_player)

 
This all works just fine, but the problem is the security risk of the 
exec...
So the user could do:

> s.script_py = "import os; os.system('shutdown -P 0')


 And that's the smallest problem...
So I was thinking if there is already something like that implemented, and 
that I can add to my project easily, and found this PythonScript from Zope, 
that does something like that.

I just don't know if that is easily portable to another project, and if I'm 
going to get what I want using this(let the users change the way the script 
is ran). There is not much use if the users can only do : *"a + b = c"*
*
*
I also came across this post http://lybniz2.sourceforge.net/safeeval.html and 
was thinking if there is something like that in exec.
I friend of mine also have said that you can limit what the users can 
import and use in some function(that I don't remember now).

Thanks for the help.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/django-users/-/8sUd9186CNIJ.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to