2016-04-20 3 views
2

J'essaie d'utiliser jruby comme langage de script (pour écrire des quêtes pour un jeu), mais je dois empêcher l'utilisation de classes potentiellement dangereuses comme Dir, Process ou RubyVM.Comment autoriser l'accès à certaines classes ruby ​​spécifiques?

je l'ai déjà trouvé une façon lourde à la liste noire des méthodes et des classes simples:

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 

Mais je l'espère vraiment qu'il ya un moyen beaucoup plus facile d'effectuer cette tâche ou mieux encore whitelist les classes qui devraient être en mesure de utilisation.

Répondre

4

Vous pouvez juste faire des méthodes spécifiques privé:

class Dir 
    private :close, :each .... 
    private_class_method :glob, :home ... 
end 

Ou vous pouvez annuler la définition classe entière (mauvaise idée pour moi):

Object.send(:remove_const, :Dir) 

ou supprimer des méthodes (aussi mauvaise idée de supprimer des méthodes de Ruby core class):

class Dir 
    remove_method :close, :each .... 
end 
+0

N'est-il pas possible de contourner cette prévention en utilisant la classe Dir \\ def Dir.workaround_pwd \ n Dir.pwd \ n fin \ n fin \ n' – seyfahni

+0

@seyfahni, je ne vous comprends pas, donnez svp l'explication complète de votre opinion en mettant à jour la réponse – Ilya

+0

Je pense juste qu'il y a une solution de contournement facile pour votre solution: [ Solution de contournement sur Pastebin] (https://pastebin.com/v0ssbHhg) – seyfahni