2012-03-29 2 views
5

Oauth2 서블릿을 사용하여 Facebook 및 Google 계정을 성공적으로 인증 할 수 있습니다. 타이머와 세션 쿠키가있는 상태를 사용하여 이것이 실제로 합법적 인 Oauth 콜백인지 확인하려고합니다.OAuth 2 콜백에서 HTTP Referer를 확인해야합니까?

  1. 또한 HTTP Referer 헤더를 검사하여 공급자의 OAuth 페이지에서 리디렉션되었는지 확인하면 어떤 이점이 있습니까?

  2. 이점이 없다면 HTTP Referer 필드를 검사해도 문제가 발생할 수 있습니까?

+0

'HTTP Referer'와 같은 헤더는 easly simulate 일 수 있습니다. 사용자는 모든 헤더를 보낼 수 있습니다. – safarov

+1

나는 IP 주소가 사용자의 주소가 아닐 것이라는 것을 당신이 요청한 소스 – safarov

+0

을 확인하기 위해 IP 주소를 확인할 수 있다고 생각한다. – necromancer

답변

4

대답은 :

No, you shouldn't use it, and there is NO valuable benefit of doing it. 

인증 서버는 또한이 매우 알고 있습니다. 그리고 here가 언급되었다. mailing list of OAuth-WG에서

: URL 페이지를 즉시 URL에 인증 코드를받은 후 신뢰할 수있는 페이지로 리디렉션해야한다

콜백. 이렇게하면 권한 부여 코드가 브라우저 기록에 남아 있거나 우연히 리퍼러 헤더에 누출되는 것을 방지 할 수 있습니다.매개 변수 상태 인 이유

  • 당신은 CSRF에 대한 걱정이있는 경우, 권한 부여의 출처를 확인하는 기술로 HTTP 리퍼러를 사용해서는 안가, 그건 (이 당신이있어 소리 사용).

  • oauth2 프로토콜의 특정 보안 문제에 대해 걱정할 경우 full section inside the draft이 있습니다.

  • 다른 보안 고려 사항에 대해 걱정할 경우 this is the source. 상태 :

난 당신이 PARAM 주위의 모든 검증을 구현하는 모든 노력을주는 것이 좋습니다.

편집 :

질문 you are really answered 자신의 질문의 뉘앙스를 읽은 후. 두 경우 모두 쿠키 (아마도 HTML5 로컬 저장소)를 사용하는 것이 지금까지 가장 잘 알고있는 해결책입니다.

  • 첫 번째 뉘앙스는 CSRF에 관한 가능한 가능한 대책 중 하나는 Checking the HTTP Referer header이며,이 이미 addressed in the protocol했다.

  • 두 번째 뉘앙스는 확실하지 않지만 Extension Grant의 경우 일 수 있습니다. 이는 사용자가 "auth proxy requester"(과 동일)로 작업 할 수 있다고 생각하기 때문입니다. state 매개 변수를 사용하고 있기 때문에

+0

안녕하세요, 대단한 답변에 감사드립니다. 내 자신의 대답을보고 아마도 내 대답을 이야기 해줄 수 있겠습니까? 나는 세션 고정 (그리고 아마도 다른 사용자들)이라는 용어를 알지 못합니다. 나는 당신이 내 자신의 대답에있는 이슈를 다루고 있다고 느낍니다. 따라서 조금 더 설명을 추가 할 수 있다면 당신의 대답을 받아들이고 싶습니다. 감사! :) – necromancer

+0

나는 그것이 곧 만료되므로 현상금을 수여하고있다. 나는 당신이 대답을 편집 (아마도 내 병합) 할 수 있기를 바랍니다. 그래서 그것을 받아 들일 수도 있습니다. 감사! – necromancer

2

HTTP 리퍼러를 확인하지 마십시오. "상태"매개 변수는 CSRF (cross-site request forgery) 공격으로부터 방어하기 위해 approach OAuth 2.0 defines입니다.

새로운 오라일리 책 Getting Started with OAuth 2.0을 Ryan Boyd가보고 싶을 수도 있습니다. 이 문서는 관련 보안 고려 사항을 설명합니다.

+0

네, 매우 견고한 검사를 위해 상태를 사용하고 있습니다. RFC에 대한 링크를 주셔서 감사합니다. (그러나 엔지니어는 인증을 위해서 Oauth를 사용하는 것처럼 단순한 것을 위해 O'Reilly 책을 참조하기가 다소 불쾌합니다.) – necromancer

+0

사과; 나는 기분을 상하게하려고하지 않았다! 솔직히 말해서 나는 그 책이 정말로 가치있는 주된 이유라고 생각했습니다. =) (그것과 그것의 새로운, 그렇게 널리 알려지지 않았다.) 나는 그것과 아무 상관도 없다. 그냥 좋은 읽을 거리. – Will

+0

아, 제발 사과하지 마세요! 나는 그저 유머러스 해졌을뿐입니다.) 그 책이 소중하다는 것을 알았 기 때문에 기쁩니다. 그리고 많은 사람들이 훌륭한 책을 자세히 읽음으로써 도움이 될 것입니다. 복잡한 클라이언트, 서버 + 브라우저 통신 워크 플로, 장치 및 응용 프로그램은 말할 것도없고 귀중한 정보를 가지고 있다고 확신합니다. 덮개에있는 훌륭한 동물과 함께 그것은 환경 친화적 인 책이기도합니다. (그리고 이것을 읽으면 첫 번째 upvote를 얻습니다;) – necromancer

6

번호

  1. 내가 악의적 인 공격자로 원하는 헤더를 시뮬레이션 할 수 있습니다. http://cia.fbi.gov.vpn/uber1337h4x에서 오는 것처럼 보이게 할 수 있습니다. 이것은 분명하고 잘 알려져 있습니다. HTTPS에서 오는

  2. 모든 페이지는 RFC2616 sec15 당으로 참조 헤더를 전송하지 않습니다

    의뢰 한 페이지로 전송 된 경우 (보안되지 않은) HTTP 요청에 리퍼러 헤더 필드를 포함해서는 안

    클라이언트 안전한 프로토콜. RFC2616 sec15에 따라

  3. 휴식의 유용성 : 링크의 출처가 개인적인 정보가있을이거나 개인적인 정보 출처를 밝힐 수

    때문에 강력하게 사용자가 여부를 선택할 수 있습니다 것이 좋습니다 또는 Referer 필드가 전송되지 않습니다. 한마디로

, 당신은 더 큰 보안을 제공하지 않습니다. 보안이 매우 안전하지 않은 전송 프로토콜을 검사하는 것이 아니라 OAuth 계층에 있습니다. 또한 유용성을 깨뜨릴 수 있습니다.

하지 마십시오.

+0

확실히 더 큰 보안. 사실, 나는 내 질문에 보안이라는 말을 언급하지 않았다. 그냥 "이익". 나는 보안을 위해 국가를 사용하고 있는데 충분하다. 나는 DoS 공격에 비추어 "합법적 인"이라는 단어를 사용했다. 그렇습니다. 위조 될 수 있습니다. https에 리퍼러가 없으면 주류 공급자가 리퍼러를 반환하지 않을 것입니다. 본질적으로 내용이 다른 답변과 같기 때문에 나는 이전 답변을 받아들이는 경향이 더 큽니다. 그러나, 당신은 상관없이 내 upvote 있습니다. – necromancer

+0

@agksmehx 어떤 유익한 정보가 리퍼러 헤더에서 상태 매개 변수가 이미 존재하지 않는다고 전달할 수 있습니까? – Esailija

+0

@Esailija, 내 대답을 참조하십시오. – necromancer

-1

일반 보안 문제의 관심사가 아니었다. 내가 생각했던

주요 관심사였다 :

그것은 후보 토큰을 제시 돌아오고 내 애플 페이스 북으로 전송 같은 브라우저가 있는지 여부
  1. ?
  2. 에이전트 (브라우저와 유사한 에이전트) 또는 에이전트가 반복적으로 OAuth 요청을 수행하고 잘못된 OAuth 토큰을 제공하는지 여부로 인해 내 앱이 Facebook에 반복적으로 연락하여 불량 토큰으로 인해 Facebook에 잠재적으로 불리한 취급을 초래할 수 있습니다.

첫 번째 문제에 대한 유일한 해결책은 state을 사용하는 것 외에도 쿠키를 설정하는 것입니다. referer은 대부분의 제공 업체가 https를 사용하지 않는 경우 도움이됩니다.

두 번째 문제점에는 뉘앙스가 있습니다. 잘못 행동하는 에이전트는 악의적 인 엔티티에 의해 직접 제어 될 필요는 없습니다. 간접적 인 수단 (인기있는 도용 웹 사이트, 사회 공학)을 통해 리디렉션되는 일반 사용자 브라우저 일 수 있습니다.

뉘앙스 때문에 referer 헤더가 위조되지 않을 가능성이 있습니다. 그러나 https는 의미있는 이점을 배제합니다.

POST에서 쿠키를 설정하면 제 3 자 웹 사이트가 쿠키를 설정하지 못하게되어 사용자를 엄청나게 리디렉션하는 해킹 된 웹 사이트로 인해 잘못된 OAuth 응답으로 넘칠 수 없으므로 쿠키가 두 번째 경우에도 도움이됩니다. 너 OAuth.

이것은 명확한 대답 (또는 질문)이 아니지만이 질문 뒤에 뉘앙스가 표시되기를 바랍니다.

관련 문제