공격을 방어하려면 개발자는 취약점을 완화하고 애플리케이션에 보안 기능을 추가해야 합니다. 다행히 웹에서 브라우저는 많은 보안 기능을 제공합니다. 일부는 개발자가 선택할 수 있으며 일부는 사용자를 보호하기 위해 기본적으로 사용 설정됩니다.
'샌드박스'라는 개념은
최신 웹브라우저는 '샌드박스'라는 개념을 기반으로 제작되었습니다. 샌드박스는 제한된 환경에서 애플리케이션을 실행하는 데 사용되는 보안 메커니즘입니다. 아이들이 다른 곳을 방해하지 않고 경계 내에서 원하는 것을 만들 수 있는 놀이터의 물리적 샌드박스와 마찬가지로 애플리케이션 코드도 제한된 환경에서 자유롭게 실행할 수 있습니다. 예를 들어 JavaScript는 페이지에 요소를 추가하고 수정할 수 있지만 외부 JSON 파일에 액세스하지 못할 수도 있습니다. 이는 same-origin이라는 샌드박스 기능이 있기 때문입니다.
샌드박스가 필요한 이유는 무엇인가요?
매일 웹 사용자는 임의의 코드를 다운로드하여 컴퓨터나 휴대전화에서 여러 번 실행합니다. 누군가가 "이봐요! 이 애플리케이션을 다운로드하여 실행하세요!'라는 메시지가 표시되면 잠시 멈추고 해당 애플리케이션이 신뢰할 수 있는 소스에서 제공된 것인지 생각해 보거나, 애플리케이션 공급업체에 대한 자료를 읽거나, 검토를 주의 깊게 확인할 수 있습니다. 누군가가 '이 블로그 게시물을 확인해 보세요'라는 URL을 보내면 어떻게 되나요? '이 사이트에서는 어떤 종류의 JavaScript를 다운로드할까요?'와 같은 질문은 묻지 않고 클릭했을 것입니다.
브라우저 샌드박스는 임의의 코드를 더 안전하게 실행할 수 있도록 하여 원활한 웹 탐색을 가능하게 하는 핵심 기능입니다.
보안을 우선으로 설계
브라우저가 각 웹 애플리케이션을 샌드박싱하는 경우 보안에도 신경을 써야 하나요? 물론입니다!
우선 샌드박스 기능이 완벽한 방어막은 아닙니다. 브라우저 엔지니어가 열심히 작업하더라도 브라우저에는 취약점이 있을 수 있으며 공격자는 항상 샌드박스 (예: 스펙터 공격)를 우회하려고 합니다.
샌드박스는 때로 훌륭한 웹 환경을 만드는 데 방해가 될 수 있습니다. 예를 들어 브라우저에서 다른 도메인에 호스팅된 이미지에 대한 가져오기 요청을 차단할 수 있습니다. 교차 출처 리소스 공유 (줄여서 CORS)를 사용 설정하여 여러 도메인의 리소스를 공유할 수 있지만, 신중하게 설정하지 않으면 웹의 다른 모든 사용자에게 리소스를 노출시켜 본질적으로 샌드박스를 실행취소할 수 있습니다.
마무리
안전한 웹 환경은 보안이 애플리케이션 설계에 기본 구현되어야만 달성할 수 있으며 강력한 디자인은 기존 기능을 이해하는 것에서 시작됩니다. 다음 두 가이드에서는 CORS 및 동일 출처 정책을 자세히 살펴봅니다.