ASP.NET - уровень доверия = полный?

Недавно я присоединился к фирме и, анализируя их среду, заметил, что для уровня доверия web.config SharePoint задано значение Full. Я знаю, что это абсолютно ужасная практика, и надеялся, что сообщество stackru сможет помочь мне обрисовать недостатки этого решения.

О, похоже, это решение было принято, чтобы позволить разработчикам развертывать библиотеки DLL в папке Bin без создания политик CAS. Вздох.

Просто хочу прояснить и усугубить ситуацию, мы также внедряем сторонний код для этого веб-приложения.

5 ответов

Тодд,

В книге " Программирование Microsoft ASP.Net 3.5" Дино Эспизито приводятся некоторые убедительные аргументы в пользу недопущения полного доверия в приложениях ASP.Net.

Среди прочих причин, Дино заявляет, что веб-приложения, открытые для Интернета, являются "одной из самых враждебных сред для компьютерной безопасности, которую вы можете себе представить". А также:

публично представленное полностью доверенное приложение является потенциальной платформой для хакеров для запуска атак. Чем меньше доверия приложению, тем более безопасным оно оказывается.

Я удивлен, что сообщество Stackru не обрисовало проблему с Full Trust лучше. Я надеялся на то же самое, поэтому мне не пришлось копаться в моей куче книг, чтобы найти ответ, ленивый меня.

Если они игнорируют политики CAS, может быть непросто заставить их набрать номер обратно, поскольку это делает их работу немного сложнее (или, по крайней мере, немного менее прощающим). Изменять методы обеспечения безопасности всегда сложно - например, когда мне приходилось убеждать моего босса, что использование учетных записей SA в строке подключения SQL наших веб-приложений было плохой идеей - но зависать там.

Полное доверие позволяет приложению перейти к управлению любым ресурсом на компьютере. Хотя в вашем приложении должен быть недостаток безопасности, и они, вероятно, заявят, что предотвратили любые эскалации с помощью проницательного программирования, напомни им, что в случае, если что-то случится, они не предпочтут веб-приложение не контролировало весь компьютер? Я имею в виду, на всякий случай?

РЕДАКТИРОВАТЬ: Я был немного переусердствовал с моим языком здесь. Полное доверие позволит приложению контролировать все, что захочет, но только в том случае, если процесс пула приложений обладает достаточными правами для этого. Так что, если вы работаете как пользователь с ограниченными правами и не обладаете правами на сервере, за исключением того, что нужно приложению, то я полагаю, что по существу нет никакого риска для "Полного доверия". Реальность такова, что владелец пула приложений, скорее всего, имеет ряд прав, которые вы бы не хотели, чтобы ваше приложение имело (а в некоторых случаях, много, много больше), поэтому гораздо безопаснее ограничивать безопасность приложений и предоставлять дополнительные права индивидуально. к заявке. Спасибо за исправление, Барри.

Я использую полное доверие на своих машинах разработки... поэтому я могу развернуться в BIN при создании нового кода. Я доверяю своему собственному коду и запускаю его в GAC на производстве, потому что создание политик CAS - это боль.

Третья сторона беспокоит меня... однако:

Большинство сторонних решений, найденных в Интернете, также развертываются в GAC (при условии, по тем же причинам). Это дает им все права независимо от уровня доверия. Чувствуется, что это больше связано с тем, доверяете ли вы третьим сторонам или нет.. и действительно ли вы доверяете своим разработчикам?

Что бы сделал хакер? Сценарий, в котором хакер бросает злую dll в вашу папку BIN, я не считаю очень реалистичным... независимо от того, сможет ли он это сделать, он также может изменить уровень доверия.

Дефекты? Много. Но самое ужасное - это использование утилиты CAS:

"... он обеспечивает полный доступ к ресурсам вашего компьютера, таким как файловая система или доступ к сети, потенциально работающим вне контроля системы безопасности".

Это означает, что код, предоставленный Full Trust, может выполнять любой другой фрагмент кода (управляемый или иным образом) в системе, может вызывать по сети любой компьютер, может делать что-либо в файловой системе (включая изменение разрешений для файлов с ограниченным доступом - даже файлов ОС).).

Большинство веб-программистов сказали бы: "Это не проблема, это просто мой код", и это нормально… пока в их коде не возникнет уязвимость, позволяющая злоумышленнику использовать его для совершения сомнительных действий. Тогда ранее предоставленный Full Trust становится весьма неудачным.

Честно говоря, я считаю, что sharepoint слишком ограничен.

Взгляните на следующую страницу, чтобы увидеть, что можно и что нельзя делать на основе уровней доверия http://msdn.microsoft.com/en-us/library/ms916855.aspx

Одна проблема, с которой я столкнулся сразу, заключалась в том, что я не мог использовать блок приложения кэширования. Мы использовали этот блок приложения вместо кэширования ASP.NET, потому что мы использовали шаблон MVP и могли открывать приложение win form.

Другая проблема - отсутствие отражения, это вызвало сбой страницы About, поскольку номер версии извлекается из метаданных сборки.

Я думаю, что лучшее решение - не использовать Sharepoint в качестве хоста приложения. Я бы использовал Sharepoint в качестве хоста приложения, если бы объем кода был настолько мал, что это не повлияло бы на уровень доверия и было бы меньше работы, чем настройка нового приложения. Если вы делаете какой-то тип кодирования, который начинает выходить за рамки уровня доверия, переместите ваше приложение в надлежащую среду ASP.NET. Но это только я, и я предвзят. Возможно, вам следует попытаться достичь компромисса со средним уровнем доверия.

Другие вопросы по тегам