2016-04-27 2 views
2

У меня есть приложение RoR, который делает следующее в своем application.rbApplication.rb переопределить базовый класс рубин

Digest::MD5 = Digest::SHA256 

Это, в свою очередь, гарантирует, что каждый раз, когда кто-то вызывает Digest::MD5, что вместо этого заменить результат с Digest::SHA256. Я считаю, что это приведет к некоторым непредвиденным последствиям, таким как проблемы времени выполнения, которые трудно отлаживать. Есть ли альтернатива этому подходу или этот звук?

ответ

2

Выглядит довольно опасно для меня. Я понимаю, что хочу использовать SHA256 по сравнению с MD5, но они определенно не совместимы, и, конечно же, для 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

Я не думаю, что дайджест :: MD5 может быть заблокирован на уровне ОС, не так ли? Реализация должна быть специфичной для Ruby, а не для ОС. –

+0

Это может быть, если вы применяете FIPS – Woot4Moo

Смежные вопросы