我正在构建一个Ruby on 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执行的例子,并且找不到多少。我查看了以下gem(https://github.com/tario/shikashi)。但是,这似乎只是Ruby代码的沙箱。我担心我会为ExecJS.exec提供执行权限,然后JS就可以做任何想做的事情。我不确定这是最好的方法。