0

file = File.new("encrypted.file", "r")復号化後に Ruby で要求したい暗号化ファイルがあります。ファイルの復号化、保存、要求、および削除を行いたくありません。

私が今していることは次のとおりです。

str=""
file.each do |line|
     str+=line
end#do

str = doSomeDecryption(str)

なんとかしたいと思いrequire strます。何か案は?eval(str)オプションではありません。それは本当に「必須」でなければなりません。

4

3 に答える 3

1

厳密に言えば、require はファイルをロードするのではなく、リソースをロードします。Kernel#require の適切なオーバーロードがあれば、ほとんど何でもできます。一部の人々は、open-uri を使用してリモート サーバーからコードをロードするバージョンを作成しました。これを純粋な Ruby で実装したい場合は、 を使用する必要がありますeval。その実装については、http_require (https://github.com/astrails/http_require) を参照してください。

これを拡張機能として実装したい場合は、潜在的な攻撃対象領域を減らすことができるかもしれませんが、それでもディスクへの保存またはeval. (厳密に言えば、現時点ではインタープリターでコードを見つけることができませんが、requireそれ自体は本質的にeval.

于 2012-12-07T18:30:34.950 に答える
0

すでにこれを行っているさまざまなライブラリがあります。

  • require自動的にGemsをアクティブ化するRubyGemsパッチ
  • OCRA、Crate、およびその仲間たちは、暗号化されたSQLiteデータベースなどrequireの列からロードするようにパッチを適用します。TEXT

彼らがこの問題にどのように取り組んでいるかをそこで見ることができます。

Ruby 2.0には、プロセスにフックするハンドラーを登録できるAPIがありrequireます。

于 2012-12-07T19:48:53.707 に答える
0

邪悪な評価はありませんか:)私はその使用をお勧めしません。

于 2012-12-07T16:17:59.617 に答える