문제

jQuery 및 JSON을 사용하여 ASP.NET .AMS 웹 서비스를 사용하여 CRUD 작업을 수행하는 응용 프로그램을 구축했습니다. 응용 프로그램과 .AMSX는 동일한 도메인에 있습니다. 나는 사람들이 .asmx의 읽기 작업을 원격으로 소비하는 것을 신경 쓰지 않지만 사람들이 무작위로 물건을 삭제하는 것을 원하지 않습니다 !!!

공개적으로 액세스 할 수 있고 '숨겨진'방법을 2 개의 웹 서비스로 나눌 수 있습니다. 'hidden.asmx 웹 서비스로 호출을 호스팅 한 것과 동일한 도메인으로 어떻게 고정하려면 어떻게해야합니까?

미리 감사드립니다.

편집하다:누군가 이것에 대해 언급 할 수 있습니까? 그럴듯 해 보입니다 (출처 : http://www.slideshare.net/simon/web-security-horror-stories-presentation ) : Ajax는 HTTP 헤더를 설정할 수 있습니다. AJAX 요청은 동일한 도메인에서 가져와야합니다.

따라서 "x- recested-with" "xmlhttprequest"요청은 동일한 도메인에서 가져와야합니다.

도움이 되었습니까?

해결책

웹 서비스를 통해 보안 해야하는 두 가지 시나리오가 있습니다.

  1. 사용자가 인증 되었습니까?
  2. 내 페이지에서 동작이 오는가?

Forms 인증을 사용하는 경우 인증 조각이 이미 처리되었습니다. 웹 서비스가 사이트의 인증으로 보호 된 영역에 위치한 경우 로그인하지 않으면 웹 서비스에 액세스 할 수 없습니다.

두 번째 시나리오는 약간 까다로운 이야기입니다. 이 공격은 CSRF 또는 XSRF (크로스 사이트 요청 위조)로 알려져 있습니다. 즉, 악의적 인 웹 사이트는 사용자가 여전히 사이트에 로그인하는 동안 사용자를 대신하여 작업을 수행 함을 의미합니다. 다음은 XSRF에 대한 훌륭한 글입니다.

Jeff Atwood는 위의 링크에서 모든 것을 합산하지만 다음은 4 단계로 XSRF 보호 기능이 있습니다.

  1. 사용자의 쿠키에 안내서를 작성하십시오.
  2. Ajax 호출 전에 쿠키 에서이 값을 읽고 웹 서비스 게시물에 추가하십시오.
  3. 서버 측에서 양식 값을 쿠키 값과 비교하십시오.
  4. 사이트는 다른 도메인에서 쿠키를 읽을 수 없기 때문에 안전합니다.

다른 팁

Ajax에서 브라우저는 호출을합니다. 따라서 도메인이 동일하다고 확인하더라도 쉽게 가짜가 될 수 있기 때문에 충분히 안전하지 않을 것입니다.

물건을 안전하게 유지하려면 일종의 인증/인증 토큰 (바람직하게는 타임 아웃이있는)을 사용해야합니다.

빠르고 더러운 솔루션은 IIS 주소 제한을 사용하여 IIS를 통해 도메인의 IP 주소 만 액세스 할 수 있도록하는 것입니다.

아마도 HTTP 인증을 사용하는 것이 좋습니다. 이를 수행하는 방법에는 여러 가지가 있습니다. ASP.NET 웹 서비스의 인증 유용한 개요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top