ASP.NET Core Blazor Hybrid 보안 고려 사항
참고 항목
이 문서의 최신 버전은 아닙니다. 현재 릴리스는 이 문서의 .NET 8 버전을 참조 하세요.
Important
이 정보는 상업적으로 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적, 또는 묵시적인 보증을 하지 않습니다.
현재 릴리스는 이 문서의 .NET 8 버전을 참조 하세요.
이 문서에서는 Blazor Hybrid 앱에 대한 보안 고려 사항을 설명합니다.
웹 콘텐츠를 렌더링하는 Blazor Hybrid 앱은 플랫폼 Web View 내에서 .NET 코드를 실행합니다. .NET 코드는 .NET 코드와 Web View 간의 interop 채널을 통해 웹 콘텐츠와 상호 작용합니다.
Web View에 렌더링된 웹 콘텐츠는 다음 중 한 위치의 앱에서 제공하는 자산에서 가져올 수 있습니다.
- 앱의
wwwroot
폴더. - 앱 외부에 있는 원본. 예를 들어 인터넷과 같은 네트워크 원본입니다.
.NET 코드와 Web View 내부에서 실행되는 코드 사이에 트러스트 경계가 있습니다. .NET 코드는 앱 및 설치된 신뢰할 수 있는 타사 패키지에서 제공합니다. 앱이 빌드되면 .NET 코드 Web View 콘텐츠 원본을 변경할 수 없습니다.
콘텐츠의 .NET 코드 원본과 달리 Web View 내부에서 실행되는 코드의 콘텐츠 원본은 앱뿐만 아니라 외부 원본에서도 가져올 수 있습니다. 예를 들어 외부 CDN(Content Delivery Network)의 정적 자산은 앱의 Web View에서 사용하거나 렌더링할 수 있습니다.
웹앱용 브라우저 내에서 실행되는 코드를 신뢰할 수 없는 것과 같은 방식으로 Web View 내의 코드를 신뢰할 수 없는 것으로 간주합니다. 다른 유형의 앱과 동일한 위협 및 일반 보안 권장 사항이 Blazor Hybrid 앱의 신뢰할 수 없는 리소스에 적용됩니다.
가능하면 타사 원본에서 콘텐츠를 로드하지 마세요. 위험을 완화하기 위해 외부 자산을 다운로드하고, 사용자에게 서비스를 제공하는 것이 안전한지 확인하고, 앱의 패키징 rest 을 위해 앱의 wwwroot
폴더에 배치하여 앱에서 직접 콘텐츠를 제공할 수 있습니다. 외부 콘텐츠를 앱에 포함하기 위해 다운로드하는 경우 앱의 wwwroot
폴더에 배치하기 전에 바이러스 및 맬웨어를 검사하는 것이 좋습니다.
앱이 외부 소스의 콘텐츠를 참조해야 하는 경우 일반적인 웹 보안 방법을 사용하여 콘텐츠가 손상된 경우 앱에 콘텐츠를 차단할 수 있는 기회를 제공하는 것이 좋습니다.
- TLS/HTTPS를 사용하여 콘텐츠를 안전하게 제공합니다.
- CSP(콘텐츠 보안 정책)를 도입합니다.
- 하위 리소스 무결성 검사를 수행합니다.
모든 리소스가 앱에 압축되고 외부 원본에서 로드되지 않더라도 리소스에 XSS(교차 사이트 스크립팅) 공격을 허용할 수 있는 취약성이 있을 수 있으므로 Web View 내부에서 실행되는 리소스 코드의 문제에 대해 주의해야 합니다.
일반적으로 Blazor 프레임워크는 안전한 방법으로 HTML을 처리하여 XSS로부터 보호합니다. 그러나 일부 프로그래밍 패턴을 사용하면 Razor 구성 요소가 신뢰할 수 없는 원본에서 콘텐츠를 렌더링하는 등 렌더링된 출력에 원시 HTML을 삽입할 수 있습니다. 예를 들어 데이터베이스에서 직접 HTML 콘텐츠를 렌더링하는 것은 피해야 합니다. 또한 앱에서 사용하는 JavaScript 라이브러리는 안전하지 않은 방법으로 HTML을 조작하여 실수로 또는 의도적으로 안전하지 않은 출력을 렌더링할 수 있습니다.
이러한 이유로 일반적으로 웹앱에 적용되는 XSS에 대해 동일한 보호를 적용하는 것이 가장 좋습니다. 알 수 없는 원본에서 스크립트가 로드되지 않도록 하고 안전하지 않을 수 있는 JavaScript 기능(예: eval
및 기타 안전하지 않은 JavaScript 기본 형식)을 구현하지 않습니다. 이러한 보안 위험을 줄이려면 CSP를 설정하는 것이 좋습니다.
Web View 내부 코드가 손상된 경우 코드는 Web View 내부의 모든 콘텐츠에 대한 액세스 권한을 얻고 interop 채널을 통해 호스트와 상호 작용할 수 있습니다. 따라서 Web View(이벤트, JS interop)에서 가져오는 모든 콘텐츠는 신뢰할 수 없는 것으로 처리하고 호스트 시스템에 대한 악의적인 공격으로 이어질 수 있는 손상된 Blazor Server 앱 등 다른 중요한 컨텍스트와 동일한 방식으로 유효성을 검사해야 합니다.
손상된 경우 Web View 사이버 공격에 정보를 사용할 수 있도록 하므로 자격 증명, 보안 토큰 또는 중요한 사용자 데이터Web View와 같은 중요한 정보를 컨텍스트에 저장하지 마세요. 앱의 네이티브 부분 내에서 직접 중요한 정보를 처리하는 것과 같은 더 안전한 대안이 있습니다.
iframe
에 렌더링된 외부 콘텐츠
iframe
을 사용하여 Blazor Hybrid 페이지 내부에 외부 콘텐츠를 표시하는 경우 사용자가 샌드박싱 기능을 활용하여 해당 콘텐츠가 앱이 포함된 부모 페이지와 격리되도록 하는 것이 좋습니다. 다음 Razor 구성 요소 예제에서는 태그가 sandbox
샌드박싱 기능을 페이지에 적용하는 특성이 admin.html
있습니다<iframe>
.
<iframe sandbox src="https://contoso.com/admin.html" />
Warning
특성은 sandbox
초기 브라우저 버전에서 지원되지 않습니다. 자세한 내용은 sandbox
를 사용할 수 있나요?를 참조하세요.
외부 URL에 대한 링크
앱 외부의 URL에 대한 링크는 적절한 외부 앱에서 열리며, 내부로 로드 Web View되지 않습니다. 기본 동작을 재정의하지 않는 것이 좋습니다.
배포된 앱에서 Web View를 최신 버전으로 유지
컨트롤은 BlazorWebView 현재 설치된 플랫폼별 네이티브 Web View를 사용합니다. 네이티브 Web View는 새 API를 지원하고 보안 문제를 해결하기 위해 주기적으로 업데이트되므로 앱이 앱의 요구 사항을 충족하는 Web View 버전을 사용하고 있는지 확인해야 할 수 있습니다.
다음 방법 중 하나를 사용하여 배포된 앱에서 Web View를 최신 상태로 유지합니다.
- 모든 플랫폼에서: Web View 버전을 확인하고 사용자에게 업데이트에 필요한 단계를 수행하라는 메시지를 표시합니다.
- Windows에서만: 앱 내의 고정된 버전의 Web View를 패키지하여 시스템의 공유 Web View 대신 사용합니다.
Android
Android Web View는 Google Play 스토어를 통해 배포 및 업데이트됩니다. User-Agent
문자열을 읽어 Web View 버전을 확인합니다. JavaScript interop을 사용하여 Web View의 navigator.userAgent
속성을 읽고 Razor 구성 요소 컨텍스트 외부에서 사용자 에이전트 문자열이 필요한 경우 선택적으로 싱글톤 서비스를 사용하여 값을 캐시합니다.
Android 에뮬레이터를 사용하는 경우:
- Google Play 서비스가 미리 설치된 에뮬레이트된 디바이스 를 사용합니다. Google Play 서비스를 미리 설치하지 않은 에뮬레이트된 디바이스는 지원되지 않습니다.
- Google Play 스토어에서 Google Chrome을 설치합니다. Google Chrome이 이미 설치된 경우 Google Play 스토어에서 Chrome을 업데이트합니다. 에뮬레이트된 디바이스에 최신 버전의 Chrome이 설치되어 있지 않은 경우 최신 버전의 Android Web View 가 설치되어 있지 않을 수 있습니다.
iOS/Mac Catalyst
iOS 및 Mac Catalyst는 둘 다 운영 체제에서 업데이트되는 Safari 기반 컨트롤인 WKWebView
를 사용합니다. Android와 마찬가지로 Web View의 User-Agent
문자열을 읽어 Web View 버전을 확인합니다.
Windows(.NET MAUI, WPF, Windows Forms)
Windows에서는 Blazor 웹앱을 실행하려면 Chromium 기반 Microsoft EdgeWebView2
가 필요합니다.
설치된 최신 버전 WebView2
(WebView2
를 제공하려는 경우 Fixed Version distribution을 사용합니다.
현재 설치된 WebView2
버전 및 배포 모드 확인에 대한 자세한 내용은 WebView2
배포 문서를 참조하세요.
추가 리소스
ASP.NET Core