2011-08-22 3 views
5

내 북마크릿에 사용자 로그인이 필요합니다. 다음은 아이디어입니다. 사용자 로그인을 위해 iframe을 만들고 a/c 정보를 보여줍니다. 하지만 서버에서 정보를 얻고 싶습니다. 예를 들어 사용자가 이미이 페이지를 내 서버에 추가했는지 여부를 알고 싶습니다. 그래서, 나는 아약스 전화를하고 싶다. 그러나 같은 기원 정책 때문에 나는 아약스로 할 수 없다. 그렇다면 iframe에서 정보를 얻으려면 어떻게해야합니까?북마크릿에서 인증하는 방법은 무엇입니까?

이야기는이 같은 것입니다 :

사용자 웹 -> 사용자가 북마크를 클릭 - 로그인 한 경우> ->은 버튼 '즐겨 찾기에 추가'쇼 -> 사용자가 버튼을 즐겨 찾기에 추가를 클릭, url이 서버에 제출되면 서버를 다시로드하십시오.

사용자 웹 -> 로그인하지 않은 경우 - -> 로그인 버튼을 보여 -> 이전

사용자 웹과 같은 흐름을 - -> 성공 로그인> 사용자가 북마크를 클릭> 사용자가 클릭 북마크 -> 로그인 한 경우 -> 웹 사이트가 이미 서버에 추가되었는지 확인 -> 즐겨 찾기 없음 버튼

볼 수 있듯이 iframe 만 로그인 한 사용자의 정보를 저장합니다.

+1

동일한 원본 정책이 iframe 내부에 영향을주지 않습니다. iirc. 상위 문서에 iframe을 추가하기 만하면됩니다. 북마크릿 js 코드 안에 부모 페이지의 모든 데이터를 iframe에 추가 한 다음 자신의 도메인에 아약스를 포함하여 원하는 방식으로 재생할 수 있습니다. – aero

답변

1

origin inheritance rules을 위반하여 수행중인 작업은 impossilbe입니다. 이것을 이렇게 생각하십시오. 이 fasion에서 다른 웹 사이트의 정보를 얻을 수 있다면 CSRF Tokens을 읽거나 Gmail 계정에서 누군가의 이메일을 읽을 수 있습니다.

CSRF와 관련하여 대부분의 로그인은 사용자 이름/비밀번호가있는 단순한 게시물입니다. 로그인에 필요한 POST 요청과 동일한 간단한 <form>을 웹 사이트에 구축하십시오. JavaScript를 사용하면 브라우저에서 새로 인증 된 세션으로 리디렉션하는 양식에서 .submit()으로 전화 할 수 있습니다. 실제로 이것이 POST based CSRF exploit works 인 방법입니다 (보통 CSRF 공격에서는 브라우저가 이미 인증되었다고 가정합니다.).

물론 OpenID 또는 Gmail과 같은 모든 응용 프로그램에서 작동하지 않습니다. 이러한 서비스에는 종종 로그인 요청과 함께 임의의 값이 포함되기 때문입니다.