2024-05-14 11:04:20 发布
网友
假设在因特网上有一个服务器,你可以发送一段代码到那里进行评估。在某个时刻,服务器获取所有已提交的代码,并开始运行和评估它。但是,在某个时候,它肯定会撞上“操作系统('rm-rf*)“是某个邪恶的程序员发来的。除了“rm-rf”之外,你可以期望人们尝试使用服务器发送垃圾邮件或拒绝服务的人,或者胡闹“whiletrue:pass”之类的东西。在
有没有办法与这种不友好/不可信的代码合作?我尤其对python的解决方案感兴趣。不过,如果你有任何其他语言的信息,请分享。在
这是不可能提供一个绝对的解决办法,因为'坏'的定义是相当难以确定。在
打开和写入文件是好还是坏?如果该文件是/dev/ram怎么办?在
你可以分析行为特征,也可以尝试阻止任何可能不好的行为,但你永远不会赢。Javascript就是一个很好的例子,人们总是在他们的计算机上运行任意的Javascript代码——它应该是沙盒的,但是会出现各种各样的安全问题和边缘条件。在
我不是说不要尝试,你会从这个过程中学到很多东西。在
许多公司花了数百万美元(英特尔刚刚在McAffee上花了数十亿美元)试图了解如何检测“坏代码”——每天运行McAffe防病毒软件的机器都会感染病毒。Python代码的危险性丝毫不亚于C。您可以运行系统调用、绑定到C库等
你可以检查一下pysandbox,虽然如果你负担得起的话,VM路由可能更安全。在
如果您不是特定于CPython实现的,那么应该考虑针对这些目的查看PyPy[wiki]——这种Python方言允许透明的代码沙箱。在
否则,可以在exec或eval的相应全局参数/局部变量中提供伪__builtin__和{}。在
exec
eval
__builtin__
此外,您可以提供类似字典的对象而不是真正的字典,并跟踪不受信任的代码对其命名空间的作用。在
此外,您可以实际跟踪该代码(在执行任何其他代码之前,在受限环境中发出sys.settrace()),以便在出现问题时中断执行。在
sys.settrace()
如果没有可接受的解决方案,请使用操作系统级别的沙盒,如chroot、unionfs和标准的multiprocesspython模块,在单独的安全进程中生成代码工作线程。在
chroot
unionfs
multiprocess
这是不可能提供一个绝对的解决办法,因为'坏'的定义是相当难以确定。在
打开和写入文件是好还是坏?如果该文件是/dev/ram怎么办?在
你可以分析行为特征,也可以尝试阻止任何可能不好的行为,但你永远不会赢。Javascript就是一个很好的例子,人们总是在他们的计算机上运行任意的Javascript代码——它应该是沙盒的,但是会出现各种各样的安全问题和边缘条件。在
我不是说不要尝试,你会从这个过程中学到很多东西。在
许多公司花了数百万美元(英特尔刚刚在McAffee上花了数十亿美元)试图了解如何检测“坏代码”——每天运行McAffe防病毒软件的机器都会感染病毒。Python代码的危险性丝毫不亚于C。您可以运行系统调用、绑定到C库等
你可以检查一下pysandbox,虽然如果你负担得起的话,VM路由可能更安全。在
如果您不是特定于CPython实现的,那么应该考虑针对这些目的查看PyPy[wiki]——这种Python方言允许透明的代码沙箱。在
否则,可以在}。在
exec
或eval
的相应全局参数/局部变量中提供伪__builtin__
和{此外,您可以提供类似字典的对象而不是真正的字典,并跟踪不受信任的代码对其命名空间的作用。在
此外,您可以实际跟踪该代码(在执行任何其他代码之前,在受限环境中发出
sys.settrace()
),以便在出现问题时中断执行。在如果没有可接受的解决方案,请使用操作系统级别的沙盒,如
chroot
、unionfs
和标准的multiprocess
python模块,在单独的安全进程中生成代码工作线程。在相关问题 更多 >
编程相关推荐