2013-12-10 3 views
1

레일스로 애플리케이션을 구축 중이며 시간 추적 응용 프로그램 인 Harvest에서 타임 쉬트를 가져옵니다. harvested이라는 API 래퍼를 사용하고 있습니다. API와 인터페이스 할 수 있으려면 하위 도메인, 사용자 이름 및 비밀번호를 제공해야합니다.외부 응용 프로그램의 사용자 암호를 안전하게 저장하는 방법은 무엇입니까?

지금 당장 암호를 일반 문자열로 저장하고 암호화를 수행하지 않았습니다. DB에 저장하기 전에 암호화하고 싶습니다. 저장하기 전에 암호를 암호화하면 Harvester API로 인증 할 때 암호화 된 암호를 계속 사용할 수 있습니까?

+2

그렇게하지 마십시오. 대신 OAuth를 사용하십시오. https://github.com/harvesthq/api/blob/master/Authentication/OAuth%202.0.md – SLaks

+2

비밀번호를 일반 텍스트로 저장하지 마십시오! 이제까지! – phoet

+0

그것이 내가 어떻게해야 하는지를 묻는 이유입니다. 앱은 여전히 ​​프로덕션 환경에 있지 않으므로 아직 문제가되어서는 안됩니다. – Gjaldon

답변

2

OAuth가 이러한 이유로 존재합니다. 일반 텍스트를 저장하는 것은 분명히 나쁜 생각이지만 암호화 된 내용을 저장하면 암호를 해독하는 것이 좋지 않습니다.

현대적인 암호 흐름은 단방향 암호화를 사용합니다. 즉, 암호를 암호화 한 다음 데이터베이스에서 이미 값을 암호화 한 과 비교합니다. 이렇게하면 쉽게 암호화 할 수 있지만 본질적으로 암호를 해독 할 수없는 알고리즘을 사용할 수 있습니다. 응용 프로그램이 데이터베이스 필드를 쉽게 해독 할 수있는 알고리즘을 사용하면 침입자도 동일한 작업을 수행 할 수 있습니다.

단방향 흐름 (암호화 만 해당)을 사용하면 사용자가 암호화 된 비밀번호를 보류하더라도 유효성을 테스트하기 전에 비밀번호 상자에 입력 한 내용이 다시 암호화를 통과하기 때문에 사용할 수 없습니다.

TL; DR OAuth를 사용하여 다른 사람이 지적했듯이 : https://github.com/harvesthq/api/blob/master/Authentication/OAuth%202.0.md

+0

제안에 감사드립니다, 타일러. 나는 이것을 다른 방식으로 해결했다. Harvester API가 기대했던 auth_string으로 비밀번호를 암호화했습니다. 나는 사용자 이름 대신에 auth_string과 암호화되지 않은 패스워드를 전달할 수 있도록 내가 사용했던 보석을 원숭이 패치했다. – Gjaldon

관련 문제