安全评估评论(完成家庭作业)

嗨,大家好! 我知道这个主题已被殴打致死,我不会去 关于缺乏适当限制执行的功能的抱怨 python运行时间. 这是操作系统的工作,我明白了. 无论如何,我考虑使用语言的受限 *子集 * 对于简单的配置脚本并将数据存储在用户友好的 方法. 我完全意识到将"评估"引入到 图片,所以我走了不同的路线并将以下砍伐 模块:http://www.zafar.se/dump/safe.py 你们中的一些人可以就实施做出一些反馈吗? 默认情况下,模块施加以下限制: *导入模块已禁用 *不安全的内置属性是禁用的 *超时限制('while 1:通过'不能永远阻止) * getAttr,setAttr,delattr被禁用 * lowlevel属性(例如__subclasses __禁用) *环境传递给" Exec"不能包含模块或内置 我缺少一些明显的安全漏洞吗? 一个人如何容易折衷受限的环境? 谢谢, 巴巴尔·扎法尔(Babar K. Zafar) PS. 以下是一些简单的联合,可以让您对模块有感觉: 类Testsafeeval(UnitTest.testcase): def test_builtin(self): #尝试访问不安全的内置 self.assertraises(safeevalexception, safe_eval,"打开('test.txt','w')")") def test_getattr(self): #尝试获取Arround Direct atter访问 self.assertraises(safeevalexception,\ safe_eval," getAttr(int,'__abs__')") def test_func_globals(self): #尝试访问定义乐趣的全局环境 self.assertraises(safeevalexception,\ safe_eval," def x():通过;打印x.func_globals") def test_lowlevel(self): #访问"对象"的低级技巧 self.assertraises(safeevalexception,\ safe_eval,"().__类__. mro()[1] .__子类__()") def test_timeout_ok(self): #尝试在时间内完成慢速代码 def test():time.sleep(2) env = {'test':test} safe_eval(" test()",env,timeout_secs = 5) def test_timeout_exceed(self): #尝试出口永远不会诱惑的代码 self.assertraises(safeevalexception,\ Safe_eval," 1:通过") def test_invalid_context(self): #无法通过模块或内置的环境传递 env = {'f':__ builtins__.open,'g':time} self.assertraises(safeevalexception,\ Safe_eval,"打印1",env) def test_callback(self): #通过回调修改本地变量 self.value = 0 def test():self.value = 1 env = {'test':test} safe_eval(" test()",env) self.assertequal(self.value,1)

标签: python

添加新评论