Строгая типизация и безопасность
Обновлен: Ноябрь 2007
Строго типизированный код обращается только к тем ячейкам памяти, которые разрешены ему для доступа (в данном разделе под строгой типизацией подразумевается строгая типизация памяти, которую не следует путать со строгой типизацией в широком смысле). Например, строго типизированный код не может считывать значения из закрытых полей другого объекта. Он использует для доступа к типам только допустимые, четко определенные методы.
Во время JIT-компиляции может выполняться процесс проверки метаданных и кода MSIL метода, компилируемого в машинный код. Эта проверка позволяет удостовериться в том, что данные являются строго типизированными. Этот процесс не выполняется, если код имеет разрешение на пропуск проверки. Дополнительные сведения о проверке см. в разделе Компиляция MSIL в машинный код.
Хотя проверка строгой типизации необязательна для запуска управляемого кода, строгая типизация играет ключевую роль в изоляции сборок и обеспечении безопасности. Если код строго типизирован, среда CLR может полностью изолировать сборки друг от друга. Подобная изоляция позволяет защитить сборки от неблагоприятного воздействия со стороны других сборок, а также повышает надежность приложений. Строго типизированные компоненты могут без проблем выполняться в рамках одного процесса, даже если у них разные уровни доверия. Если код не является строго типизированным, могут возникать нежелательные побочные эффекты. Например, среда выполнения не может воспрепятствовать вызову машинного (неуправляемого) кода со стороны неуправляемого кода и выполнению нежелательных операций. Если код строго типизирован, то механизм обеспечения безопасности, предусмотренный в среде выполнения, следит за тем, чтобы он не обращался к машинному коду без соответствующего разрешения. Код, не являющийся строго типизированным, может быть выполнен, только если ему предоставлено разрешение SecurityPermission с переданным значением перечисления SkipVerification.
См. также
Основные понятия
Написание проверяемого строго типизированного кода