reset_password_token(invitation_token)을 덮어쓰는 Mac Sierra Safari에서!

3966 단어 SafaritokenRails

상황



비밀번호 재설정을 시도하는 token이 잘못되었다고 말하며 업데이트 할 수 없습니다.

클라이언트 환경



OS 버전: Mac Sierra 10.12.6
브라우저: Safari 11.0.1

서버 환경



OS : Red Hat Enterprise 6.2 (낡고 부끄러운)
DB: MySQL 5.5.13
언어 : ruby2.1 (이쪽도 낡고 부끄러운) Rails 4.1.0 (이것도 ry)

현상



Mac Chrome, Windows Edge, Mac Safari 10.1.X 등에서 확인하여 재현할 수 없었지만, 우연히 같은 버전으로 동작 확인했을 때 재현할 수 있었으므로, 재현 내용을 일부 캡쳐를 붙이면서 보고합니다 .
  • Safari 11.0.1을 사용하여 로그인하고 암호를 저장합니다.
  • 로그인 세션 시간 초과를 기다립니다.
  • 로그인이 필요한 페이지에 액세스하여 로그인 양식이 표시되고 로그인 양식에 로그인 ID와 암호가 입력되어 있는지 확인합니다.

  • 로그인 화면(Safari)

    ※ 캡처 하단에 표시되는 html은 Safari 개발 도구를 표시하고 요소를 표시합니다.
    4. 비밀번호 재설정으로 이동하여 비밀번호 재설정 이메일을 보내십시오 (캡처에서 비밀번호를 잊으신 분은 여기 링크)
    5. 이메일에 나열된 URL에서 사이트에 액세스합니다.

    비밀번호 재설정 화면(Safari)


    놀랍게도 input [name = "user [reset_password_token]"]의 값이 로그인 화면에서 autocomplete로 보완 된 계정 이름입니다.

    비밀번호 재설정 화면(Chrome)


    물론 Chrome에서는 토큰 값을 덮어 쓰지 않을 것입니다.

    대응책



    1. autocomplete=off 지정



    효과 없음


    2. 순서를 바꾸어 본다.



    효과 없음


    3. name 속성을 변경합니다. (user[reset_password_token] -> user[test])



    효과 없음


    4. name 속성을 변경합니다. (user[reset_password_token] -> reset_password_token)



    효과가 있습니다 (하지만 Rails를 이용하는 사이트 때문에 아마 누출없이 devise Gem을 이용하고 있기 때문에 대응이 어렵습니다.)


    5. reset_password_token을 두 개 설치한다.



    효과 있음(같은 이름의 파라미터가 2개 보내지지만, URL 파라미터는 후승이므로, 정상적으로 동작한다)


    6. type="text"로 설정하고 style="display:none;"을 지정합니다.



    효과 있음(이유는 모르지만 hidden 속성의 autocomplete=off는 효과가 없지만 text 속성의 autocomplete=off는 효과가 있는 모양)


    결론 : 위의 6가지 방법이 검토되어 키모이지만 5번을 선택하기로 했습니다.



    6번도 나쁘지는 않지만, 언제 어느 버젼에서, text 속성의 token도 덧쓰기될 가능성이 있는 것을 배려해, 안전한 것 같은 6번이 되었습니다.

    최종 결과 : 5번으로 릴리스 하려고 하면, 더 좋은 방법을 동료의 Y씨가 제안해 주었습니다.



    id 속성을 지우면 문제 없다고 생각해요.


    정말! ! ! ! ! ! id 속성을 지우면 값을 덮어쓰지 않습니다! ! ! !



    name 속성이 아니라 id 속성을 보고 덮어쓸 것인지, 과연.
    정말 공부가 되었다.

    좋은 웹페이지 즐겨찾기