-- coding utf-8 -- ALLOWED_FUNCTIONS abs all any bin bool bytearray ch

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# -- coding: utf-8 -- #
ALLOWED_FUNCTIONS = [
'abs', 'all', 'any', 'bin', 'bool', 'bytearray',
'chr', 'cmp', 'complex', 'dict', 'divmod', 'enumerate',
'filter', 'float', 'format', 'hash', 'hex', 'int', 'isinstance',
'iter', 'len', 'list', 'long', 'map', 'max', 'min', 'oct',
'ord', 'pow', 'range', 'reduce', 'round', 'slice', 'sorted',
'str', 'sum', 'tuple', 'type', 'unichr', 'unicode', 'xrange', 'zip', 'print'
]
import math
def wrong_func(*args1, **args2):
assert False, u'Вызов данной функции запрещен'
def run_in_sandbox(script, data = {}):
assert '__' not in script, u'Запрещено использование символа \'__\''
assert 'import' not in script, u'Запрещено использовать оператор импорта'
assert 'del' not in script, u'Запрещено использовать оператор удаления'
pr = compile(script, '<string>', mode = 'exec')
glob = data
glob['math'] = math
for name in __builtins__:
if not name in ALLOWED_FUNCTIONS:
glob[name] = wrong_func
exec(pr, glob)
if 'result' in glob:
return glob['result']
else:
return None