Меня интересует безопасность использования Type.GetType() для ненадежного ввода.
У меня есть несколько классов в пространстве имен A.B.C.Events
, и я хотел бы иметь возможность десериализовать их с помощью System.Text.Json
.
это то, чем я сейчас занимаюсь
var type = Type.GetType($"A.B.C.Events.{TypeName}");
Сталкиваюсь ли я с известными проблемами использования Type.GetType(), если я делаю префикс, как указано выше?
TypeName
внутри этой закрытой коллекции, напримерvar events = typeof(A.B.C.Events.SomeEvent).Assembly.GetTypes().Where(x => x.Namespace == "A.B.C.Events").ToArray()
- person xanatos   schedule 28.12.2020Type.GetType()
делает вас открытым для людей, которые добавляют библиотеки DLL и возятся с вашим приложением, даже использование пространства имен не помогает, поскольку они могут помещать свои типы в одно и то же пространство имен. Однако есть и другие перегрузки, которые позволяют вам контролировать, какие сборки используются. - person DavidG   schedule 28.12.2020AsemblyQualifiedName
или использованияAssembly.GetType()
вместоType.GetType()
. - person John Wu   schedule 28.12.2020