Brower Security
CORS(Cross-Origin Resource Sharing)
웹 어플리케이션이 다른 출처 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제
- 브라우저에서
cross origin
요청은 기본적으로 제한 되어있다.- 이유? 임의의 클라이언트가 서버에 어떤 리소스를 추가할지 모르기 때문에
- 개발자들은 웹 어플리케이션 고도화를 위해
cross origin
요청을 할 수 있도록 요청 - 서버가 허용하는 범위내에서
cross origin
요청 허용
언제 발생?
- 리소스가 자신의 출처(도메인, 프로토콜, 포트)와 다를 때 발생
- 즉, 출처가 다른 값에 접근할 때는 CORS 정책에 따라 접근한다는 것.
CORS 동작 방식
const defaultCorsHeaders = {
'access-control-allow-origin': '*',
//모든 origin의 접근을 허용
'access-control-allow-methods': 'GET, POST, PUT, DELETE, OPTIONS',
//허용되는 method
'access-control-allow-headers': 'content-type, accept',
//헤더에는 content-type과 accept만 쓸 수 있다.
'access-control-max-age': 10
//preflight request는 10초까지 허용된다.
}
Simple requests
- 아래 조건을 모두 만족한 경우
Simple request
- 메소드
- GET, HEAD, POST 메서드만 사용
- User agent가 자동으로 설정 한 헤더 + Fetch 명세에서 정의한 헤더
- 허용되는 Content-Type
- application/x-www-form-urlencoded
- multipart/form-data
- text/plain
위 사진과 같이 Simple request
조건을 만족한다면 Simple request
로 요청이 들어가고, 이 경우
Access-Control-Allow-Origin : *
로 응답이 온다. 이는 모든 도메인에서 접근할 수 있음을 의미한다.
options
- 서버에서 허용하는 조건을 다 맞추고 있는지 확인하는 메소드
- 위 그림과 같이 다른 origin에서 요청을 보낼 때 먼저
OPTIONS
메소드를 이용해 서버에 확인 요청을 보낸다. - 이후 허락이 되면 서버에 접근할 수 있다.
- 위 그림과 같이 다른 origin에서 요청을 보낼 때 먼저
preflighted requests
- Simple request 조건을 만족시키지 못한 요청인 경우
preflighted request
요청이 들어간다.
-
위 사진은
foo.example
에서 다른 도메인으로 요청을 보내는 경우의 사진이다.simple request
조건을 충족시키지 못했으므로options
메서드를 이용해 실제 요청 파라미터로 요청을 보낼 수 있는지 확인하는 요청을 보낸다.
option
메서드와 함께Access-Control-Request-Method: POST Access-Control-Request-Headers: X-PINGOTHER, Content-Type
요청 헤더가 전송된다.
Access-Control-Request-Method: POST
는 실제 요청을 전송할 때POST
메서드로 한다는 것이고,Access-Control-Request-Headers
는X-PINGOTHER, Content-Type 사용자 정의 헤더
와 함께 전송된다는 것을 서버에 알려준다. 이를 보고 서버는 요청을 수락할지 결정한다. -
preflight request
요청 이후 아래와 같이 응답이 온다.
Access-Control-Allow-Origin: http://foo.example // foo.example은 서버에 접근할 수 있다는 의미
Access-Control-Allow-Methods: POST, GET, OPTIONS //POST, GET, OPTIONS로 접근할 수 있다는 의미
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type// 실제 요청에 헤더를 사용할 수 있음을 확인
Access-Control-Max-Age: 86400 //다른 preflight request를 보내지 않고, preflight request에 대한 응답을 캐시할 수 있는 시간(초)을 제공
- 위와 같이 답장이 온다면 서버에 실제 요청을 보낼 수 있게 된다.
XSS
서버에 스크립트 코드를 삽입하는 공격 방법
서버 자원을 사용하는 클라이언트가 피해를 보는 공격 방법이다.
-
발생 이유
- 클라이언트가 서버를 신뢰하기 때문에 발생하는 이슈
-
공격의 예로 서버에 스크립트 코드를 사용해본다.
let data = {
"username": '김코딩',
"text": "<script>alert(1)</script>",
"roomname": '로비',
};
app.send(data); //서버에 데이터 추가하는 코드
-
위와 같이 서버에 스크립트 코드를 넣으면 해당 서버에 들어갔을 땐 데이터가 나오지 않고 경고창이 뜬다. 이를 응용하면 서버를 이용하지 못하도록 할 수도 있다.
-
위 서버에서 데이터를 가져와 보았는데 크롬에서 자체적으로 막혀있는 공격이라 클라이언트에선 따로 alert창이 뜨질 않았다.
Author And Source
이 문제에 관하여(Brower Security), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@jing07161/Brower-Security저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)