2016-04-27 79 views
2

我有一個做在application.rb中application.rb中覆蓋基礎紅寶石

Digest::MD5 = Digest::SHA256 

這反過來以下一個RoR應用程序可確保每次有人調用Digest::MD5,它將代替更換一個結果Digest::SHA256。我相信這會產生一些意想不到的後果,比如難以調試的運行時問題。這種方法還有其他選擇嗎?或者這聽起來不對?

回答

2

對我來說看起來很危險。我知道想要使用MD5以上的SHA256,但它們絕對不能互操作,並且對於某些依賴關係可能會使用MD5有一定的良性用途。

相反,如果使用MD5,爲什麼不使用繞別名發出警告?

class Digest::MD5 
    alias :orig_hexencode :hexencode 

    def hexencode(str) 
    Rails.logger.warn("Hexencode called #{}") 
    puts caller 

    orig_hexencode(str) 
    end 
end 
+0

所以雖然警告確實有幫助,但如果MD5在操作系統級別被阻塞,並因此在調用任何時候會產生錯誤,因此會停止應用程序? – Woot4Moo

+0

我不認爲Digest :: MD5可以在操作系統級別被阻塞嗎?該實現應該特定於Ruby,而不是操作系統。 –

+0

它可以,如果你執行FIPS – Woot4Moo