2013-01-08 3 views
0

내 사이트의 페이스 북 로그인을 고려 중입니다. 페이스 북 기반 인증을 기반으로 사용자는 사이트에 로그인됩니다. 페이스 북의 로그인 상태와 관계없이 사이트에서 로그 아웃 할 때까지 계속 사용합니다. 대부분의 다른 사이트와 마찬가지입니다.Facebook의 클라이언트 측 인증은 충분히 안전합니까?

FB의 클라이언트 측 로그인 방법을 살펴보면 fbsr_ {app_id} 쿠키에서받은 signed_request 데이터를 기반으로합니다. 그리고 FB 요청은 인증 요청의 유효성을 확인하기 위해 10 분 이내에 유효한 short-lived access_token을 교환해야합니다. (이 10 분은 FB가 보안 허점을 최소화하는 최선의 방법 인 것 같습니다.)

그러나이 10 분 내에 누군가 다른 사람이 쿠키를 복사 할 수 있으며 많은 어려움없이 성공적으로 로그인하려고 시도 할 수 있습니다. 희생자. 이것은 나에게 문제가되는 다음과 같은 질문을하고 싶습니다 :

  1. 오전 내가 FB의 클라이언트 측 인증의 보안 측면에 대한 여기서 뭔가 누락하거나 사실이 약점이있다?

  2. 틈새를 막기 위해 구현할 때 할 수있는 일이 있습니까? 아니면 FB의 서버 측 인증으로 이동합니까?

+1

당신이 HTTPS를 사용한다고 가정 할 때, 보안 구멍이 악용되기가 매우 어렵다는 것이 좋습니다. 공격자는 본질적으로 사용자의 컴퓨터에 앉아 있어야합니다. 그러나 사용자가 로그 아웃하지 않으면 "공격자"가 항상이를 수행 할 수 있습니다. 아니면 당신이 착취 당할 수있는 다른 방법이 있습니까? – Madbreaks

+0

OAUTH 2.0 로그인 워크 플로를보고 있습니까? – Madbreaks

+0

@Madbreaks 예, oauth2. 그리고 현재 HTTPS를 사용하지 않습니다. 피해자의 컴퓨터에 있어야 할 필요는 없습니다. 작업장에서는 항상 쿠키를 관리 할 수 ​​있습니다. 10 분 및 몇 가지 편리한 도구가 좋은 시간입니다. (글쎄, 난 여기에 보안과 편집증이 아니지만, 이해하려고 하고이 인증을위한 더 나은 옵션을 선택). – Ethan

답변

1

서버 측 플로우를 사용하든, 클라이언트 측 플로우를 사용하든 상관없이 올바르게 사용하면 둘 다 안전합니다. 언급했듯이 비 SSL 기반 사이트에서 쿠키 옵션을 사용하는 것은 실제로 취약점이지만 이것이 Facebook에서 관리하지 않는 것입니다.

이 공격 벡터를 피하려면 cookie 옵션을 사용하지 말고 선택한 메커니즘 (예 : SSL을 통한 XHR)을 사용하여 프론트 엔드의 서명 된 요청을 백엔드로 전달하십시오. 이렇게하려면 관련 이벤트에 가입하기 만하면 처리기가 서명 된 요청을 응답의 일부로 호출합니다.

변조 된 또는 잘못된 사용을 피하기 위해 signed_request는 항상 서버에서 유효성을 검사해야합니다. signed_request에는 또한 issued_at 시간이 포함되어 있으며 지난 10 분 내에 유효성을 검사해야합니다. (FB의 사용자 ID의 경우, 함께 제공되는 user_id를 사용하십시오).

+0

'코드'의 수명이 10 분이면 fb의 페이스 북의 약점이나 컨트롤러가 아닙니다. 그러나 페이 스북 (facebook)은 클라이언트 측 로그인 방식으로 보안을 확실히 높일 수 있습니다. – Ethan

+0

fbsr 쿠키를 만들지 말 것을 제안합니다. 즉, 항상 cookie : false로 실행하십시오. 다른 백엔드 처리기 (로그인 금지)가 작동하도록 signed_request를 사용하지 않는다면 메모리 풋 프린트를 유발하는 서버 캐시 항목의 시간 초과 기간을 늘리거나 사용자가 자주 로그인 과정을 거치도록하여 사용자 좌절감을 높이고 핸들러는 백엔드와의 투명한 상호 작용으로 후속 페이지 방문시 아약스 게시물을 보유해야합니다. 이 접근 방식의 비용은 로그인 약점을 해결하는 것 이상의 것입니다. – Ethan

+0

@SeanKinsley signed_request 처리에 대한 설명에서 상세 검색이 필요했습니다. 귀하의 게시물 (마지막 단락)을 편집했습니다. – Ethan

관련 문제