بخشی از مقاله
مختصري بر ديناميك در ايران
مكانيزم چيست؟مجموعه اي ازاجسام صلب ومقاوم كه چنان به بهم متصل شده اند كه داراي حركت نسبي نسبت به هم هستند
حال به بررسي يكي از مكانيزمهاي مهم وچگونگي كاربرد آن در صنعت ميپردازيم:
مكانيزم لنگ ولغزنده درموتورهاي احتراق داخلي وموتور شورلت v-8شركت جنرال موتورز هم مورد استفاده قرارگرفته
است. در مكانيزم لنگ و لغزنده مجموعه اي از حركتهاي رفت و برگشتي ونوساني ودوراني با هم تركيب شده اند. اگردر يك مكانيزم قدرت مكانيكي قابل اغماض باشد(انتقال قدرت توسط اجزا قابل اغماض باشد) طراحي بر اساس شكل حركت ودر درجه دوم مقاومت مكانيكي مورد بررسي قرار ميگيرد.
تاريخچه مكانيزم در ايران و كاربرد آن
1- Code Access Security
وقتي كه يك فايل اجرايي را اجرا ميكنيد، اين فايل با دسترسي كاربري كه آن را اجرا ميكند، اجرا خواهد شد. در وقتي كه با عنوان dministrator وارد سيستم ميشويد، چنانچه كدي را اجرا كنيد، اين كد به همراه قابليت دسترسي administrator اجرا خواهد شد. با استفاده از مكانيزم Code Access Security، كد با دسترسي كه خودش تعريف ميكند، اجرا خواهد شد. به عبارت ديگر، علاوه بر دسترسي كاربري كه كد را اجرا ميكند، خود كد هم داراي هويت و دسترسي خواهد شد. تمام كدهايي كه به صورت managed هستند، ازCode Access Security استفاده ميكنند، كه اين استفاده ميتواند به صورت صريح توسط نويسنده كد عنوان شود و يا NET. به صورت پيشفرض، تنظيمات پيشفرض را براي آن اعمال كند. بهطور كلي كارهايي كه با Code Access Security ميتوان انجامداد عبارتند از:
1- تعريف مجوزهاي دسترسي (Permission)
2- تعريف و تنظيم سياستهاي امنيتي (Security Policy)
3- درخواست مجوز (Permission) توسط كد براي خودش جهت اجراي صحيح برنامه
4- امكان درخواست مجوز توسط كد براي فراخواني كد. به عبارت ديگر برنامه از اجراكننده خود درخواست ميكند.
حتماً مجوز خاصي داشته باشد.
5- درخواست امضاي ديجيتال توسط كد براي اجراكننده كد. به عبارت ديگر كد از اجراكننده خود ميخواهد حتماً امضاي CA خاصي را داشته باشد.
جهت استفاده از اين مكانيزم امنيتي چند مورد را بايد رعايت كنيد:
يكم: بايد managed code توليد كنيد و كد نوشتهشده توسط شما type safe باشد (فقط ++VC قادر به توليدunmanaged code ميباشد. لذا حالتهاي پيچيده متعددي را ميتواند توليد كند كه فراتر از موضوع اين مقاله ميباشد. در C هم چنانچه از كلمه كليدي unsafe استفاده نكنيد كد شما type safe خواهد بود.)
دوم: از يكي از دو روشي كه Code Access Security را وارد برنامه شما ميكند، استفاده كنيد كه در ادامه توضيح داده ميشود.
سوم: كه از همه مهمتر ميباشد، ضروري است هنگام طراحي و تحليل برنامه، تحليلي امنيتي نيز روي كلاسهاي خود داشته باشيد و بدين ترتيب مجوزهاي مختلفي را كه يك كلاس و يا متد در شرايط مختلف لازم دارد را پيدا كنيد و تدابير لازم جهت پيادهسازي را بينديشيد.
همانطور كه اشاره شد،Code Access Security به دو شيوه ميتواند در كدهاي شما پيادهسازي شود كه هر يك قابليتهاي خاصي را در اختيار شما قرار ميدهد:
● imerative security syntax
در اين مدل از يك سري كلاسهايي كه سرويسهاي امنيتي را فراهم ميكنند، اشيائي گرفته و مكانيزمcode Access را پيادهسازي ميكنند. از اين مدل زماني استفاده ميشود كه تصميمات امنيتي بايد به صورت runtime گرفته شوند و تمام مسايل و تصميمات در هنگام طراحي برنامه روشن و واضح نيستند. جهت روشنتر شدن موضوع به مثال زير توجه كنيد:
public Class MyClass
Public sub New
End Sub
Public Sub MyMethod1()
'using imperative security syntax to demand FileIOPermission
Dim MyFileIOPerm As New FileIOPermission()
MyFileIOPerm.Demand()
End Sub
End Class
در اينجا با استفاده از كلاس FileIOPermission مشخص كردهايم كه فراخواننده اين كد بايد اجازه دسترسي، خواندن و نوشتن فايلها را داشته باشد. نكته قابل توجه اين است كه فراخواننده فقط جهت اجراي تابع 1 My Method اين دسترسي را لازم دارد و چنانچه در حين استفاده از برنامه سراغ اين تابع نرود، به اين دسترسي هم نيازي نخواهد داشت. كلاسهاي زيادي وجود دارند كه همانند FileIOPermission دسترسي امنيتي خاصي را تعريف ميكنند و تقريباً تمام اين كلاسها غيرقابل ارثبري ميباشند. شما ميتوانيد با توجه به نياز خاصي كه در يك تابع و يا كلاس خود داريد، از اين كلاسها استفاده كنيد. در اينجا برخي از پركاربردترين اين كلاسها را نام ميبريم:
Registry Permission،Web Permission ،Environment
Permission ،Printing Permission ،Security Permission
● Declarative Security Syntax
در اين شيوه با استفاده از attributeها، مكانيزم code Access
security در برنامه پيادهسازي ميشود. بديهي است با توجه به اينكه از attributeها جهت تعيين و يا درخواست سطح دسترسي استفاده ميكنيم، مجوزهاي كلاسها و يا توابع بايد به صورت ثابت در حين طراحي برنامه مشخص شوند. از اين رو انعطافپذيري مدل قبلي جهت تصميمگيري در زمان اجرا را در اين حالت نخواهيم داشت. در واقع چنانچه در حين طراحي برنامه وجود مجوز خاصي را جهت اجراي برنامه به صورت دائم ضروري ميدانيد، استفاده از اين روش مناسب ميباشد و با استفاده از آن ميتوانيد در هنگام لودشدن برنامه، مجوزهاي خاصي را درخواست كنيد و در صورتي كه مجوز موردنظر داده نشود، از لود شدن برنامه جلوگيري كنيد. به عنوان مثال به كد زير توجه كنيد:
public Class MyClass
Public sub New
'Constructor is protected by the security call
End Sub
Public Sub MyMethod1()
'Method is protected by the security call
End Sub
End Class
همانطور كه ملاحظه ميكنيد در سطح كلاس My Class يك attribute قرار گرفته كه مشخص ميكند استفادهكننده اين كلاس (فراخواننده برنامه) بايد داراي مجوز FileIOPermission باشد. توجه كنيد كه attribute ميتواند در سطح كلاس، يك متد خاص و يا حتي اسمبلي باشد، و ضمناً با استفاده از ساختار Security Action مشخص ميكنيم كه مجوز بايد به چه نحو در برنامه وارد شود. به اين معني كه آيا خود برنامه لازم دارد كه اين مجوز به آن داده شود يا اينكه فراخواننده بايد اين مجوز را داشته باشد، كه در مثال، مقدار Demand مشخص كننده اين است كه فراخواننده برنامه بايد اين مجوز را داشته باشد.
غالباً در برنامههايي كه در NET. پيادهسازي ميشوند، نيازهاي امنيتي موردتوجه قرار نميگيرند. با اين وجود توجه داشته باشيد كه با استفاده از مكانيزم Code Access Security، قابليت اطمينان برنامه را افزايش ميدهيد و اهداف زير تأمين ميشوند:
الف- مطلع كردن CLR از مجوزهاي امنيتي كه برنامه شما نياز دارد.
ب- بدون توجه به دسترسيهاي كاربري كه برنامه را اجرا كرده است، فقط مجوزهاي موردنياز به برنامه شما داده خواهد شد و لذا چنانچه به هر نحوي كدهاي مخرب ديگري از برنامه شما جهت نفوذ و اجرا استفاده كنند، فقط دسترسيهاي داده شده به برنامه شما را خواهند داشت و لذا ميزان تخريب كمتر خواهد شد.