Cross Domain AJAX Request
javascript/yui 2007/07/13 09:52 |
FindingAndPreventing_CrossSiteRequestForgery.pdfFinding and Preventing Cross-Site Request
"Access Deny".....
이유를 찾아보니 브라우저의 원천서버 정책(server of origine)에 의해 타 도메인으로 요청을 보낼 수가 없다는 것이다.(Cross-Domain Ajax Insecurity)
해결책을 찾아 몇시간을 골머리 썩다가 아이러니 하게도 "Finding and Preventing Cross-Site Request" 라는 자료를 통해 해결책을 찾게 되었다.
간단히 말하면, "Ajax 요청은 막히지만 폼 전송은 가능하다" 이다.
오...맞다 트랙백도 그래서 문제가 됐었다. 전에 문제라고 생각했던 것이 절대절명의 위기에서 희망으로 떠올랐다.
자 그럼 AJAX 처럼 콜백을 받아 처리할 방법은 없는가?
여기서 갑자기 YUI 의 connection manager 를 팀원들을 위해 문서화 하면서 해석했던 기억이 났다.
그때 YUI 는 AJAX 로 파일 업로드를 하기위해 폼 전송시 XmlHttpRequest 를 사용하지 않고 IFrame 을 사용했다. 그리고 콜백을 지원했다.(YUI 의 Forms and File Upload )
콜백 호출은 되나...response 객체의 responseText 값을 읽을 수가 없다..역시 보안문제로..
다른 방법을 시도중...
---이하 답글에 따라 추가한 내용 ----
문제가 됏던 부분은 바로 로그인 처리문제였다.
데이타의 전송은 AJAX 를 사용하지 않고 폼 전송으로 가능하지만 북마크릿의 로그인 처리가 문제가 되었던 것이다.
할수없이 로그인 처리는 북마크릿에 아이프레임을 사용하기로 했다. 하지만 이방법도 해결해야 하는 것들이 있다.
문제1 - 아이프레임으로 로그인 폼을 보이게 하는 경우 로그인 처리를 수행하여도 도메인이 다른 사이트의 쿠키를 거부하는 것이 브라우저의 기본 설정이다. 따라서 쿠키로 로그인 인증하는 경우 쿠키가 무시되어 로그인이 안된다.
해결1 - P3P 해더를 쿠키를 읽어갈 수 있도록 보안을 설정해준다.
아이프레임 안에 들어갈 사이트에서 P3P 해더를 설정하면 쿠키가 유효하게 동작한다.
문제2 - 로그인처리후 서로 데이타에 접근할 수 없는 상태에서 parent 는 어떻게 로그인이 되었는지 알수있나? 이 부분이 가장 까다로웠다.
해결2.1 - 아이프레임의 사이즈를 보고 판단한다. 두가지가 중요하다. 하나는 ifame 내의 페이지에서 parent 안에 있는 아이프레임의 사이즈를 줄일 수 있는가? 가능하다. resizeTo 를 이용해 줄일 수 있다. 즉 로그인이 안된상태에서는 아이프레임을 늘려서 로그인 창을 보여주고, 로그인 처리가 되엇으면 아이프레임창을 0 으로 줄여버린다. 이 창 사이즈를 체크하면 로그인이 되었는지 아닌지 알 수 있다.
해결2.2 - 다른 문제 하나는 어느시점에서 아이프레임 사이즈를 체크할 것인가 이다. 무언가 이벤트가 있어야 체크할 시점을 결정할 수 있다. onload 는 잘 동작하지 않는다. 아이프레임의 onreadystatechange 이벤트를 이용해서 아이프레임이 로드 완료된 시점에서 아이프레임을 체크한다. but, 바로체크하면 안된다. 문서가 로드되고 resizeTo 로 사이즈가 조정될 시간을 줘야한다.
setTimeout 을 이용해 약간의 딜레이를 갖고 사이즈를 체크한다.
혹시 더 좋은 해결책을 아시는 분 트랙백 바랍니다.
'javascript > yui' 카테고리의 다른 글
| YUI2.5.0 나왔다. (0) | 2008/02/29 |
|---|---|
| YUI 2.4.0 Released — Selector, Charts, Profiler, Script/CSS Get, and JSON Support (0) | 2007/12/05 |
| YUI2.3.0 가 릴리즈 되었다. (0) | 2007/08/22 |
| Cross Domain AJAX Request (4) | 2007/07/13 |
| YUI 동적 로딩시 버그 (2) | 2007/06/25 |
| [YUI-Dom] 오브젝트의 절대 좌표를 알아내기 (3) | 2007/06/14 |
댓글을 달아 주세요
성공 하셨습니까?
저도 같은 문제로 고민하다가 우연히 이곳에 들르게 되었네요. ^^
성공하셨으면 노하우좀 부탁 드려요~ ^^;;
아 ..해결은 햇습니다.
글을 업데이트 하도록 하지요
혹시 dynamic-javascript로 해보셨나여?? 꽁수입니다만.
<script type="text/javascript">
var returnValue = '';
</script>
<script type="text/javascript" src="processURL.asp(or etc..)"></script>
* processURL.asp페이지는 서버사이드에서 처리 한 결과를 스크립트 returnValue 변수에 값을 넣어 주는 역활을 합니다.
예전에 ajax로 작업하기전에 즐겨 사용하던 방식입니다.
이런걸 jsonp 라고 하더군요.
고려해 볼 방법중에 하나라고 생각합니다.