是否可以在python中限制对一段代码的全局变量的访问?
我希望我的程序用户能够在不破坏程序的情况下在
python中定义自定义脚本.我在看这样的事情:
def call(script): code = "access modification code" + script exec(code) “访问修改代码”定义了一个范围,使得脚本只能访问它实例化的变量.是否可以执行此操作或具有类似功能的内容,例如创建具有自己的作用域的新python环境,然后从中接收输出? 感谢您的时间 :) 澄清编辑 解决方法
在这种情况下,您要防止两个单独的问题:
>防止外部攻击者在执行程序的OS用户的上下文中运行任意代码.这意味着阻止arbitrary code execution和privilege escalation. 对于第一个问题,您需要确保您执行的python代码的源代码是用户.您不应接受来自套接字或其他用户可以写入的文件的输入.您需要以某种方式确保正在运行提供输入的程序的用户. 不要忽视或淡化此问题,否则由于您的程序,您的用户将成为病毒/恶意软件/黑客的受害者. 解决第二个问题的方式取决于程序中预期行为的确切构成.如果您对输出简单数据结构感到满意,可以在单独的进程中运行用户输入的代码,并以序列化格式(如JSON或YAML)将结果传递给管道. 这是一个非常简单的例子: #remember to set restrictive file permissions on this file. This is OS-dependent USER_CODE_FILE="/home/user/user_code_file.py" #absolute path to python binary (executable) PYTHON_PATH="/usr/bin/python" import subprocess import json user_code= ''' import json my_data= {"a":[1,2,3]} print json.dumps(my_data) ''' with open(USER_CODE_FILE,"wb") as f: f.write(user_code) user_result_str= subprocess.check_output([PYTHON_PATH,USER_CODE_FILE]) user_result= json.loads( user_result_str ) print user_result 这是一个相当简单的解决方案,它具有很大的开销.如果您需要在短时间内多次运行用户代码,请不要使用此功能. 最终,此解决方案仅对不熟练的攻击者(用户)有效.一般来说,没有办法保护用户自己的任何用户进程 – 也没有多大意义. 如果您真的想要更多保证,并且想要减轻第一个问题,那么您应该将该过程作为单独的(“访客”)用户运行.这再次依赖于操作系统. 最后一个警告:尽可能避免执行和评估.它们不会保护您的程序或用户免受输入的代码.在网上有很多关于这个的信息,只是搜索“python secure eval” (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |