讨厌的事情用户在服务器中提供的ruby代码可以做到

时间:2010-05-17 11:10:03

标签: ruby security

我想在服务器中运行用户提供的ruby代码,可能会发生哪些可能令人讨厌的事情?我的意思是删除文件等等。你能给我更多例子吗?

提前致谢!

3 个答案:

答案 0 :(得分:8)

Ruby允许您设置一个$SAFE全局变量,该变量将准确确定允许的污染代码。请在Locking Ruby in the Safe中了解详情。

换句话说,这是关于$SAFE

效果的表格
  

$ SAFE约束

     

0不检查是否使用了外部提供的(污染的)数据。这是Ruby的默认模式。

     

> = 1 Ruby不允许通过潜在的危险操作使用受污染的数据。

     

> = 2 Ruby禁止从全局可写位置加载程序文件。

     

> = 3所有新创建的对象都被视为污染。

     

> = 4 Ruby有效地将正在运行的程序分为两部分。未着色的对象可能无法修改。通常,这将用于创建沙箱:程序使用较低的$SAFE级别设置环境,然后将$SAFE重置为4以防止对该环境进行后续更改。

这是链接页面底部表格中的内容,它解释了每个$SAFE级别允许的受污染对象。由此,您可以轻松地推断Ruby代码可以执行哪些不良操作。

  

安全级别的定义

     

$ SAFE> = 1

     
      
  • 未处理环境变量RUBYLIB和RUBYOPT,并且当前目录未添加到路径中。
  •   
  • 不允许使用命令行选项-e,-i,-I,-r,-s,-S和-x。
  •   
  • 如果其中的任何目录是全局可写的,则无法从$ PATH启动进程。
  •   
  • 无法操作或chroot到名称为受污染字符串的目录。
  •   
  • 不能全球污染字符串。
  •   
  • 无法评估受污染的字符串。
  •   
  • 无法加载或要求名称为受污染字符串的文件。
  •   
  • 无法操纵或查询名称为受污染字符串的文件或管道的状态。
  •   
  • 无法执行系统命令或从受污染的字符串执行程序。
  •   
  • 无法通过捕获受污染的字符串。
  •   
     

$ SAFE> = 2

     
      
  • 无法更改,制作或删除目录,或使用chroot。
  •   
  • 无法从世界可写目录加载文件。
  •   
  • 无法从以〜。
  • 开头的受污染文件名加载文件   
  • 无法使用File#chmod,File#chown,File#lstat,File.stat,File#truncate,File.umask,File#flock,IO#ioctl,IO#stat,Kernel#fork,Kernel #syscall ,Kernel #track。 Process :: setpgid,Process :: setsid,Process :: setpriority或Process :: egid =。
  •   
  • 无法使用陷阱处理信号。
  •   
     

$ SAFE> = 3

     
      
  • 所有对象都被污染了。
  •   
  • 无法取消对象。
  •   
     

$ SAFE> = 4

     
      
  • 无法修改未着色的数组,散列或字符串。
  •   
  • 无法修改全局变量。
  •   
  • 无法访问未着色对象的实例变量。
  •   
  • 无法更改环境变量。
  •   
  • 无法关闭或重新打开未着色的文件。
  •   
  • 无法冻结未着色的物体。
  •   
  • 无法更改方法的可见性(私人/公共/受保护)。
  •   
  • 无法在未打印的类或模块中创建别名。
  •   
  • 无法获取元信息(例如方法或变量列表)。
  •   
  • 无法定义,重新定义,删除或取消未打印的类或模块中的方法。
  •   
  • 无法修改对象。
  •   
  • 无法从非着色对象中删除实例变量或常量。
  •   
  • 无法操纵线程,终止当前线程以外的线程,或设置abort_on_exception。
  •   
  • 不能有线程局部变量。
  •   
  • 无法在$ SAFE值较低的线程中引发异常。
  •   
  • 无法在ThreadGroup之间移动线程。
  •   
  • 无法调用exit,exit!或abort。
  •   
  • 只能加载包装的文件,并且不能在非打印的类和模块中包含模块。
  •   
  • 无法将符号标识符转换为对象引用。
  •   
  • 无法写入文件或管道。
  •   
  • 无法使用自动加载。
  •   
  • 无法玷污物品。
  •   

答案 1 :(得分:1)

您所有的基地都属于用户。

答案 2 :(得分:1)

如果你在普通的Ruby下运行,那么你现在的用户权限几乎可以做任何事情 - 所以写,删除和覆盖大多数文件等等。