2010-03-10 3 views
2

내 사이트에 Open ID 기반 인증 시스템이 있습니다.요청이 완료되면 내 openid.op_endpoint를 확인하는 방법

때때로 사용자 계정이 [email protected]에 등록해야합니다 그들은이 경우에 나는 자동으로 계정을 연결하고 그들을 로그인하고 싶습니다 구글 개방 ID 공급자 https://www.google.com/accounts/o8/id를 사용하여 로그인을 시도합니다.

을 할 때 과정 내가 어딘가에서 그 페이팔을 얻을 openid.op_endpoint=https://www.google.com/accounts/o8/id 주장.

내 질문 :

  • 내가 올바른 것으로 openid.op_endpoint을 믿을 수 있습니까? 악의적 인 openid 제공 업체가이를 스푸핑 할 수 있습니까?

그림를 들어, 자신의 오픈 ID 공급자로 http://evil.org에있는 사람의 유형을 말할 어떻게 든 openid.op_endpoint이 구글 주장이 다시 요청을 받고 끝낼 수 있습니다? 유효성을 검사하기 위해 nonce에 대해 추가 정보를 저장해야합니까?

사양은 kind of tricky

답변

1

Yes (예)를 이해하는 것입니다. openid.op_endpoint을 포함하여 전신을 통해 얻는 것을 신뢰하면 안됩니다. 하지만 보안 OpenID 라이브러리를 사용하는 경우이 매개 변수는 사용자가 사이트에 로그인 할 수있게되기 전에 확인됩니다. OpenID 스펙은 실제로이 매개 변수와 다른 매개 변수를 검증 할 수있는 방법을 제공하며, 인증 프로토콜이 쓸모없는 것보다 나쁘다.

그래서 라이브러리가 괜찮은지 확인하십시오. 그렇다면 예, openid.op_endpoint 매개 변수를 신뢰하십시오. 하지만 OpenID 메시지를 게시 할 수 있고 쿼리 문자열에 매개 변수가 표시되지 않으므로 쿼리 문자열에서 직접 얻은 것은 아닙니다. 더욱이이 경우 쿼리 문자열을 검사하는 경우 공격자가 쿼리 문자열에 해당 매개 변수를 추가하고 라이브러리 요구 사항을 준수하면서 속일 수있는 보안 허점까지 스스로를 열어 놓았을 것입니다. 따라서 OP endpoint가 무엇인지 알아 내기 위해 라이브러리가 노출하는 API를 사용하는 것이 가장 좋습니다.

이러한 방식으로 계정을 연결하는 한, Google은 사용자가 실제로 제어하는 ​​것으로 알고있는 이메일 주소 만 보내기 때문에 이것은 좋은 접근 방법입니다. 사용자가 이미 이메일 확인 단계를 거치도록 요구했다면 계정을 연결하는 것이 안전합니다. 그러나 사용자의 이메일 주소가 확인되지 않은 경우이 경기를 기반으로 계정을 연결하면 안되며 다른 사람의 이메일 주소가있는 계정을 만들어 다른 사용자의 계정을 도용 한 다음 기다릴 수 있습니다. OpenID를 사용하여 로그인하면 자신의 계정으로 들어갈 수 있습니다.

+0

확장 된 질문보기 –

+1

안녕하세요. 묘사하는 시나리오는 공격자가 확실히 만들 수 있습니다. 그러나 올바르게 구현 된 OpenID RP는 속지 않습니다. RP가 다음과 같은 공격에 취약하지 않다는 것을 확인하는 일련의 테스트가 있습니다. http://test-id.org/RP/VerifyAssertionDiscovery.aspx –

관련 문제