2011-11-09 2 views
1

가능한 중복 저장하는 방법 :
What is the best way to store password in database when API call requires sending of password in plain text?데이터베이스에 암호

나는 현재하고 맛있는, Zootool와 같이 웹에서 많은 서비스와 통합 웹 사이트를 짓고 있어요 곧. 이러한 서비스 중 일부는 OAuth를 사용하여 안전하게 연결할 수 있습니다. Delicious와 같은 다른 사이트에서는 HTTP Auth를 사용하여 통신하도록합니다.

이 말은 유감스럽게도 암호를 일반 텍스트로 되돌릴 수있는 방법으로 암호를 저장해야한다는 의미입니다. 어쩌면 내 사이트에서 사용자의 암호 (해시)를 사용하여 암호화해도되지만, 암호를 변경하면 사용자가 다시 다양한 서비스에 로그인해야합니다.

우아한 솔루션에 대한 아이디어가 있습니까?

답변

0

사용자 암호 해시가 DB에서 명확하므로 동일한 문제가 발생합니다. 한 가지 해결책은 사이트 사용자 암호를 사용하여 타사 암호를 암호화하는 것입니다. 사용자가 암호를 변경하면 이전 암호와 새 암호를 묻습니다. 그런 다음 기존 암호로 타사 암호를 해독하고 새 암호로 암호화하십시오.

다른 변수의 세션에서 사용자의 암호를 일반 텍스트로 저장하는 경우에만 작동합니다.

이렇게하면 db에 일반 암호를 저장하지 않아도 메모리에 암호가 생깁니다.

+0

그러나 이것은 사용자가 새 서비스를 추가 할 때마다 사이트 암호를 입력해야한다는 것을 의미합니다. –

+0

제 제안은 사용자 암호를 RAM에 저장하는 것입니다 (예 : 루비 변수). DB의 어느 곳이라도 저장하면 사용자의 비 암호화 된 암호는 DB의 다른 암호를 암호화하는 데 거의 쓸모가 없습니다. – Paolo

0

데이터를 암호화하고 해독합니다. 예를 들어, buildin mysql aes/des 메소드를 사용합니다.

데이터베이스에 키를 저장하지 않았는지 확인하십시오.

0

확인은 Mongoid에 대해 다음 클래스를 만들었 :

class User 
    include Mongoid::Document 

    field :password, type: EncryptedString 
end 

우려 :

class EncryptedString < String 
    include Mongoid::Fields::Serializable 

    def deserialize(value) 
    Gibberish::AES.new(ENV['AES_KEY']).decrypt(value) 
    end 

    def serialize(value) 
    Gibberish::AES.new(ENV['AES_KEY']).encrypt(value) 
    end 
end 

내 모델 코드는 다음과 같이 보입니다?

+0

은 mongoid 3.0에서 작동하지 않습니다. – Orlando

관련 문제