我有一个加密文件file = File.new("encrypted.file", "r")
,我想在解密后在 Ruby 中使用它。我不想解密、保存、要求和删除文件。
我现在要做的是:
str=""
file.each do |line|
str+=line
end#do
str = doSomeDecryption(str)
我想以require str
某种方式。有任何想法吗?eval(str)
不是一种选择;它确实必须是“需要的”。
我有一个加密文件file = File.new("encrypted.file", "r")
,我想在解密后在 Ruby 中使用它。我不想解密、保存、要求和删除文件。
我现在要做的是:
str=""
file.each do |line|
str+=line
end#do
str = doSomeDecryption(str)
我想以require str
某种方式。有任何想法吗?eval(str)
不是一种选择;它确实必须是“需要的”。
严格来说,require 不是加载文件,而是加载资源;使用正确的 Kernel#require 重载,您几乎可以做任何事情。有些人制作了使用 open-uri 从远程服务器加载代码的版本。如果你想在纯 Ruby 中实现它,你需要使用eval
. 有关其实现,请参见 http_require (https://github.com/astrails/http_require)。
如果您想将此作为扩展来实现,您可能能够减少潜在的攻击面,但您仍将实现 save-to-disk-then-require 或eval
. (严格来说,虽然我现在无法在解释器中找到代码,但require
它本身本质上是一个eval
.)
是不是有一个邪恶的 eval :) 我不推荐使用它。
已经有各种库可以做到这一点:
require
自动激活 Gems 的RubyGems 补丁require
的列加载。TEXT
你可以在那里寻找他们如何解决这个问题。
Ruby 2.0 将有一个 API,允许您注册处理程序以挂钩到require
进程中。