Как разрешить доступ только к некоторым конкретным классам 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
Другие вопросы по тегам