我一直在使用C#开发一个个人项目,该项目允许用户执行其他用户编写的脚本并限制该脚本的权限。我可以使用.NET代码访问安全性机制对用户脚本进行沙箱检查,并确保它们仅具有用户要授予它们的那些权限。
从广义上讲,我的安全要求是:
我正在考虑尝试在C ++中做类似的事情,作为一种个人练习。显然,即使直接用Lua这样的脚本语言编写用户脚本,直接运行本机代码时,事情也会变得更加复杂。
我能想到的第一种方法是在脚本环境标准库函数中插入我自己的钩子。例如,如果脚本语言是Lua,则不是正常地公开io.open
,而是必须公开一个包装器,该包装器在将参数传递给原始实现之前会根据脚本的权限检查参数。
我对这种方法的担心是,它会大大增加负责安全性的我自己的代码量,因此会增加我自己编写的潜在安全性漏洞。换句话说,当使用.NET CAS时,我可以相信Microsoft在沙箱代码方面做得很好,而不必信任我自己的沙箱代码。
我不知道有没有其他选择?