Динамическая генерация кода и безопасность - PullRequest
0 голосов
/ 28 сентября 2011

Я столкнулся с проблемой с библиотекой сериализации JSON.Net и хотел узнать мнение людей, более опытных в управлении CAS и AppDomain, чем я.

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

Идея состоит в том, что флаг DynamicCodeGeneration статически устанавливается раз и навсегда в текущем домене приложения при первом обращении к нему. Однако я думаю, что разрешение, разрешенное для домена приложения, может измениться.

Например, если вы вызываете метод объекта в домене приложения в другом домене приложения, кажется, что вы наследуете разрешения самого ограничительного домена приложения . Поэтому для меня это предположение, что разрешения для домена приложения не изменятся и что вы можете статически установить DynamicCodeGeneration раз и навсегда, неверно.

Я прав? Или я что-то упускаю из-за управления CAS и AppDomain?

EDIT

Я добавил небольшую схему о том, что, по моему мнению, происходит: http://www.sp4ce.net/data/temp/appdomain.png Как вы думаете, это правильно?

1 Ответ

0 голосов
/ 10 октября 2011

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

Проблема с JSON.Net, которую вы пытаетесь устранить, заключается в том, что набор разрешений проверяется один раз и не проверяется повторно в будущих вызовах, которые могут поступать из более ограниченного домена приложения. Учитывая, что разрешения могут меняться в зависимости от контекста вызова, имеет смысл требовать разрешения в области, наиболее локальной для использования разрешения. Ваше решение состоит в том, чтобы сделать вызывающий код ответственным за информирование JSON.Net об использовании DynamicCodeGeneration. Я думаю, что лучшим решением в библиотеке JSON.Net было бы запрашивать требуемые разрешения в методе получения JsonTypeReflector.DynamicCodeGeneration при каждом его вызове, а не кэшировать значение, как сейчас.

...