我有一个加密文件file = File.new("encrypted.file", "r")
,我想在解密后在Ruby中要求。我不想解密,保存,要求和删除文件。
我现在所做的是:
str=""
file.each do |line|
str+=line
end#do
str = doSomeDecryption(str)
我想以某种方式require str
。有任何想法吗? eval(str)
不是一种选择;它确实必须是“必需的”。
答案 0 :(得分:1)
严格来说,require不加载文件,加载资源;正确重载内核#require,你几乎可以做任何事情。有些人制作了使用open-uri从远程服务器加载代码的版本。如果要在纯Ruby中实现它,则需要使用eval
。有关其实现,请参见http_require(https://github.com/astrails/http_require)。
如果你想将它作为一个扩展来实现,你可以减少潜在的攻击面积,但是你仍然要实现save-to-disk-then-require或{{1 }}。 (严格来说,虽然我目前无法在解释器中找到代码,eval
本身基本上会执行require
。)
答案 1 :(得分:0)
不存在邪恶的评估:) 我不建议使用它。
答案 2 :(得分:0)
有各种各样的图书馆已经这样做了:
require
以自动激活Gems require
从加密的SQLite数据库中的TEXT
列加载等。您可以查看他们如何处理此问题。
Ruby 2.0将有一个API,允许您注册处理程序以挂钩require
进程。