악성코드가 CORS를 악용하기 위해 "Origin" 헤더를 스푸핑하는 것을 방지하려면 어떻게 해야 합니까?
에서 되고 있는 측 스크립트가com 에서 하는 경우 에서 헤더를 이 스크립트는 bar.com 에서 데이터를 요구할 수 있습니다.Origin: http://foo.com
및는 , 로 .Access-Control-Allow-Origin: http://foo.com
.
com roh.com 헤더를 것을 무엇이 ?Origin: http://foo.com
에서서페? ?????
는 「어느 쪽인가」의 합니다.Origin
을 사용하다 '아주머니'는안 보이잖아요.Origin
이치노가 컬 할 수 .Origin
이 요청은 브라우저 외부에서 전송되며 브라우저 고유의 정보(쿠키 등)가 없을 수 있습니다.
CORS: CORS.CORS.데이터를 쿠키 OAuth 토큰 하십시오.Origin
헤더Access-Control-Allow-Origin
CORS의 header는 크로스 오리진 요구를 할 수 있는 발신기지만을 지시합니다.더 이상 그것에 의존하지 마세요.
TLDR: 악성코드가 오리진을 스푸핑하는 것을 막을 수 없습니다.이 경우 서버는 이 사실을 전혀 알지 못하고 요청에 따라 행동합니다.때때로 그러한 요청은 비용이 많이 든다.따라서 어떤 종류의 보안 대신 CORS를 사용하지 마십시오.
최근에 CORS와 놀아났는데 같은 질문을 스스로에게 던졌어요.브라우저는 스푸핑된 CORS 요청을 보면 알 수 있을 만큼 스마트하지만 서버는 스마트하지 않다는 것을 알게 되었습니다.
내가 가장 먼저 발견한 건Origin
header는 HTTP 금지 헤더명으로 프로그래밍 방식으로 변경할 수 없습니다.즉, Google Chrome용 Modify Headers를 사용하여 약 8초 만에 수정할 수 있습니다.
이것을 테스트하기 위해서, 2개의 클라이언트 도메인과 1개의 서버 도메인을 설정했습니다.서버에 CORS 화이트리스트를 포함했습니다.이 화이트리스트는 클라이언트1로부터의 CORS 요구를 허가하고 클라이언트2로부터의 CORS 요구를 허가하지 않았습니다.양쪽 클라이언트를 테스트했는데, 실제로 클라이언트 1의 CORS 요구는 성공했지만 클라이언트 2의 요구는 실패했습니다.
.Origin
s.header'에 일치하도록 설정합니다. 스푸핑을 했습니다.Origin
화이트리스트 체크에 합격했습니다(또는 글라스 반이 비어 있는 경우 불합격).그 후 서버는 소비하도록 설계된 모든 자원(데이터베이스 호출, 고가의 이메일 전송, 고가의 SMS 메시지 전송 등)을 소비함으로써 충실하게 수행되었습니다. 스푸핑된 스푸핑된 스푸핑된 스푸핑된 스푸핑, 스푸핑된 스푸핑된 스푸핑된 스푸핑, 스푸핑된 스푸핑된 스푸핑된 스푸핑, 스푸핑된 스푸핑이 발송되었습니다.Access-Control-Allow-Origin
이치노
에는 '아, 아, 아, 아,Access-Control-Allow-Origin
값은 .Origin
정확하게 송신된 값입니다.일치했기 때문에 Chrome에서 다음과 같은 메시지를 보고 놀랐습니다.
는 XMLHttpRequest를 로드할 수 .
http://server.dev/test
"에는 "Access-Control-Allow-Origin" 값이http://client1.dev
제공된 원본과 동일하지 않습니다. ★★★http://client2.dev
따라서 접근이 허용되지 않습니다.
제가 읽은 문서가 정확하지 않은 것 같습니다.Chrome의 헤더와 Chrome으로 됩니다.http://client1.dev
하지만, 당신은 크롬이 어떻게 해서든 진짜 기원이라는 것을 알 수 있습니다.http://client2.dev
응답을 올바르게 거부합니다.현시점에서는 문제가 되지 않습니다.서버가 이미 스푸핑된 요구를 받아들여 제 돈을 사용하고 있기 때문입니다.
간단히 마무리하겠습니다.
Q: 동일한 오리진 정책(SOP)은 브라우저에서만 적용됩니까?
A: 네. 브라우저 내에서 발신하는 모든 통화에 대해 SOP는 브라우저에 의해 확실하게 적용됩니다.서버가 요청의 출처를 확인할 수도 있고 확인하지 않을 수도 있습니다.
Q: 요청이 SOP에 준거하지 않을 경우 브라우저는 이를 차단합니까?
A: 아니요, 브라우저 권한 밖입니다.브라우저는 크로스 오리진 요구를 송신해, 콜이 서버에 의해서 합법적으로 시그널링 되는지를 확인하기 위해서 응답을 기다립니다.Access-Control
가 -* 를 .Access-Control-Allow-Origin
「」, 「」, 「」, 「」, 「」를 .*
헤더에서 브라우저는 발신자에게 응답을 제공하는 것을 자제합니다.
Q: 스푸핑할 수 없다는 뜻인가요?Origin
A: 브라우저 및 스크립팅에서는 덮어쓸 수 없습니다.Origin
이치노그러나 사용자가 직접 해킹하고 싶다면 브라우저 확장 기능이나 컴퓨터에 설치한 다른 도구를 사용하여 브라우저에서 나오는 호출을 변조할 수 있습니다.요.HTTP
를 한 콜, " "curl
,Python
,C#
, , , , , 을합니다.Origin
머리글
Q: 서버를 속일 수 있다면Origin
은 ,을 합니까?CORS
전하지? ??
:: CORS
그 자체는 보안(즉, 요청의 인증 및 인가)에 대해 침묵하고 있습니다.요청을 검사하고 쿠키 및 헤더와 같은 모든 메커니즘으로 요청을 인증/허가하는 것은 서버에 달려 있습니다. XSS XSS와 같은 더할 수 .
예:웹 사이트에 로그인하여 은행 웹 사이트에 잔액 조회 요청을 보내려고 하는 악의적인 스크립트가 있다고 가정해 보겠습니다.반영된 XSS 공격입니다.은행 웹 사이트는 웹 사이트(여기)에서 발급된 자격 증명을 신뢰하므로 요청이 인증되고HTTP
이치노 웹 원본과 하는 것에을 쓰지 않는 을 다른 원본과 공유하는 것은 .Access-Control-Allow-Origin
머리글이제 요청이 도착하면 브라우저는 요청이 Cross Origins 요청임을 인식하지만 서버가 리소스(여기서는 밸런스 쿼리 엔드포인트)를 웹 사이트와 공유하기를 원하지 않았음을 나타내지 않습니다.따라서 플로우가 중단되므로 반환된 결과는 악성코드에 도달하지 않습니다.
이 토픽은 조금 오래되었지만 확실히 도움이 됩니다.공격자가 코르를 스푸핑하는 것을 막을 수 있는 방법이 없는지 궁금하신 분들을 위해 다음 팁을 추가하겠습니다.
위에서 설명한 바와 같이 오리진 헤더가 스푸핑되지 않도록 하는 방법은 없습니다.
단, 공개된 데이터를 반환하는 API를 구축하는 경우 공격자가 서버에 오버플로하여 모든 데이터를 검색하는 것을 방지하려면 다음을 수행할 수 있습니다.
- 글로벌 데이터 요청 방지(사용 가능한 모든 데이터를 한 번에 반환하는 쿼리)
- 악의적인 사용자가 여러 개의 빠른 후속 요청을 전송하기 위해 스크립트를 편집하거나 작성하는지 여부를 확인하는 로거를 설정합니다.IP 주소와 그 외의 일의의 헤더를 조합해 사용하면, 그것을 실현할 수 있습니다.
rest API를 보호하려면 HMAC 또는 Oauth2가 최적의 옵션입니다(각각의 용도는 다릅니다).
그러나 코르는 항상 편집 가능한 상태로 유지되며 요청 발신자의 신원을 확인하는 데 사용해서는 안 됩니다.
악의적인 웹 사이트가 서버를 속여 CORS를 허용하도록 요청하기 위해 오리진 헤더를 스푸핑할 수 있지만 서버가 이를 방지할 수 있는 몇 가지 방법이 있습니다.
한 가지 방법은 "오리진 화이트리스트"라는 기술을 사용하는 것입니다.이 방법에서는 서버는 특정 신뢰할 수 있는 오리진 요청만 허용합니다.즉, 악의적인 웹 사이트가 오리진 헤더를 스푸핑하더라도 오리진이 화이트리스트에 없는 한 서버는 요청을 허용하지 않습니다.
또 다른 방법은 서명된 토큰 또는 쿠키를 사용하여 요청을 인증하는 것입니다.이 경우 서버는 시그니처 또는 cookie 값을 체크함으로써 신뢰할 수 있는 송신원으로부터의 요구를 확인할 수 있습니다.이것에 의해, 악의 있는 Web 사이트가 서버를 속여 CORS를 허가하는 것은, 한층 더 어려워집니다.
또한 CORS는 사이트 간 요청에 대한 보호를 위한 하나의 보안 계층일 뿐이라는 점도 유의해야 합니다.웹 개발자가 악의적인 요청으로부터 사이트를 보호하기 위해 사용할 수 있는 다른 기술과 방법이 있습니다.
언급URL : https://stackoverflow.com/questions/21058183/whats-to-stop-malicious-code-from-spoofing-the-origin-header-to-exploit-cors
'programing' 카테고리의 다른 글
각도 테스트 방법JS 디렉티브 (0) | 2023.03.29 |
---|---|
헤더 값: application/vnd.api+json (0) | 2023.03.29 |
gson이 사용자 지정 역직렬화에서 표준 역직렬화를 호출함 (0) | 2023.03.29 |
jQuery 클릭 이벤트가 Angular 내에서 발생하지 않음JS 템플릿 (0) | 2023.03.29 |
어레이에서 $$hashKey 제거 (0) | 2023.03.29 |