CORS 이해
웹 응용 프로그램이나 백엔드 서비스를 초기에 만들 때이것은 현대인이 발행한 수표다
브라우저 사용자에게 추가 보안을 제공하는 브라우저입니다.중요한 것은
이것은 완전히 브라우저에 의해 강제로 실행된 것입니다. 비록 하나의 전체이지만, 둘 다 마찬가지입니다.
웹 서버와 웹 브라우저가 역할을 발휘했다.
예를 들어 CORS는 웹 사이트의 실행을 방지하는 데 도움을 줄 수 있다
HTTP 요청(Fetch API 또는
XMLHttpRequest
을 통해 다른사용자가 로그인할 수 있는 사이트/도메인입니다.그 악성사이트
세션 데이터, 쿠키,
및/또는 기타 잠재적(암호화되기를 바랍니다!)민감한 데이터.
CORS가 없는 세상에서 이것이 어떻게 작동하는지 살펴보자.
은행 사이트, 거래 완료.
not-suspicious.example
매우 유행하는 은행 사이트에서 단점 목록에 요청을 보내다.이것모두 백스테이지에서 완성된 것이다.
사용자 데이터, 악성 사이트는 현재 사용자를 모의하는 방법이 있다.
은행 사이트, 거래 완료.
not-suspicious.example
시도된 단점 목록을 보냅니다.비행 전 요청은 요청이 가능한지 확인합니다.
브라우저에 응답 및 알림
not-suspicious.example
아니요그것의 믿음의 기원.
이것도 진정한 요청 집행을 막을 것이다.
잡스가 습격을 막았다.그러나 이것 도 그것 의 특징 하나 를 뚜렷이 드러냈다
단점: 브라우저가 관건이지만 비활성화되기 쉽다.
Chrome의
--disable-web-security
로고와 Firefox의 확장을 통해.CORS는 일부 공격과 사례를 방지하기 위해 다른 메커니즘으로 간주되어야 한다
만약 그것이 비활성화된다면, 그것도 고려해야 한다.이것은 단지 하나의 과정의 일부분일 것이다
보다 포괄적인 솔루션으로 서버 및 사용자 보호
데이터
CORS 예제가 활성화된 마지막 세 지점에서 브라우저
임무를 완수하고 습격을 막았다.그러나 이것 도 한 가지 문제 를 뚜렷이 드러냈다
단점: 브라우저가 중요하지만 CORS 구현이 중요할 수 있음
병신이런 메커니즘은 질병을 예방하는 또 다른 메커니즘으로 여겨져야 한다
일부 공격은 보다 포괄적인 보안 솔루션의 일부여야 합니다.
서버와 사용자의 데이터를 보호합니다.
이제 CORS가 없으면 무슨 일이 일어날지 알게 됐어요. 어떤 사람이 어떻게 될지 봅시다.
개발 과정에서 이 점을 발견하고 응용 프로그램을 어떻게 준비하는지 깊이 연구한다.
개시하다
네가 프로젝트를 하나 생각하면 인터넷 응용 프로그램으로 잘 활용될 수 있을 것이다.그대도
현대화를 원한다. 2021년에 간단한 HTML 사이트가 있기를 누가 원하겠는가?이것은
자바스크립트가 필요해.다음과 같은 간단한 아키텍처를 선택할 수 있습니다.
HTML, CSS 및 JS 파일, 백엔드 용this GitHub Gist
const API_URL = 'http://localhost:8000'
const button = document.getElementById('do-something')
function getResultEl () {
return document.getElementById('result')
}
function handleResponse (response) {
try {
response = JSON.parse(response)
} catch (e) {
// Something went wrong
console.log({ error: e })
response = null
}
const html = response !== null && response?.length
// Put our data in a list
? response
.map((item) => `<li>${item.name}</li>`)
.join('')
// Or tell us it failed
: '<li>Could not get response</li>'
getResultEl().innerHTML = `<ul>${html}</ul>`
}
// Make our button send a request to our backend API
button.onclick = (event) => {
const xhr = new XMLHttpRequest()
xhr.open('GET', `${API_URL}/items`)
xhr.setRequestHeader('Content-Type', 'application/json')
// Also set any custom headers if you need, such as authentication headers
// xhr.setRequestHeader('X-My-Custom-Header', 'some-data')
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
handleResponse(xhr.response)
}
}
// Send some optional data
xhr.send()
}
우리의 일을 검사하다
이제 모든 것이 다 설치되었으니, 우리는 단점이 정상적으로 작동하는지 다시 한 번 검사합시다
우리가 우리 사이트에서 그것을 호출할 때
cURL
뭐라고요?$ curl "localhost:8000/items" -v
> GET /items HTTP/1.1
> Host: localhost:8000
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 200 OK
< date: Mon, 07 Jun 2021 21:16:05 GMT
< server: uvicorn
< content-length: 48
< content-type: application/json
[{"name":"One"},{"name":"Two"},{"name":"Three"}]
괜찮아 보여요.브라우저에서... 단추를 눌렀을 때 작동하지 않습니다.왜?브라우저의 개발 도구를 검사합시다.이러한 상황에서 우리는 사용할 것이다
Firefox는 다음과 같습니다.
방금 몇 가지 일이 발생했다.
http://localhost:8000
에 있는 API 서버에 HTTP 요청을 보냅니다.서버에서 잘못된 응답입니다.
옵션은 HTTP 술어이지만 결과는 동일합니다.
INFO: 127.0.0.1:54748 - "OPTIONS /items HTTP/1.1" 405 Method Not Allowed
빠른 보기 첫 번째 요청의 요청 헤더에도 CORS가 표시됩니다.제목(액세스 제어 요청-)으로 시작하는 제목)
이 일련의 이벤트는 브라우저가 작업 중에 CORS를 실시한 결과입니다.
그럼 브라우저는 뭘 하고 있을까요?
다시 정의: CORS 대표“Cross-Origin Resource Sharing”.
예시와 같이 브라우저가
localhost:63342
(프런트엔드)-localhost:8000
(백엔드).이 두 개숙주는 서로 다른'기원'see MDN’s full definition for "origin"으로 여겨진다.
원점 간 요청이 감지되면 브라우저는 비행 전 요청을 발송합니다
소스 HTTP 간에 요청할 때마다 실제 요청이 가능한지 확인합니다.
처리가 적절하다.이것이 바로 왜 우리의 예시 중의 첫 번째 요구는
OPTIONS
자바스크립트 코드에서 호출되지 않은 요청입니다.Chrome의 개발 도구에서도 이 점을 더욱 분명하게 볼 수 있다
요청 및 사전 비행 요청:
백엔드 준비
좋은 소식은 백엔드의 개발 방식에 따라 COR 처리가 다를 수 있다는 것이다
패키지 설치 및/또는 일부 구성만 변경하면 됩니다.
예를 들어 자바스크립트 세계에서 koa와express는 모두 중간부품이 있다
빠른 설정 기능이 있는 패키지:
보다 간결한 프레젠테이션 제목:
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
app = FastAPI()
app.add_middleware(
# We add the middleware here
CORSMiddleware,
# These are the options we give the middleware and they map easily to their
# associated CORS headers
allow_origins=['http://localhost:63342, ‘http://localhost’],
allow_methods=['GET', 'POST']
)
포트가 다른 동일한 도메인에는 새 항목이 필요하다는 점에 유의하십시오.allow_origins
아래 코드 세션에 localhost
와localhost:63342
백엔드 API를 호출할 수 있는 URL이기 때문입니다.데이터를 얻다.
마찬가지로
allow_methods
아래에서 백엔드를 미세하게 조정할 수 있습니다.몇 가지 방법만 받아들이다.예를 들어, 이 API 서비스를 잠글 수 있습니다.
또한
사용자가 입력할 데이터 없음 - 예를 들어 영업시간을 제공하는 API
지정한 상점에 대해.
준비가 되면 다시 한 번 요청을 시도해 봅시다.다음은 비행 전 상황입니다.
요청(
GET
:완벽해.그것은 이제 우리의 기원을 허락하고 허락할 수 있는 방법을 보여 준다.또한
요청에 허용되는 제목을 표시합니다.에서 허용되는 제목을 나열했습니다.
전형적인 기본값이지만, 다른 제목을 사용하려면
사용 가능
OPTIONS
또는지원할 모든 제목을 명시적으로 표시합니다.
CORS 관련 제목에 대한 자세한 목록은 을 참조하십시오Mozilla’s documentation.
이게 문제가 명확해졌으면 좋겠어요.
CORS의 효과, 그리고 간단한 응용 프로그램이 그것을 지원했다.하나 있다
완벽한 CORS 정책은 복합체 중의 작은 톱니바퀴로만 여겨져야 한다
네트워크 보안의 세계.이것은 특정한 공격 캐리어만 보호하기 때문에,
사람들은 서버와 사용자 데이터의 안전을 확보하기 위해 경각심을 가져야 한다.
만약 당신이 사람을 흥분시키는 PDF와/또는 문서 작업을 개발하고 있다면, 우리는 매우 기쁩니다.
당신의 편지를 받아서 매우 기쁩니다.[email protected]에 전보를 쳐서 우리에게 알려 주십시오.
Reference
이 문제에 관하여(CORS 이해), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/simonetimen/understanding-cors-24if텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)