Definition of the safe levels
$SAFE >= 1
-
- The environment variables
RUBYLIB and RUBYOPT are not processed, and the current directory is not added to the path.
- The command-line options
-e , -i , -I , -r , -s , -S , and -x are not allowed.
- Can't start processes from
$PATH if any directory in it is world-writable.
- Can't manipulate or chroot to a directory whose name is a tainted string.
- Can't glob tainted strings.
- Can't eval tainted strings.
- Can't load or require a file whose name is a tainted string.
- Can't manipulate or query the status of a file or pipe whose name is a tainted string.
- Can't execute a system command or exec a program from a tainted string.
- Can't pass
trap a tainted string.
$SAFE >= 2
-
- Can't change, make, or remove directories, or use chroot.
- Can't load a file from a world-writable directory.
- Can't load a file from a tainted filename starting with ~.
- Can't use
File#chmod , File#chown , File#lstat , File.stat , File#truncate , File.umask , File#flock , IO#ioctl , IO#stat , Kernel#fork , Kernel#syscall , Kernel#trap . Process::setpgid , Process::setsid , Process::setpriority , or Process::egid= .
- Can't handle signals using
trap .
$SAFE >= 3
-
- All objects are created tainted.
- Can't untaint objects.
$SAFE >= 4
-
- Can't modify a nontainted array, hash, or string.
- Can't modify a global variable.
- Can't access instance variables of nontainted objects.
- Can't change an environment variable.
- Can't close or reopen nontainted files.
- Can't freeze nontainted objects.
- Can't change visibility of methods (private/public/protected).
- Can't make an alias in a nontainted class or module.
- Can't get meta information (such as method or variable lists).
- Can't define, redefine, remove, or undef a method in a nontainted class or module.
- Can't modify
Object .
- Can't remove instance variables or constants from nontainted objects.
- Can't manipulate threads, terminate a thread other than the current, or set
abort_on_exception .
- Can't have thread local variables.
- Can't raise an exception in a thread with a lower
$SAFE value.
- Can't move threads between ThreadGroups.
- Can't invoke
exit , exit! , or abort .
- Can load only wrapped files, and can't include modules in nontainted classes and modules.
- Can't convert symbol identifiers to object references.
- Can't write to files or pipes.
- Can't use
autoload .
- Can't taint objects.
|