Как разрешить доступ только к некоторым конкретным классам ruby?
Я пытаюсь использовать jruby в качестве языка сценариев (для написания квестов для игры), но мне нужно предотвратить использование потенциально опасных классов, таких как Dir
, Process
или же RubyVM
,
Я уже нашел громоздкий способ занести в черный список отдельные методы и классы:
class Dir
def Dir.[]
end
def Dir.chdir
end
def Dir.chroot
end
def Dir.delete
end
def Dir.entries
end
def Dir.exist?
end
def Dir.exists?
end
def Dir.foreach
end
def Dir.getwd
end
def Dir.glob
end
def Dir.home
end
def Dir.mkdir
end
def Dir.initialitze
end
def Dir.open
end
def Dir.pwd
end
def Dir.rmdir
end
def Dir.unlink
end
def close
end
def each
end
def fileno
end
def inspect
end
def path
end
def pos
end
def read
end
def rewind
end
def seek
end
def tell
end
def to_path
end
end
Но я действительно надеюсь, что есть гораздо более простой способ выполнить эту задачу или даже лучше белый список классов, которые должны быть в состоянии использовать.
1 ответ
Решение
Вы можете просто сделать определенные методы приватными:
class Dir
private :close, :each ....
private_class_method :glob, :home ...
end
Или вы можете отменить определение всего класса (плохая идея для меня):
Object.send(:remove_const, :Dir)
Или удалить методы (также плохая идея удалить методы из базового класса Ruby):
class Dir
remove_method :close, :each ....
end