2016-12-19 11 views
0

Rails 4.2 앱에서 Devise 3.5를 사용하고 있습니다. 나는 모든 재고 전자 메일을 사용자 지정 HTML 전자 메일로 재정의했습니다. 전자 메일 배달 코드를 어떻게 설계했는지에 따라 전자 서식 파일은 reset_password_token과 같은 해시 된 버전의 토큰에 액세스 할 수 없습니다.unhashed 보내기 사용자 정의 이메일의 dev_ reset_password_token

내가 갖고있는 문제는 이메일 템플릿이 데이터베이스에 저장된 unhashed 토큰에만 액세스 할 수 있다는 것입니다. 내 이메일 템플릿에서 데이터베이스의 부끄럽지 않은 토큰을 사용해 보았지만 사용자가 링크를 클릭하면 Devise의 PasswordsController#updateresource_class.reset_password_by_token(resource_params)으로 전화합니다. Devise::Recoverable 그러면 토큰을 숨기고 사용자를 찾습니다. unhashed 토큰이 데이터베이스의 토큰과 일치하지 않기 때문에 실패합니다 (토큰이 이미 시작되지 않았기 때문에).

내 질문은 세 부분 :

  1. 무엇 같은 비밀번호 재설정 이메일로 이메일에 해시되지 않은 토큰을 전송의 보안에 미치는 영향은?
  2. 나는 치욕적이지 않은 토큰을 보내는 것이 좋지 않다고 생각합니다. 그렇다면 PasswordsController#create을 무시하여이 문제를 해결할 수 있도록 해시 된 및 해시되지 않은 토큰을 가로 채고 데이터베이스에 저장하여 내 메일러 코드에서 해시 토큰을 사용할 수 있도록 할 수 있습니까? 이 접근법을 시도하기 전에 내가 알아야 할 보안 함의가 있습니까?
  3. 데이터베이스에 저장하는 등의 해킹을 피할 수 있도록 이메일 템플릿을 렌더링하기 전에 해킹당한 토큰을 해싱 할 수있는 방법이 있습니까?

답변

0

귀하의 가정 사항이 잘못되었습니다. unhashed 토큰은 전자 메일로 보내는 것이 안전하지만 DB에 저장하는 것은 안전하지 않습니다. 이렇게하면 DB에 액세스 할 수있는 사람이 비밀번호 재설정 URL을 재구성 할 수 없게됩니다.

그래서 전자 메일에 해를 끼지 않는 토큰에 대한 액세스 권한 만 부여 할 수 있습니다. 더 자세한 설명은

는이 http://blog.plataformatec.com.br/2013/08/devise-3-1-now-with-more-secure-defaults/ 내가 볼

+0

에서 "저장소 데이터베이스에 토큰을 소화"를 참조하십시오, 그래서 해시되지 대 해시를 혼합하고 있습니다. 나는 아직도 같은 문제가있다. 단축 된 (unhashed) 토큰은 전자 메일에 있어야합니다. 왜냐하면 Devise가 해시를 해시하고 데이터베이스의 내용과 출력을 일치 시키려고하기 때문입니다. – ACIDSTEALTH

+0

참조로 링크 편집 됨 –

+0

뷰에서 '@ 토큰'으로 사용할 수 있어야하지만 재 디자인 한 점이있어 재 설계의 세부 사항을 모른 채'@token '을 얻을 수있는 방법을 말할 수는 없습니다 '를 당신이 필요로하는 범위에 넣으십시오. –