에셋 번들을 게임이나 앱과 함께 배포하거나, 게임이나 앱을 통해 원격 서버에서 다운로드할 수 있습니다. 후자의 경우 에셋 번들을 다운로드할 때는 에셋 번들 데이터 손상과 악의적인 공격자의 공격을 방지하기 위한 예방 조치를 취해야 합니다. 이유를 알 수 없는 사용자 기기의 크래시는 일반적으로 다운로드한 에셋 번들의 데이터 손상으로 인해 발생합니다. 이러한 상황은 진단 및 해결에 많은 노력과 시간이 소요될 수 있습니다. 또한 에셋 번들은 실행 가능한 코드를 포함할 수 없지만, 직렬화된 데이터를 변경하면 공격자가 게임 코드 또는 Unity 런타임의 취약점을 악용할 수 있습니다.
UnityWebRequestAssetBundle을 사용하여 인터넷에서 에셋 번들을 다운로드하고 캐시할 수 있습니다.이 API를 사용할 때는 URL이 동일한 컴퓨터에서 실행되는 로컬 웹 서버를 참조하는 경우가 아니라면 URL에서 HTTPS 프로토콜을 사용해야 합니다.HTTP 프로토콜은 안전하지 않으며 악의적인 중간자 공격에 취약합니다.
Unity는 에셋 번들을 다운로드할 때 체크섬을 사용하여 에셋 번들이 손상되거나 수정되지 않았는지 확인할 수 있는 툴을 제공합니다. 32비트 체크섬은 에셋 번들 빌드 프로세스 중에 생성되며 .manifest 파일에 기록되고 BuildPipeline.GetCRCForAssetBundle을 통해 노출됩니다. CRC 검사를 사용할 경우 에셋 번들 데이터가 빌드 후 손상되거나 조작되지 않도록 합니다. UnityWebRequestAssetBundle.GetAssetBundle
을 통해 에셋 번들을 다운로드할 때 CRC를 제공하여 유효하지 않은 에셋 번들 콘텐츠가 캐시에 포함되지 않도록 해야 합니다. 자세한 내용은 에셋 번들 압축 및 캐싱을 참조하십시오.
에셋 번들을 직접 다운로드하거나 배포하면서 빌트인 에셋 번들 캐시를 사용하지 않는 경우, 가져온 콘텐츠를 사용하기 전에 무결성 검사를 수행해야 합니다. 한 가지 방법은 에셋 번들 로드 API의 선택적 파라미터를 사용하여 예상 CRC 값을 전달하는 것입니다. 이 값이 제공되면 로딩 시스템은 에셋 번들의 압축되지 않은 콘텐츠 체크섬을 로드 전에 계산합니다. 에셋 번들의 CRC가 제공된 CRC와 일치하지 않으면 에셋 번들은 로드되지 않습니다. LZ4로 압축된 에셋 번들의 경우 파일을 RAM에 완전히 압축 해제해야 하므로 비용이 많이 들 수 있습니다. LZMA로 압축된 에셋 번들의 경우 로드 시 이미 전체 콘텐츠 압축이 해제되므로 CRC 검사를 수행해도 추가 비용이 크게 발생하지 않습니다. 전반적으로 파일을 로드할 때마다 반복하는 대신 파일을 가져와 기기에 저장하므로, 무결성 검사를 한 번만 수행하여 CRC 계산에 드는 비용을 피하는 것이 실용적일 수 있습니다.
참고: 에셋 번들 압축을 사용하는 경우 에셋 번들 파일의 유효성을 검사할 때 다른 일반적인 해시 알고리즘(예: md5)을 사용해서는 안 됩니다. Unity는 에셋 번들의 콘텐츠가 변경되지 않았더라도 재압축하는 경우가 있어, 파일 콘텐츠가 실제로는 여전히 유효한 경우에도 파일 콘텐츠 해시가 변경될 수 있기 때문입니다. 이와 대조적으로 에셋 번들의 CRC 값은 압축되지 않은 콘텐츠에서 계산되며, 번들이 다시 압축되더라도 일정하게 유지됩니다.
참고: Unity 빌드가 계산하여 .manifest 내에 저장하는 에셋 번들 해시는 에셋 번들의 전체 파일 콘텐츠에 대한 해시가 아닙니다. 에셋 번들의 버전 값으로 사용할 수는 있지만 파일 손상 감지에 사용하기에는 적합하지 않습니다.
사용자가 다른 플레이어에게 배포된 콘텐츠(사용자 생성 콘텐츠)를 업로드할 수 있게 한다면 이 데이터가 적절한 콘텐츠를 가지고 있는지 아니면 악의적인 콘텐츠를 가지고 있는지 책임감을 가지고 필터링을 해야 합니다. 사용자가 바이너리 에셋 번들 파일을 빌드하여 업로드하게 허용하지 않는 것이 좋습니다. 사용자가 소스 에셋을 직접 업로드하고 개발자가 사용자를 위해 에셋 번들 바이너리 파일을 빌드하도록 허용하는 것이 좋습니다. 이렇게 하면 개발자가 매뉴얼과 자동화 프로세스를 통해 악의적이거나 적절하지 않은 콘텐츠를 더 쉽게 필터링할 수 있습니다. 또한 Unity 이후 버전으로 업그레이드한다면 필요에 따라 개발자가 에셋 번들을 다시 빌드할 수도 있습니다.