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