웹브라우저의 보안모델 1
브라우저와 네트워크에 대해 더 깊게 이해하기 위해 웹브라우저의 보안모델에 대해 공부해보았다!
웹브라우저의 역사
1990년 팀 버너스 리가 HTML과 웹 서버, 웹 브라우저를 최초로 발명하였다.
이 떄의 브라우저는 정적인 HTML만을 렌더링하였다.
195년엔 마크 로웰 앤드리슨이 웹브라우저 내에서 이미지, 플러그인의 요소를 조합할 수 있는 언어가 필요하다고 생각하여 javascript를 웹브라우저에 도입하였다.
웹 브라우저에서 javascript를 도입한 이후 javascript를 이용해서 DOM에 접근할 수 있게 되었다.
즉 javascript로 HTML로 표현된 객체에 접근하여 변경, 제거등의 작업을 수행할 수 있게 되었다.
AJAX(Asynchronous JavaScript and XML)
페이지가 로드된 이후 javascript를 이용하여 비동기식으로 서버와 상호작용 하는 것을 AJAX라고 한다.
AJAX는 페이지 전체를 로딩하지 않고도(새로고침 없이) 비동식으로 필요한 부분만 동적으로 처리하거나 로딩할 수 있다.
test.html 파일이다.
1 | <h1>It`s works!</h1> |
index.html 파일이다.
AJAX를 사용한다. httpRequeset를 통해 test.html을 요청한 다음 state를 보고 innerHTMl을 바꾼다.
1 | <html> |
SOP(Same-Origin Policy)
AJAX의 도입이후 프론트엔드 서버와 백엔드 서버를 따로 두어 개발하는 방법이 생겼다.
SOP는 동일 출처 정책으로 동일한 출처의 리소스만 상호작용을 허용하는 정책이다.
두 URL의 프로토콜, 호스트, 포트가 모두 가아야 동일한 출처로 인정되고 웹사이트를 샌드박스화 하여 잠재적인 보안 위협으로부터 보호해주는 정책이다.
SOP가 존재하지 않을 경우 악의적인 javascript 코드를 만나게 될 경우 해커의 서버로 유저의 정보를 전송할 수 있다. 이러한 경우를 사전에 방지하기 위해 SOP가 존재한다.
CORS(Cross-Origin Resource Sharing)
어쩔 수 없이 다른 출처간의 상호작용을 해야하는 경우도 존재한다.
CORS는 SOP의 예외 정책이다.
service.example.com
에서 api.example.com
으로 요청을 할 경우 HTTP 패킷을 통해 service.example.com
의 프로토콜, 호스트, 포트 정보가 Origin 헤더를 통해 전송된다.
서ㅓ는Origin 헤더를 통해 요청이 전송된 사이트 정보를 알 수 있다.
1 | GET /api/v1/test HTTP/1.1 |
서버에서는 Access-Control-Allow-Origin 헤더를 통해서 응답한다.
1 | HTTP/1.1 200 OK |
SOP 우회시 발생할 수 있는 취약점
CORS 적용이 어려운 경우 curl이나 HttpUrlConnection,urllib,requests 등의 HTTP 모듈을 통해 서버에서 직접 응답값을 가져오도록 구현하는 경우가 있다. 이 경우 파라매터 검증에 더욱 신경을 써야한다.
요청을 변조할 수 있기 때문에 Command Injection 또는 SSRF(Server-side Request Forgery) 취약점이 발생할 수 있다.