ASP.NET - уровень доверия = полный? - PullRequest
5 голосов
/ 20 января 2009

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

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

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

Ответы [ 5 ]

4 голосов
/ 11 июня 2009

Todd,

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

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

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

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

2 голосов
/ 20 января 2009

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

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

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

1 голос
/ 03 сентября 2009

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

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

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

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

1 голос
/ 20 января 2009

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

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

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

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

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

1 голос
/ 20 января 2009

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

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

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

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

...