停止R执行System或Shell命令

时间:2017-06-30 08:17:15

标签: r

我想禁用可以执行其他非R相关内容的命令,例如System(),Shell(),例如。

for (year in 2010:2915){
    system("calc")
}

在R中运行。

除了锁定用户执行以外的任何建议吗?

感谢

编辑:为了添加更多上下文,我们允许用户在我们的解决方案中创建R脚本,然后传递给R Engine执行,然后我们处理这些结果。

1 个答案:

答案 0 :(得分:2)

如果没有编辑R源代码以删除不需要的函数,这将是单调乏味且可能有点危险,我会覆盖这些函数:

# override system()
env <- as.environment("package:base")
unlockBinding("system", env) # bindings in the base R are write-protected
assign(
  "system",
  function(...){stop("This is a forbidden command!")},
  envir=env
)
lockBinding("system", env)

当用户运行system()时,这将提供以下内容:

  

&GT;系统()

     

system()中的错误:这是一个禁止的命令

为了使更改在每次启动R时生效,您可以按照这种方式覆盖任意数量的函数,将它们添加到(写保护的)"Rprofile.site" file中的.First()

.First <- function(){
  # code to override system() here
  # code to override shell() here
  # ...
}

请注意,这不会阻止恶意用户重新实施禁用功能。