이 보안 문제는 JavaScript로 인해 발생합니다. 일반적으로 서버 A는 다른 도메인의 시스템 B가 B에서 Ajax를 실행하여 서버 A의 리소스를 호출하는 것을 허용하지 않도록 설정됩니다. 다음은 보안 위험의 간단한 예입니다.
도메인에서 ajax에 액세스할 수 있다고 가정하면 내 컴퓨터에서 ajax를 작성하여 다양한 Google 웹 애플리케이션에서 리소스를 요청할 수 있습니다. 예를 들어, 먼저 Firefox를 사용하여 Gmail에서 보내는 수많은 Ajax 요청의 주소와 매개변수를 연구합니다. 그런 다음 js를 작성하여 도메인 전체에서 다른 사용자의 쿠키를 얻으면 사용자의 GMail 비밀번호를 우회하고
ajax 교차 도메인 제한을 사용하여
다른 사람의 GMail 메일함에 로그인할 수 있습니다.도메인 액세스를 중단하기 위해 Ajax를 수행하는 것이 실제로 불가능합니까?
ajax가 도메인을 깨뜨릴 수 없다는 것은 사실이지만 릴레이를 통해 구현할 수 있습니다. 소위 프록시 원칙은 매우 간단합니다. 자신의 js와 원격 서버 A의 리소스 사이에 자체 컨테이너를 설정할 수 있습니다. asp, php, java, .net 등. 가능한 동적 웹 언어는 예를 들어 asp입니다(Redekuai 웹사이트에서 사용자의 친구 목록을 얻고 xml 데이터 형식을 반환)
<%
p = " http://redekuai.com/api/user_friends_xml/funy "
응답.BinaryWrite ZQcnGet(p)
응답.플러시
함수 ZQcnGet(url)
검색 설정 = CreateObject("Microsoft.XMLHTTP")
검색 포함
."Get", url, False, "", "" 열기
.보내다
ZQcnGet = .ResponseBody
끝
검색 설정 = 없음
기능 종료
%>
이 코드를 Proxy.asp로 저장한 후 IIS에 넣으면 js를 작성할 수 있는 머신을 찾을 수 있고, ajax를 사용하여 Proxy.asp를 요청하는 것은 결국 ajax 도메인 액세스를 구현하는 것과 같습니다. .
PHP 샘플 코드가 더 간단합니다.
echo file_get_contents(" http://redekuai.com/api/user_friends_xml/funy "");
?>
참고: PHP 버전은 4.3.0 이상이어야 합니다.
다음은 asp.net(C#) 버전에 대한 샘플 코드입니다.
using System.Net;
System.IO 사용;
System.Text 사용;
공개 부분 클래스 ajaxpages: System.Web.UI.Page
{
protected void Page_Load(개체 전송자, EventArgs e)
{
WebRequest wr = WebRequest.Create(" http://redekuai.com/api/user_friends_xml/funy ");
WebResponse wres = wr.GetResponse();
인코딩 resEncoding = System.Text.Encoding.GetEncoding("utf-8");
StreamReader sr = new StreamReader(wres.GetResponseStream(), resEncoding);
문자열 html = sr.ReadToEnd();
응답.쓰기(html);
sr.닫기();
wres.Close();
}
}
각각 Proxy.asp Proxy.php Proxy.aspx
그렇다면 프록시 역할을 잘 수행하고 웹 서버가 아닌 일반 컴퓨터에서 원격 웹 사이트 리소스에 대한 js 도메인 액세스를 활성화하는 것의 실제적인 의미는 무엇입니까?
아시다시피, 현재의 인터넷 기술은 절대적인 매시업(Mashup) 시대에 진입했습니다. 미국에는 2,000개 이상의 기업이 Facebook APP에 의존하여 생존하고 있습니다. 중국에서는 이러한 외국 산업 체인을 개발할 수 없다는 것이 사실입니까? 5년 안에 인터넷도 중국의 인프라가 될 것이라는 점을 아셔야 합니다. 이미 API를 오픈(다시 촬영, 빠르게 뜨거워지는)하거나 오픈을 준비하고 있는 비교적 좋은 web2.0 사이트가 있습니다.