2009-09-18 21 views
3

我想要的數據結構加載到一個Ruby腳本映射字符串到三倍包含正則表達式,腳本和原子的某種組合。它從加載的文件需要是可寫的。安全裝載散在Ruby中

目前我正在寫包含一個Ruby散列文件,加載,作爲一個字符串,並調用eval。 IE瀏覽器。

數據文件

{ "key1" => [ /pattern/, "text", "text" ], 
    "key2" => [ "text2", :nil, "text3" ], 
    "key3" => [ "text4", /pattern2/, /pattern3/ ] } 

腳本

def get_mapping 
    f = File.new path 
    return eval(f.read()) 
end 

這是罰款和作品,但感覺(我)就像一個黑客攻擊的一位,(二)不安全。所以我很想知道:有沒有更好的方法來做到這一點?

這幾乎是JSON,但我不認爲,可以輕鬆處理原子或正則表達式。文件格式可以改變,因爲它保持合理的人類可讀/可寫。

回答

5

你應該真的使用YAML這種東西,你的代碼是非常危險的。

YAML supports regexps,是相當擴展。

+0

風險可以通過大部分環境來緩解風險,雖然是的,但總的來說,我同意。 YAML幾乎是它的樣子,只是希望我不必去「!ruby/regexp」。 – 2009-09-18 10:09:40

1

Hash es和Array s可以是marshalled。如果您想將程序中的數據存儲在文件中,這可能會有所幫助。如果您有興趣讓用戶有機會在外部文件中提供數據,您可以查看YAML