본문 바로가기
Ajax

jquery ajax 요청 절대경로 다른도메인

by 샷타이거 2010. 3. 16.

ajax 요청 절대경로 다른도메인

ajax 요청하기

위 포스팅에서 ajax로 요청하는 방법을 보았다. 문제는 상대경로는 문제없이 읽어들일수 잇는데. 절대경로 즉 다른 도메인이나 서비스를 제공하진 않는 사이트라면 그렇지않다. 이는 대부분의 브라우저가 페이지를 다운로드한 서버외에 다른 서버에 HTTP요청하는 것을 막고있기 때문이다. 즉 보안적으로 브라우저의 당연히 갖춰야할 조취라 할수있다.

XSS

크로스 사이트 스크립팅(Cross-Site Script)

앞서 말한 ajax요청등을 악의적으로 사용하는경우를 말한다. 예로들자면 나쁜코드가 다른사용자의 브라우저에서 수행되도록 하는공격,게시판이라든가 쿠키에 접근가능한 일이 가능해진다.요즘 거의 이런일이 없고 보안상 잘준비되있다.

절대경로, 다른도메인에서 읽기

하지만 정상적으로 사용하고싶은사람은 어떻게하면 좋을까.요즘은 자신의 서버에 올려도 절대경로를 입력하면 보안상 작동하지않는다.

 $('#test').load('http://blog.rss.naver.com/어쩌고저쩌고.xml'});

위소스는 .load함수를 이용해서 네이버의 어떤블로그의 xml을 요청하는 경우이다 하지만 실행되지않는다.이를 해결방안으로는 크게 4가지가 있다.

  • JSON
  • 상호간의 규약된약속
  • php이용
  • cURL

JSON 형식의 경우는 xss가 허용된다 하지만 결코 온전히 존해하거 업데이트되는 데이타파일을 변환한다거나 새로 JSON형식으로 작성하는일은 반갑지 않은일이다. 두번쨰로 상호간의 규약된 약속이 있을경우이다.마지막으로 드 가지 방법을 알아보자

php파일이용

자신이 사용할 서버로 콘테츠를가지고 와서 jquery로 전달하는 간단한 php소스를 만드는방법이다

 $('#test').load('tempt.php'});

위와같이 사용하는서버에 만들 파일경로를 입력하고.

header('Content-Type: text/xml');
print file_get_contents('http://blog.rss.naver.com/어쩌고저쩌고.xml');

이와같이 file_get_contents를 사용한다. 문제는이방법역시 보안상 먹히지않는 것이 요즘대부분이라는점이다. 마지막 방법을 보자

cURL

 header('Content-Type: text/xml');
   $curl = curl_init();
   curl_setopt($curl, CURLOPT_URL, 'http://blog.rss.naver.com/어쩌고저쩌고.xml');
   curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
   curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, $timeout);
   print curl_exec($curl);
   curl_close($curl);
 

이에대해선.. http://en.wikipedia.org/wiki/CURL

보안

보안이 강화된웹에서 배우기위해 간단히 테스트하기 쉽지않은 것들이다.실전에서는 거의 두번째방법인 상호 규약된 체결과 약속하에 이루어 진다. 이런방법이있고 돌아간다 는점을 이해하면 되겠다.

댓글