Code Access Security

by mitkoka 17. Май 2009 09:40
Сигурност в .NET

Тази статия е предназаначена за тези, които искат да разберат повече за CAS.Тъй като повечето източници, които намерих  не бяха особенно полезни за мен, реших да синтезирам полезните. Предварително се извинявам за англицизмите, които използвам.

.NET предлага два типа сигурност:

Role Based Security - Сигурност базирана на ролите на потребителите
Code Access Security - Сигурност свързана с кода

В тази статия ще разгледаме CAS сигурноста.
"Сигурност свързана с кода" - това означва, че .net ни дава ваъзможност да определяме какви права има кода, който пишем от гледна точка на това
какви действия може да извършва и кой има право да го.

Ето някой основни понятия:
    * permissions
    * permission sets
    * code groups
    * evidence
    * policy

Permissions

Пермишъните в .net са събрани в System.Security.Permissions Namespacе. На първо място пермишъните са класове.За повече информация за тях вижте в MSDN  натози линк: http://msdn.microsoft.com/en-us/library/system.security.permissions.aspx.Ето няколко от тях :FileIOPermission, UIPermission, SecurityPermission пълният списък е на посочения линк. Пермишъна дава право нещо да бъде извършено или право на достъп до даден ресурс.
Пермишъна означава право на достъп. Колкото повече пермишъни токлкова повече права. За да бъде по лесно задаването на тези права пермишъните биват събирани в "Пермишън сетове" - Permission sets.

Permission sets

Пермишън сетовете са групи от пермишъни. Съществуват стандартни пермишън сетове като FullTrust, LocalIntranet, Internet, Execution и Nothing. Които включват в себе си определени пермишъни. Това са вградените в .net пермишън сетове.(FUll trust включва всички пермишъни, Nothing не включва нищо). Освен това потребителя може да създава свой като определя кои пермишъни да включи в тях. Tези, които са се занимавали с ASP.NET вероятно знаят, че един уеб сайт или приложение може да работи в различна среда на сигурност. Ако сайтът ви е хостнат на вашия компютър тогава бихте могли да зададете FullTrust (какъвто е пермишън сета по подразбиране).Това става в C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config. Ако обаче използвате хостинг компания за вашия сайт тогава той най - вероятно работи в MediumTrust среда, определена пак на същото място в web.config. Ето как изглежда честа от кода, която трябва да се промени за да се смени средата, в която работи уеб сайта:

<location allowOverride="true">
        <system.web>
            <securityPolicy>
                <trustLevel name="Full" policyFile="internal"/>
                <trustLevel name="High" policyFile="web_hightrust.config"/>
                <trustLevel name="Medium" policyFile="web_mediumtrust.config"/>
                <trustLevel name="Low" policyFile="web_lowtrust.config"/>
                <trustLevel name="Minimal" policyFile="web_minimaltrust.config"/>
            </securityPolicy>
            <trust level="Medium" originUrl=""/>
        </system.web>
    </location>

На личния ми компютър съм заложил Medium trust среда за да симулирам средата, в която ще работи сайтът ми качен на сърварите на хостинг компанията. Както се вижда има няколко предварително създадени файла, които отговарят на пермишън сетовете и съдържат пемишъните за всеки един trustLevel. Ето как може да бъде създаден нов пермишън сет. Просто създаваме нов фаил - да го наречем web_modifiedMediumtrust.config с правата, които искме да има пермишън сета. Новия фаил стои на същото място като останалите C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG. След това добавяме нов елемент към  <securityPolicy>  </securityPolicy> и променяме атрибута в level на елемента  <trust/>

Получаваме следното:

<location allowOverride="true">
        <system.web>
            <securityPolicy>
                <trustLevel name="Full" policyFile="internal"/>
                <trustLevel name="High" policyFile="web_hightrust.config"/>
                <trustLevel name="Medium" policyFile="web_mediumtrust.config"/>

             <trustLevel name="ModifiedMedium" policyFile="web_modifiedMediumtrustt.config"/>

                <trustLevel name="Low" policyFile="web_lowtrust.config"/>
                <trustLevel name="Minimal" policyFile="web_minimaltrust.config"/>
            </securityPolicy>
          
             <trust level="ModifiedMedium" originUrl=""/>
        </system.web>
    </location>

Атрибута name може да има всякакво име избрано от вас. На практика хостинг компаниите предлагат точно такаква среда - модифициран Medium.

Code groups

Кодът, който пишем попада в предварителни групи - "Код групи". Както при пермишън сетовете тук имаме вградени код групи, имаме и възможност сами да създаваме такива. Ето пример за вградени код групи My_Computer_Zone, LocalIntranet_Zone, Internet_Zone. Кодът, който пишем може да попадне в една или повече от тези код групи. Това дали даден код попада в определена код група зависи от "доказателствата" - evidence , които предоставя. Например код с определен strong name може да попадне в една код група, ако идва от http://www.somewebsite.com/ може да принадлежи на друга и т.н.т.

Policy

(Снимка)

Да ги наречем политики. Вградените са Enterprise, Machine, User и Application Domain. Политиките представляват обединение на пермишъните -> пермишън сетовете -> код групите. Както казахме кодът попада в определена код група. Тази код група с всичко онова, което се съдържа в нея попада в определена политика. Това означава, че код попаднал в различни код групи част от различни политики попада в тези различни политики. Или правата (и тук привършваме), с които разполага кода са сечение на всички политики, в които той попада, а кои са те зависи от код групите на съответните политики.

Пример

Асембли записано на нашия компютър. Даказателствата, които то представя го поставят в определени код групи (част от вградените политики) и съответно то получава правата си от тях (пермишън сети). Тъй като попада в повече от една под група правата, които получава, са тези които присъстват във всички политики или сечение на правата от всички политики.Ако предположим че нашето асембли има FullTrust, Everithing и Internet пермишън сетове, тъй като първите два включват всички пермишъни, то правата на асемблито се ограничават само до тези част от Internet пермишън сет-а.

   

Коментари

Добави коментар


(Показва вашата Gravatar икона)  

  Country flag

biuquote
  • Коментар
  • Актуален изглед
Loading