NET і C#, Дозволи сокетів
Середовище .NET Framework надає численні класи, які допомагають розробляти в додатках безпечний код. Багато з цих класів пропонують засновану на ролях безпеку та криптографію. Середовище .NET Framework також дає об'єкти дозволів доступу до коду, які є блоками компонування для захисту від несанкціонованого доступу до коду. Вони є фундаментом, що гарантує керованому коду безпеку - може виконуватися лише код, який має дозвіл виконуватися в поточному контексті.
Кожна роздільна здатність доступу до коду демонструє одне з таких прав:
Право доступу до захищених ресурсів, наприклад файлів.
Право виконання захищеної операції, наприклад, звернення до керованого коду.
Для світу Інтернету та особливо для мережевих програм класи System.Net надають вбудовану підтримку автентифікації та дозволів доступу до коду. Середовище .NET Framework пропонує класSocketPermission, що забезпечує дотримання дозволів доступу до коду.
Для сокетів C# є два способи забезпечити дозвіл, що підтримує безпеку:
Імперативно, використовуючи клас SocketPermission
Декларативно, використовуючи класSocketPermissionAttribute
Синтаксис імперативної безпеки реалізує дозволи, створюючи новий екземпляр класу SocketPermission, щоб під час виконання коду запросити конкретне дозвіл, наприклад право встановити TCP-соединение. Цей спосіб зазвичай застосовується, коли параметри безпеки змінюються під час виконання програми. У декларативному синтаксисі використовуються атрибути, що дозволяють помістити інформацію про безпеку в метадані нашого коду, щоб клієнт, що викликає код, міг скористатися рефлексією та дізнатися, які дозволи потрібнідля коду.
Імперативна безпека
Цей синтаксис для безпеки створює новий екземпляр класу SocketPermission. Синтаксис імперативної безпеки можна використовуватиме виконання вимог і перевизначень, але з запитів. Перш ніж викликати відповідний критерій безпеки, необхідно через конструктор ініціалізувати стан класу SocketPermission, щоб він представляв конкретну форму дозволу, яку ви шукаєте.
У цьому додатку демонструється основне використання класу SocketPermission. Оскільки цей код поводиться як клієнт, до виконання цієї програми потрібно запустити програму SocketServer.cs, створену раніше:
Наведений код показує, як, використовуючи імперативний синтаксис, реалізувати безпеку доступу до коду. Важливість цього коду в даному випадку полягає у виклику одного методу класу SocketPermission -Assert(), який вказує, що додаток дозволяється давати згоду на запити з'єднання від Інтернету та місцевого ресурсу.
Декларативна безпека
Декларативна безпека використовує атрибути .NET, щоб помістити інформацію про безпеку всередину метаданих коду. Атрибути можна помістити на рівні складання, класу чи члена та вказати необхідний тип запиту, вимоги чи перевизначення. Для використання цього синтаксису безпеки спочатку через декларативний синтаксис потрібно ініціалізувати дані стану об'єкта SocketPermissionAttribute, щоб він представляв форму дозволу, дотримання якого забезпечується кодом.
У наступному прикладі демонструється, як забезпечити виконання дозволу з використанням SocketPermissionAttribute:
За функціональністю наведена вище програма схожа на попередню, однак, в останнійпрограмі замість імперативної безпеки використовують синтаксис декларативної безпеки, тобто. Дозволи для сокету задаються в атрибуті SocketPermission.