Я занят, пытаясь понять, что такое безопасность в c #, и я изо всех сил пытаюсь понять, как работает Assert.Я использую .net 3.5.
Я сделал пример приложения, чтобы попытаться понять это.
Вызов метода:
[FileIOPermission(SecurityAction.Deny, ViewAndModify = @"C:\")]
static void Main(string[] args)
{
WriteTest testWriter = new WriteTest();
testWriter.Test();
Console.Read();
}
В отдельной библиотеке классов у меня есть:
public class WriteTest
{
public void Test()
{
try
{
FileIOPermission permission = new FileIOPermission(FileIOPermissionAccess.Write, @"C:\");
permission.Assert();
using (StreamWriter sw = new StreamWriter(@"C:\test.txt"))
{
sw.WriteLine("testing!");
sw.Flush();
}
Console.WriteLine("Writen to file!");
}
catch (SecurityException sec)
{
Console.WriteLine("No privileges!");
}
}
}
Этот код выполняется нормально и все.Он напишет в файл.У меня вопрос, как именно это работает?Разве это не делает недействительными классы безопасности, если я могу просто утверждать нужные мне разрешения, чтобы пропустить проверки?Если я изменяю Assert на Demand, это вызывает исключение.
Разве классы безопасности не позволяют мне устанавливать разрешения так, чтобы, когда я вызываю сторонний класс, я мог предотвратить его мошенничество и делать вещи, которые я не хочу делать?Я знаю, если я загружу dll в AppDomain, я получу этот эффект, даже если сторонняя DLL-библиотека действительно использует Assert, просто странно, что, если я вызываю ее напрямую, она будет работать.Я пытался прочитать документацию MSDN об Assert, но мне трудно понять.