Почему я получаю «Небезопасную операцию« запись »на уровне 4» при песочнице кода? - PullRequest
2 голосов
/ 04 марта 2010

У меня есть следующий код Ruby:

Testcase.rb:

filename = "/absolute/path/to/Untrusted.rb"
thread = Thread.new do
  $SAFE = 4
  Kernel::load(filename, true)
end
thread.join

Untrusted.rb

#Untrusted code
puts "Untrusted!"

Однако я получаю сообщение об ошибке при попытке запустить Testcase.rb:

/Volumes/Data/Users/mike/Desktop/Testcase.rb:4:in `write': Insecure operation `write' at level 4 (SecurityError)
    from /Volumes/Data/Users/mike/Desktop/Testcase.rb:7:in `join'
    from /Volumes/Data/Users/mike/Desktop/Testcase.rb:7

Удаление $SAFE=4 решает проблему, но я хочу иметь возможность безопасно выполнять ненадежный код. Любые идеи о том, почему это не работает?

Ответы [ 2 ]

2 голосов
/ 04 марта 2010

Я попробовал ваш код и получил тот же результат, что и вы. Затем я изменил уровень $ SAFE на 3 и получил это предупреждение:

Insecure world writable dir /tmp in LOAD_PATH, mode 041777

Я переместил загружаемый файл из / tmp в каталог, который не доступен для записи всем пользователям, и предупреждение исчезло. Изменение уровня $ SAFE до 4 сработало.

Итак, попробуйте убедиться, что каталог загруженного файла не доступен для записи. Также попробуйте более низкий безопасный уровень и посмотрите, получите ли вы полезное предупреждение.

0 голосов
/ 04 марта 2010

Если вы работаете в «песочнице», она не позволяет запускать небезопасный код, потому что «песочница» имеет свою цель - удержать вас от выполнения действий, которые запрещены или небезопасны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...