背景
我正在构建一个Rails应用程序,允许用户上传将在服务器上执行的自定义JavaScript。此自定义脚本用于定义API响应上的字段。下面的列表描述事件的顺序。
下面的方法用于脚本执行。script_body包含用户的自定义JavaScript,并作为属于用户的对象上的文本字段保存在DB中。
def run_script
begin
Timeout::timeout(2) { script_output = ExecJS.exec(script_body).to_s }
rescue => e
logger.info "Script failed: #{e.message}"
script_output = "(Script failed with the following error: #{e})"
end
end问题
我想知道如何最好地对JS脚本的执行进行沙箱,以减轻在服务器上执行用户脚本的安全性问题。我想知道以下建议的方法:
其他信息
我试图在Ruby应用程序中找到一些沙箱JS执行的例子,但没有发现多少。我看过以下创业板(https://github.com/tario/shikashi)。但是,这似乎只是Ruby代码的沙箱。我担心我会为ExecJS.exec提供执行特权,这样JS就可以做它想做的任何事情。我不确定这是不是最好的方法。
发布于 2016-12-22 16:15:49
也许你可以使用红宝石的$SAFE水平
https://stackoverflow.com/questions/41286208
复制相似问题