Мне было интересно, как некоторые поставщики услуг хостинга .NET могут безопасно предоставлять своим клиентам полное доверие?
Разве это не открывает для всех, кто принимает гостей в этой компании, потенциальные проблемы с безопасностью? Или есть способ безопасно ограничить каждого клиента, несмотря на полное доверие, «их» пространством, не давая им возможности отключать систему или шпионить за другими клиентами?
Проблема «доверия» инфраструктуры .net не связана с защитой сервера. По крайней мере, не напрямую.
Хостинг-провайдеры (должны) защищать свои серверы, предоставляя ограниченные права пользователя размещенному пользователю. Эти права предоставляются на уровне операционной системы. Виртуальная машина или язык, который использует пользователь, не имеет значения. Из большинства языков вы можете получить доступ к win32 api или posix api и нанести столько ущерба, сколько вам позволит ваше разрешение безопасности.
Сценарий, который покрывает модель «доверия» фреймворка .net, не сильно отличается от сценария синтаксического анализатора JavaScript, размещенного в вашем браузере. Примите во внимание следующее: вы пишете какой-то игровой сервер. И вы не позволите третьим лицам писать расширения для вашей игры. Вы будете запускать библиотеки DLL, предоставленные этими третьими сторонами, на своем сервере. Вы хотите разрешить им вызывать ваш api. но вы определенно не хотите позволять им напрямую прослушивать ваш диск или базу данных. В этом случае безопасность ОС вам не поможет, потому что эти dll запускаются в вашем процессе с вашими учетными данными. Таким образом, вы загружаете эти DLL с ограниченным доверием. И инфраструктура .net будет следить за тем, чтобы они не вызывали опасные API.
В некотором смысле это потенциально открывает возможность того, что проблемы одного приложения могут повлиять на другие.
Но полное доверие по умолчанию уже довольно безопасно, особенно от внешних атак. Наибольшие риски в сценариях полного доверия исходят от законных пользователей, которые, возможно, могут загрузить и запустить код, который делает что-то глупое. Опять же, это незначительный риск на практике, поэтому вы вообще видите хостинг с полным доверием.
Хостинг-провайдеры также делают несколько вещей помимо дальнейшего уменьшения последствий идиотизма одного заблудшего пользователя. Большинство провайдеров действительно вносят некоторые изменения в настройки по умолчанию для «полного доверия», чтобы исключить функции, которые решениям asp..net на самом деле не понадобятся. Они также имеют тенденцию запускать учетную запись каждого пользователя в отдельных пулах приложений на сервере.
Кроме того, были некоторые проблемы с настройками среднего доверия по умолчанию, в результате чего было очень трудно достичь полного доверия со многими приложениями asp.net. Чтобы решить эти проблемы, Microsoft внесла некоторые изменения в принципы работы уровней доверия и безопасности доступа кода в asp.net 4.0. Я сам еще не вникал в окончательные детали, но вы можете найти немного информации о них по этим ссылкам: