programing

CORS는 도메인 간 AJAX 요청을 안전하게 처리하는 방법입니까?

css3 2023. 3. 6. 21:23

CORS는 도메인 간 AJAX 요청을 안전하게 처리하는 방법입니까?

CORS(Cross-Origin Resource Sharing)에 대해 읽은 후 보안 강화에 대해 이해할 수 없습니다.올바른 ORIGIN 헤더가 전송되면 도메인 간 AJAX 통신이 허용됩니다.예를 들어, 만약 내가

오리진 : http://example.com

서버는 이 도메인이 화이트리스트에 있는지, 화이트리스트에 있는 경우는 헤더를 확인합니다.

Access-Control-Allow-Origin : [여기서 받은 URL]

는 응답과 함께 반송됩니다(이것은 단순한 경우입니다.또, 사전에 통지된 요구도 있습니다만, 질문은 같습니다).

이게 정말 안전한가요?누군가가 정보를 수신하고 싶다면 오리진 헤더를 위조하는 것은 매우 사소한 작업처럼 보입니다.또한 표준에서는 정책이 브라우저에서 적용되어 Access-Control-Allow-Origin이 올바르지 않은 경우 응답을 차단한다고 되어 있습니다.분명히 누군가 그 정보를 얻으려고 한다면 그는 그것을 차단하기 위해 표준 브라우저를 사용하지 않을 것이다.

목적은 이를 방지하는 것입니다.

  • 웹 사이트 X에 접속합니다.
  • 웹 사이트 X의 작성자가 당신의 브라우저로 전송되는 사악한 스크립트를 작성했습니다.
  • 브라우저에서 실행 중인 스크립트는 은행 웹사이트에 로그인하여 악의적인 행동을 합니다.브라우저에서 실행 인 스크립트는 사용자의 권한으로 실행되기 때문입니다.

은행 웹 사이트에서 웹 사이트 X의 스크립트를 신뢰할 수 있어야 은행 페이지에 액세스할 수 있는지 여부를 브라우저에 알릴 수 있는 방법이 필요하다는 것입니다.

@, @jcoder의 입니다.Origin헤더는 서버에서 요청된 리소스를 보호하는 것이 아닙니다.공격자는 실제로 적절한 툴을 사용하여 이 헤더를 스푸핑할 수 있기 때문에 이 태스크는 다른 수단을 통해 서버 자체에 달려 있습니다.

★★★★의 Originheader header header header를 사용합니다.츠키다

  • 공격자는 악의적인 웹 사이트 M을 만듭니다.

  • 사용자 Alice는 실제로 CORS를 지원하는 서버 B에서 CORS를 통해 몇 가지 액션을 수행하려고 하는 스크립트를 포함하는 M에 접속하도록 속는다.

  • 이다.Access-Control-Allow-Origin아, 아, 아, 아, 아, 아, 아, 아, 아, 아?

  • 이 M을 입니다.Origin앨리스 헤더 을 합니다.Origin M, M, M, M에 경우Access-Control-Allow-Origin따라서 요구는 실패합니다.

는 앨리스는 수 .Origin자신을 해치고 있다는 걸 의미하기 때문에 왜 그랬을까요?

;DR: »Originheader를 사용합니다.서버상의 자원을 보호하지 않습니다.공격자가 자신의 머신에서 스푸핑할 수 있지만 자신의 제어가 없는 머신에서는 스푸핑할 수 없습니다.

하는 자원으로서.Originheader header header header를 사용합니다. a, a.Origin일치하지 않는 헤더는 부정 액세스를 의미합니다.

웹 브라우저에서 JavaScript를 사용하여 오리진 헤더를 위조할 수 없습니다.CORS는 그것을 막기 위해 고안되었다.

웹 브라우저 밖에서는 문제가 되지 않습니다.그것은 사람들이 대중이 이용할 수 있는 데이터를 얻는 것을 막도록 설계되지 않았다.일반인들이 모르면 공개할 수 없습니다.

다음과 같이 설계되어 있습니다.

  • Alice, Ajax를 통해 액세스할 수 있도록 설계된 API를 제공하는 사람
  • 밥, 웹 브라우저를 가진 사람
  • 찰리, 자신의 웹사이트를 운영하고 있는 제3자

밥이 찰리의 웹 사이트를 방문하면 찰리는 JS를 밥의 브라우저로 보낼 수 없기 때문에 앨리스의 웹 사이트에서 데이터를 가져와 찰리에게 보냅니다.

위의 상황은 Bob이 Alice 웹사이트에 코멘트 투고, 데이터 삭제, 일반인이 이용할 수 없는 데이터 보기 등의 작업을 할 수 있는 사용자 계정을 가지고 있는 경우 더욱 중요합니다.보호되지 않으면 Charlie의 JS가 Bob의 브라우저에 Bob의 뒤에서 Bob의 지시를 내릴 수 있기 때문입니다(그리고 결과를 Charlie에게 전송).

권한이 없는 사람이 데이터를 볼 수 없도록 하려면 비밀번호, SSL 클라이언트 증명서 또는 ID 기반 인증/허가 수단을 사용하여 데이터를 보호해야 합니다.

같은 출처 정책의 목적은 사람들이 일반적으로 웹사이트 콘텐츠에 접속하는 것을 막는 것이 아닙니다. 누군가 그렇게 하고 싶다면 브라우저조차 필요하지 않습니다.중요한 것은 클라이언트스크립트가 필요한 접근권 없이 다른 도메인의 콘텐츠에 액세스하는 것을 정지하는 것입니다.같은 오리진 정책에 대해서는 Wikipedia 항목을 참조하십시오.

"CORS에 대해 읽은 후, 저는 그것이 어떻게 보안을 향상시키는지 이해할 수 없습니다."

CORS는 보안을 향상시키지 않습니다.CORS는 서버가 브라우저에 외부 도메인에 의한 접근 방법을 지시하는 메커니즘을 제공하며, 이는 CORS 이전 브라우저 보안 모델(즉, 동일한 오리진 정책)과 일치하는 방식으로 수행하려고 합니다.

그러나 같은 원산지 정책과 CORS는 범위가 제한적이다.구체적으로는 CORS 사양 자체는 요구를 거부하는 메커니즘이 없습니다.헤더를 사용하여 외부 도메인의 페이지가 응답을 읽지 않도록 브라우저에 지시할 수 있습니다.또한 비행 전 요청의 경우 브라우저에 특정 요청을 외부 도메인에서 보내지 않도록 요청할 수 있습니다.그러나 CORS는 서버가 실제 요청을 거부(실행하지 않음)하는 방법을 지정하지 않습니다.

예를 들어보자.가 사이트 에 .A쿠키를 통해서요.인 사이트 '''를 로드합니다.M하고 있습니다.POST로로 합니다.A일이 일어날까슨슨일 이이?CORS의 의 CORS의 유무에 관계없이, CORS ★★★★★★★★★★★★★★★★★★★★★★★★★★」M도메인인 을 "Domain"으로 보냅니다.A쿠키를 인 "Manicious"를 실행합니다.POST이치노

이 공격은 크로스 사이트 요구 위조라고 불리며, CORS 자체는 이를 완화하기 위한 어떠한 조치도 취하지 않습니다.따라서 CSRF 보호는 사용자 대신 데이터 변경을 허용하는 경우 매우 중요합니다.

그럼 이제 '우리', '우리', '우리', '우리', '우리', '', '우리', '우리', '우리', '우리',Origin헤더는 CSRF 보호에 중요한 부분이 될 수 있습니다.사실, 그것을 확인하는 것은 다방면의 CSRF 방어에 대한 현재의 권고사항의 일부입니다.단, 그 용도는OriginCORS

즉, CORS는 기존의 동일 오리진정책 보안 모델을 다른 승인된 도메인으로 확장하는 데 유용한 사양입니다.보안은 강화되지 않으며 사이트에는 CORS 이전과 같은 방어 메커니즘이 필요합니다.

답변이 늦었지만 이 게시물 중 원하는 답변을 제공하는 게시물은 없는 것 같습니다. 큰 가 '알다'를 쓰고 입니다.origin헤더 값사악한 대본은 다음 글을 쓸 수 없습니다.origin헤더 값서버가 응답할 때Access-Control-Allow-Origin이 헤더가 이 헤더를 포함하도록 브라우저가 시도합니다.origin값을 설정합니다.그렇지 않으면 오류가 트리거되고 요청 스크립트로 값이 반환되지 않습니다.이 질문에 대한 다른 답변은 악의적인 스크립트에 대한 답변을 거부하는 경우에 대한 좋은 시나리오를 제시합니다.

@syslog f는 질문에 대한 좋은 답변도 제공합니다.

언급URL : https://stackoverflow.com/questions/4850702/is-cors-a-secure-way-to-do-cross-domain-ajax-requests