-
<WEB Hacking> SOPWEB Hacking 2021. 12. 15. 16:55
- 브라우저는 인증 정보로 사용될 수 있는 쿠키를 브라우저 내부에 보관하고, 이용자가 웹 서비스에 접속할 때 브라우저는 해당 웹 서비스에서 사용하는 인증 정보인 쿠키를 HTTP 요청에 포함시켜 전달함
- 브라우저는 웹 리소스를 통해 간접적으로 타 사이트에 접근할 때에도 인증 정보인 쿠키를 함께 전송하는 특징을 가짐
- 위 특징을 이용하면 악의적인 페이지가 클라이언트의 권한을 이용해 대상 사이트에 HTTP 요청을 보내고, HTTP 응답 정보를 획득하는 코드를 실행할 수 있음
■SOP(Same Origin Policy)
- 브라우저의 보안 메커니즘
- Origin : 프로토콜(Protocol), 포트(Port), 호스트(Host)로 구성(이 구성요소가 모두 일치해야 Origin이 동일)
- Origin이 동일할 때만 정보를 읽을 수 있게 해 줌
- 외부 출처에서 불러온 데이터를 읽으려고 할 때는 오류가 발생(데이터를 쓰는 것은 문제없이 동작)
- 이미지나 JS, CSS 등의 리소스를 불러오는 <img>, <script>, <style> 등의 태그는 SOP의 영향을 받지 않음
■CORS(Cross Origin Resource Sharing)
- 웹 서비스에서 SOP를 완화하여 다른 출처의 데이터를 처리해야 하는 경우 사용하는 방법
- HTTP 헤더에 기반하여 Cross Origin 간에 리소스를 공유하는 방법
- 보내는 측에서 CORS 헤더를 설정해 요청하면, 수신 측에서는 헤더를 구분해 정해진 규칙에 맞게 데이터를 가져갈 수 있음
- 일반적인 요청에 대해서는 아무런 처리도 하지 않음
· GET, POST, HEAD
· Request Header는 Accept, Accept-Language, Content-Language, Content-Type만 허용
· Content-Type은 application/x-www-form-urlencoded, multipart/form-data, text/plain만 허용
- 일반적인 요청이 아닌 경우 브라우저는 접근할 리소스를 가진 서버에 preflighted 요청을 보냄
· preflighted 요청은 특별한 목적을 가지는 요청으로 method = OPTIONS로 전송
· OPTIONS 요청을 받은 서버는 Response Header에 서버가 허용할 옵션을 설정하여 브라우저에게 전달
· 브라우저는 서버가 보낸 Response 정보를 참고해 허용되지 않은 요청인 경우 405 Method Not Allowed 에러를
발생시키고, 실제 페이지의 요청은 서버로 전송하지 않음
· 허용된 요청인 경우에는 전송
Header 설명 Access-Control-Allow-Origin 헤더 값에 해당하는 Origin에 들어오는 요청만 처리 Access-Control-Allow-Methods 헤더 값에 해당하는 메소드의 요청만 처리 Access-Control-Allow-Credentials 쿠키 사용 여부를 판단 Access-Control-Allow-Headers 헤더 값에 해당하는 헤더의 사용 가능 여부를 나타냄 - 즉, 브라우저는 발신 측이 보낸 요청과 수신 측이 보낸 응답을 확인하여 상응할 때만, POST 요청을 보내 수신 측의 웹 리소스를 요청하는 HTTP 요청을 보냄
■JSON with Padding(JSONP)
- 이미지나 JS, CSS 등의 리소스는 SOP에 구애 받지 않고 외부 출처에 대한 접근을 허용하는 특징을 이용해 <script> 태그로 Cross Origin의 데이터를 불러옴(<script> 태그 내에서는 데이터를 JS 코드로 인식하기 때문에 Callback 함수 사용)
- Cross Origin에 요청할 때 callback 파라미터에 어떤 함수로 받아오는 데이터를 핸들링할지 넘겨주면, 대상 서버는 전달된 Callback으로 데이터를 감싸 응답함
- 현재는 거의 사용하지 않는 추세(CORS 권장)
'WEB Hacking' 카테고리의 다른 글
<WEB Hacking> ClientSide: CSRF (0) 2021.12.17 <WEB Hacking> ClientSide: XSS (0) 2021.12.16 <WEB Hacking> Session (0) 2021.12.14 <WEB Hacking> Cookie (0) 2021.12.14 <WEB Hacking> Browser DevTools (0) 2021.12.14