جستجو در محصولات

گالری پروژه های افتر افکت
گالری پروژه های PSD
جستجو در محصولات


تبلیغ بانک ها در صفحات
ربات ساز تلگرام در صفحات
ایمن نیوز در صفحات
.. سیستم ارسال پیامک ..
ويژگي هاي امنيتي(ASP.NET (1
-(7 Body) 
ويژگي هاي امنيتي(ASP.NET (1
Visitor 518
Category: دنياي فن آوري
بررسي مختصر مساله امنيت در برنامه هاي ASP.NET در نحوه ارتباط آن با کاربر

مقدمه

امنيت يکي از مسائل اصلي براي توسعه دهندگان و معماران برنامه هاي کاربردي است. همانطور که تعداد بيشماري از سايتهاي وب با انواع امنيت ها مورد نياز است، توسعه دهندگان نيز بايد بدانند چگونه با مقوله امنيت کار کنند و چه مدل امنيتي مناسبي براي برنامه هاي کاربرديشان انتخاب کنند.
بعضي از سايتهاي وب اطلاعات خاصي را از کاربر معمولي دريافت نمي کنند، اما اطلاعات موجود در خود را منتشر مي کنند. همانند موتورهاي جستجو در حاليکه سايتهاي ديگري وجود دارند که نيازمند جمع آوري اطلاعات حساس از کاربرانشان هستند (براي مثال شماره کارت هاي اعتباري و ديگر اطلاعات شخصي). اين سايتهاي وب به پياده سازي امنيت مستحکم تري براي جلوگيري از حمله احتمالي موجوديت هاي خارجي نيازمندند.

تفاوت جريان امنيتي ASP و ASP.NET

جريان امنيتي صفحات ASP.NET از جريان امنيتي ASP کلاسيک متفاوت است. در ASP، بصورت پيش فرض IIS خود را به عنوان يک کاربر معتبر معرفي مي نمايد در حاليکه در ASP.NET توسعه دهنده کنترل بيشتري بر روي تنظيم امنيت در سطوح مختلف را دارا مي باشد.

عمليات اساسي امنيتي ASP.NET

Authentication:
عبارت است از روند اعتباردهي هويت يک کاربر به پذيرفتن يا رد کردن يک درخواست، يعني دريافت گواهي نامه ها (براي مثال نام کاربر و کلمه عبور) از کاربران و اعتبار دهي آن. بعد از اينکه هويت بررسي شد و معتبر تشخيص داده شد، کاربر بصورت قانوني مطرح مي شود و درخواست هاي دسترسي به منابع انجام مي شود. بصورت ايده آل درخواست هاي آتي همان کاربر تا هنگام خروج از سيستم مرتبط با روند Authentication نيست.
Authorization:
عبارت است از روند تضمين نمودن اينکه کاربران با هويت هاي معتبر مجاز به دسترسي به منابع مشخصي هستند.
Impersonation:
اين روند يک برنامه کاربردي را قادر مي سازد تا به نوبت هويت کاربر و درخواستهاي بعدي او براي ساير منابع را تضمين کند. دسترسي به منابع متناسب با هويت کاربري که جايگزين شده است (Impersonated) تاييد يا رد مي گردد. به عبارت ديگر Impersonation يک پروسه سرويس دهنده (Server Process) را قادر مي سازد تا با استفاده از امنيت گواهي نامه سرويس گيرنده ها (Client) اجرا شود.

چرا به دات نت احتياج داريم؟

آشنائي با دات نت و بررسي مشکلاتي که حل آنها سبب تولد دات نت گرديد.
به طور معمول نسل هاي جديد زبان هاي برنامه نويسي به اين دليل متولد مي شوند که زبان هاي قديمي تر داراي امکانات محدود بودند و يا قدرت استفاده از تکنولوژي هاي فعلي را به صورت مطلوب و ساده ندارند.
مهمترين نيازي که به عنوان آخرين تکنولوژي وجود دارد، برنامه نويسي در محيط اينترنت است. اينترنت در مدت تقريبا 8 سال جاي خود را به عنوان يکي از مهمترين وسايل ارتباطي براي کارهاي روزمره و تجارت باز کرده است. سيستم هاي برنامه نويسي قديمي تر امکان برنامه نويسي براي اينترنت را فراهم کرده بودند اما هر کدام داراي اشکالات بزرگي هستند، براي مثال تکنولوژي COM اولين بار در ويندوز به کار گرفته شد. در سال 1970 نيز سيستم هايي براي Unix نوشته شده بودند، جاوا نيز در اصل براي ابزارهاي الکترونيکي بود و نه براي اينترنت.
سپس براي اولين بار يک سيستم جامع براي برنامه نويسي تحت اينترنت ايجاد شد. اين سيستم -NET. از مراحل سطح پايين که به زبان ماشين مي باشد تا بالاترين سطح که برنامه نويسي ويژوال آن مي باشد براي استفاده در اينترنت طراحي شده است. البتهNET. فقط براي اينترنت نيست و با استفاده از آن مي توان برنامه هاي کامل تحت Client نيز ايجاد کرد، اما بزرگترين مزيت آن دربرابر سيستم هاي ديگر امکانات اينترنت آن است.
براي اينکه مزاياي استفاده ازNET. را بهتر متوجه بشويم بهتر است در ابتدا معايب سيستم هاي پيشين را ذکر کنيم. شرکت مايکروسافت تا قبل از سال 1995 به برنامه نويسي در محيط هاي Client و Server مي پرداخت، اما از آن سال به بعد توجه بيشتري به مساله برنامه نويسي در اينترنت کرد. مايکروسافت COM و +COM را ايجاد کرد و آنها را در ويژوال استوديوي 6 به کار گرفت. در سال 1999 حدود 50 در صد از بزرگترين سايتهاي تجارت الکترونيکي از محصولات مايکروسافت استفاده مي کردند. اما هنوز هم مشکلات بزرگي در سيستم هاي مايکروسافت وجود داشت که يکي از آنها دشواري نوشتن برنامه در اينترنت با محصولات مايکروسافت بود. شرکت مايکروسافت براي راحتي کار برنامه نويس ها ASP يا Active Server Page را ايجاد کرد. با اينکه اين يک قدم بزرگ بود و کارها را بسيار ساده کرد ولي هنوز از برنامه نويسي شي گرا پشتيباني نمي کرد. همچنين در ويژوال استوديوي 6 قسمتي براي Internet Application ايجاد شده بود و در آنها امکان ساختن Web Class وجود داشت ولي هيچ وقت به عنوان يک ابزار کار آمد براي برنامه نويسي وب درنظر گرفته نشد.

مدل برنامه نويسي DNA

مايکروسافت يک مدل برنامه نويسي به نام DistributedinterNet Application دارد که بر پايه برنامه نويسي n-tier و COM بنا نهاده شده است. مدل DNA از سه بخش اساسي تشکيل شده است.
بخش اول
به نام Presentation tire معروف است. در اين بخش رابط تصويري کاربر وجود دارد و خود نيز به دو نوع Internet Browser و Win 32 GUI تقسيم مي شود که هر کدام مشکلات خاص خود را دارند. در مدلي که از Win32 GUI يا همان نرم افزارهاي معمولي استفاده مي شود دو مشکل بزرگ وجود دارد ؛ دشواري بروز رساني نرم افزار و ديگري DLLHell که در ادامه توضيح داده خواهد شد. در نوع دوم مشکلاتي از قبيل نبود امکانات برنامه نويسي کافي در محيط مرورگر، نبود رابط قوي با کاربر، نبودن مرورگر هاي يکسان و... وجود دارد. همچنين هميشه يک اتصال به اينترنت يا اينترانت لازم است. در اين نوع از برنامه نويسي مي توان از Java Applet ها يا ActiveX استفاده کرد ولي مرورگر بايد امکان استفاده از آن را داشته باشد، مخصوصا ً هنگام استفاده از ActiveX که بايد فقط از IE استفاده کرد.
بخش دوم
که Middle tier نام دارد، مکاني است که اطلاعات و قوانين تجاري در آن وجود دارد. منظور از قوانين ، متد ها و اجزائي هستند که اعمال کاربران را کنترل مي کنند. مهمترين و آسان ترين زبان براي نوشتن اين اجزا از DNA ويژوال بيسيک است. برنامه نويسي که بخواهد در اين رده برنامه بنويسد بايد آشنايي کاملي با COM و پروتکل هاي رايج داشته، همچنين بايد مهارت کافي در استفاده از ADO و ADSI داشته باشد. مشخص است که يک اشتباه در اين لايه باعث بروز خطا و نقص در کل سيستم مي شود.
بخش سوم
يا Data tier مکاني است که اطلاعات سازمان در آن ذخيره مي شود. معمولا ً در اين قسمت از بانکهاي پيشرفته رابطه اي مانند SQL Server و Oracle استفاده مي کنند.

محدوديت هاي COM

همانطور که ديديد مهمترين قسمت در DNA همان COM است که در جاي جاي آن استفاده مي شود. در اينجا برخي معايب COM ذکر مي شود : ( در ابتداي متن ذکر شد که براي درک نياز بهNET. بايد ابتدا معايب سيستم هاي قديمي را بشناسيم )

DLL Hell:

اگر کوچکترين تغييري در يک COM ايجاد شود، ديگر برنامه هايي که از ورژن قبلي استفاده مي کردند قادر به فعال ساختن نسخه جديد نيستند. هنگامي که در ويندوز، يک COM نصب شود برايش در رجيستري يک GUID ثبت مي شود که اطلاعات آن COM را در خود ذخيره مي کند. اگر يک برنامه از نسخه اول يک COM استفاده کند و بعد از مدتي شما تغييراتي در نسخه اول بدهيد و بخواهيد آن را دوباره در سيستم نصب کنيد ويندوز به شما پيغام خطا مي دهد چون ورژن آن تکراري است، اگر هم آن را به ورژن دوم ارتقا دهيد نرم افزار قبلي هنوز به دنبال نسخه اول مي گردد. اين امر باعث مي شود که شما مجبور شويد يکبار ديگر کل برنامه را کامپايل کرده و در کامپيوترتان نصب کنيد.

کمبود در وراثت:

در نسخه هاي COM که در حال حاضرهستند چيزي به نام وراثتي که در ++C وجود دارد نمي باشد، بلکه وراثت تنها در واسط يک COM مي باشد، استفاده از آن هم چندان کمکي به برنامه نويسي نمي کند.

برخي محدوديت هاي برنامه نويسي اينترنتي در مدل DNA

1- وجود دو محيط برنامه نويسي براي اينترنت و Client
نقصان در نوشتن برنامه هايي با رابط گرافيکي خوب که در اينترنت کار مي کردند کاملا ً مشهود است، نمونه بارز آن اختلاف در برنامه نويسي در ويژوال بيسيک و ASP است. ويژوال بيسيک با رابط گرافيکي کاملا ً سطح بالا و ASP تقريبا ً رابط گرافيکي ندارد. همين امر باعث مي شد که يک برنامه نويس مجبور باشد طيف وسيعي از تکنيک ها و زبان ها را فرابگيرد تا بتواند برنامه ساده اي در اينترنت بنويسد.
2- نبودن حالت هاي ذخيره اطلاعات رابط گرافيکي در صفحه هاي اينترنتي
نمونه اين حالت زماني است که در يک textbox متني وجود داشته باشد. در برنامه هاي Win32GUI متن داخل textbox تا زماني که کاربر يا برنامه آن را تغيير نداده بر جاي خود وجود دارد. اما در محيط اينترنت و نوع ASP با هر بار refresh کردن صفحه کل اطلاعات ازبين مي رود. البته اين مشکل با استفاده از شئ هاي Request و Response تقريبا ً قابل حل است ولي احتياج به برنامه نويسي براي هر تکه از صفحه ASP دارد.
3- نداشتن Event Handler در محيط برنامه نويسي اينترنت
يکي از مهمترين ابزاري که در برنامه نويسي Win32 GUI وجود دارد استفاده از Event ها است. با تکنولوژي که در حال حاضر وجود دارد تنها راه رسيدن به اين مهم استفاده از ActiveX است که به علت مسايل امنيتي در بيش از 95 در صد مواقع توسط کاربر استفاده از آن رد مي شود.

معايب استفاده از API

API ها توابعي هستند که از ويندوز نسخه 1 تا امروز در برنامه نويسي کاربرد داشته و دارند. مهمترين کاري که اين توابع انجام مي دهند انجام کارهاي سخت و سطح پايين سيستمي است که احتياج به برنامه نويسي زيادي دارند و يا حتي امکان ايجاد آن با زبان هايي مثل ويژوال بيسيک نيست. اما هر API از هر نسخه ويندوز تا نسخه ديگر آن مي تواند دچار تغييرات بشود. براي مثال برنامه اي که در ويندوز 98 نوشته شده باشد مي تواند در ويندوز 95 اجرا نشود. همچنين هم اکنون ابزارهاي جديدي به بازار آمده است که براي آنها نيز مي توان برنامه نويسي کرد، مانند تلفن هاي سيار، کيوسک تلفن، دستگاه هاي کامپيوتري جيبي و غيره. در اين نوع دستگاه ها ديگر ويندوز به مفهومي که در حال حاضر وجود دارد قابل اجرا نيست و در نتيجه API هم وجود ندارد. لازم به ذکر است که ويندوز CE براي دستگاه هاي مذکور مي باشد ولي قابليت هاي آن با ويندوزهاي ديگر تفاوت زيادي دارد
مقدمه اي بر Microsoft.NET
ASP.NET عضوي از بدنه NET. و متعلق به ميکروسافت است. شرکت ميکروسافت موفقيت خود را با سرنوشت NET. گره زده است. بنابراين شايد جالب باشد که بدانيم NET. چيست؟ بدنه NET. داراي دو قسمت اصلي است: قسمت اول يک کتابخانه عظيم از کلاس هاي آماده است و قسمت دوم يک محيط زمان اجرا مي باشد.

کتابخانه کلاس ها در NET.

کتابخانه NET. داراي بيش از 3400 کلاس آماده جهت استفاده در برنامه ها است. بعضي از اين کلاس ها همان کلاس هاي پايه مانند آرايه و رشته هستند. اما عمده اين کلاس ها به پياده سازي اعمال تخصصي مانند کار با فايل و يا توليد مستندات XML پرداخته اند.

• فضانام ها در NET.

انبوه کلاس هاي موجود در NET. به حال خود رها نشده اند بلکه اين کلاس ها در يک دسته بندي سلسله مراتبي به نام namespace يا فضانام چيده شده اند. بعنوان مثال کليه کلاس هاي مربوط به کار با فايل ها در فضانام System.IO دسته بندي شده اند. بنابراين با استفاده از نام کلاس و فضانام مربوطه هر کلاس بصورت منحصربفردي مشخص مي شود. بعنوان مثال جهت دسترسي به کلاس File در فضانام System.IO مي توان از عبارت System.IO.File استفاده کرد.يک دسته از فضانام ها بطور خاص براي برنامه نويسي در ASP.NET در نظر گرفته شده اند. اين فضانام ها با System.Web شروع مي شوند. بعنوان مثال کليه ابزارهاي HTML در فضانام System.Web.UI.HTMLControls و ابزارهاي Web در فضانام System.Web.UI.WebControls قرار دارند.

• مجموعه ها در NET.

کلاس هاي موجود در NET. در قالب مجموعه ها (Assemblies) جاسازي شده اند. نکته مهم اين است که در اينجا يک مجموعه با يک فضانام اشتباه نشود. يک مجموعه عبارت است از يک يا چند فايل که کد برنامه مربوط به کلاس ها در آن قرار دارد. براي مثال، کليه کلاس هاي موجود در فضانام System.IO در يک مجموعه بنام Mscorlib.dll قرار دارد. مجموعه Mscorlib.dll يک فايل معمولي است که در ديسک سخت يک کامپيوتر حاوي NET. در کنار ساير فايل ها قرار مي گيرد. براي يک فضانام مهم نيست که کلاس هاي آن بروي ديسک چگونه ذخيره شده است. کلاس هاي يک فضانام ممکن است در قالب چند مجموعه ذخيره شده باشند و از طرف ديگر يک مجموعه ممکن است حاوي کلاس هاي چند فضانام باشد. يک فضانام عبارت است از دسته بندي منطقي کلاس ها در محيط برنامه نويسي در حاليکه يک مجموعه، دسته بندي فيزيکي کلاس ها بروي ديسک سخت است

زبان مشترک زمان اجرا در NET.

قسمت دوم بدنه NET. يک محيط يا زبان براي زمان اجرا است که زبان مشترک زمان اجرا (The .NET Common Language Runtime - CLR) نام دارد. در اولين فراخواني يک صفحه ASP.NET آن صفحه ابتدا کامپايل شده و سپس اجرا مي گردد و کد حاصله جهت مراجعات بعدي و جلوگيري از کامپايل مجدد بروي سرور نگهداري مي شود. اين کد کامپايل شده يک کد مياني است که زبان آن زبان جديدي است بنام زبان مياني ميکروسافت (Microsoft Intermediate Language) يا MSILيا به اختصار IL نام دارد. MSIL مشابه کد زبان اسمبلي است. با اين تفاوت که داراي ويژگيهاي شئ گرا است و مستقل از پردازنده کامپيوتر طراحي شده است. صفحات ASP.NET با هر زباني که نوشته شوند در نهايت به کد MSIL تبديل مي شوند. سپس کد MSIL در زمان اجرا توسط کامپايلري بنام JIT به کد زبان ماشين مربوطه تبديل مي شود. در واقع اينکه صفحات ASP.NET قبل از اجرا به کد مياني MSIL تبديل مي شوند دلايل مهمي دارد. دليل اول اينکه اين مساله دست برنامه نويس را در انتخاب زبان برنامه نويسي باز مي گذارد بدون آنکه تفاوتي در نتيجه چه از جهت سرعت و چه از جهت کارآئي برنامه احساس شود. بعنوان مثال شما مي توانيد يک صفحه ASP.NET را با زبان ويژوال بيسيک بنويسيد در حاليکه سرعت اجراي آن همان سرعت برنامه اي است که با #C يا ++C نوشته شده است. و اين به آن دليل است که هر زباني که برنامه نويس انتخاب کند در نهايت برنامه توليد شده به کد MSIL تبديل خواهد شد.
دليل دوم اينکه چون همه زبان هاي NET. به يک زبان مياني تبديل مي شوند، لذا اين زبان ها در کنار يکديگر بخوبي کار مي کنند. بعنوان مثال شما مي توانيد از کلاسي که به زبان ويژوال بيسيک نوشته شده است در زبان #C استفاده نمائيد.

نکاتي جهت بهينه سازي برنامه هاي ASP.NET

در اين مقاله با نکاتي آشنا مي شويد که جهت بهينه سازي و افزايش کارآيي و سرعت برنامه هاي ASP.NET لازم مي باشند.
اگرچه ASP.NET مدل جديدي از برنامه نويسي تحت وب مي باشد و آمده است که نواقص و کمبودهاي قبلي را برطرف نموده و به کارآيي برنامه هاي تحت وب بيافزايد، اما شما همچنان نياز داريد که جهت کارآيي و بهينه بودن برنامه هايتان نکاتي را رعايت کنيد. اين نکات جهت افزايش کارآيي، سرعت و صرفه جويي در مصرف منابع بر روي سرور است. جهت دستيابي به ليست کامل و مفصل اين نکات به اين آدرس در سايت MSDN مراجعه نمائيد. چکيده برخي از اين نکات بشرح زير است:

Session State را در صورت عدم نياز حتما غيرفعال نمائيد.

بصورت پيش فرض وضعيت Session State براي هر صفحه فعال است. اگر مطمئن هستيد که در آن صفحه از متغيرهاي Session استفاده نمي کنيد، حتما آن را در دايرکتيو Page بالاي صفحه تان با قراردادن آن برابر False غيرفعال کنيد تا بدين ترتيب منابع اضافي در سرور مصرف نشود. اگر هم مطمئن هستيد که در کل برنامه يا سايت تان نمي خواهيد از متغيرهاي Session استفاده کنيد مي توانيد آن را در web.config بطور کلي غيرفعال کنيد.

از رفت و برگشت هاي زياد از حد پرهيز کنيد.

فرم هاي وب جهت پردازش بايد به سرور ارسال شده و نتيجه پردازش برگشت داده شود. به اين عمل يک رفت و برگشت يا roundtrip مي گويند. از آنجا که اين رفت و برگشت ها براي سرور ايجاد بار پردازشي و ترافيک مي کنند، سعي کنيد بگونه اي از کنترلهاي وب استفاده کنيد که حداقل رفت و برگشت را داشته باشيد و تا جائيکه مي توانيد از پردازش هاي سمت کاربر براي کارهاي ساده استفاده کنيد.

از کنترل هاي سرور با احتياط استفاده کنيد.

اگرچه کنترلهاي سرور داراي قابليتهاي بسيار زياد و جالبي مي باشند اما اين قابليتها ناشي از اجراي آنها بر روي سرور است. از آنجا که هر اجرائي بر روي سرور ايجاد بار اضافي در سرور مي کند لذا در استفاده از اين نوع کنترلها خست بخرج دهيد و اگر جائي مي توانيد از کنترلهاي معمولي HTML استفاده نمائيد حتما اين کار را بکنيد.

از Page.IsPostback استفاده کنيد.

استفاده از Page.IsPostback سبب کاهش رفت و برگشت هاي (round trip) اضافي مي گردد. همچنين به شما کمک مي کند که تشخيص دهيد چه موقع نياز به توليد داده جديد براي يک صفحه داريد.

تا آنجائيکه ممکن است از View State استفاده نکنيد.

View State هم مانند Session State براي نگهداري اطلاعات و سابقه يک فرم از منابع سرور استفاده کرده و به حجم صفحات اضافه مي کند. از طرفي اين حالت بصورت پيش فرض فعال مي باشد. لذا در صورتيکه به آن نياز نداريد از آن استفاده نکنيد و حالت آن را غيرفعال نمائيد.

از Strict="true" در صفحات تان استفاده کنيد.

جهت استفاده از مزاياي earlybinding از عبارت فوق در دايرکتيو Page استفاده کنيد. اين مساله سبب مي شود تا شما مجبور شويد تايپ هر متغير را در لحظه تعريف آن متغير بصورت صريح مشخص کنيد. همانطور که مي دانيد درVB.NET و JScript.NET جهت پوشش برنامه هاي ASP کلاسيک که بدون تايپ بود، مي توانيد تايپ يک متغير را در لحظه تعريف آن مشخص نکرده بلکه بعدا هنگام انتساب مقادير به آن، اين کار (تعيين تايپ) بصورت خودکار انجام شود. اين مساله سبب صرف منابع اضافي در سرور مي گردد.

از Stored Procedure استفاده کنيد.

اگر از بانک اطلاعاتي در برنامه تان استفاده مي کنيد، سعي کنيد که حتما پرس و جوهاي (query) خود را به روال هاي ذخيره شده (stored procedure) بسپاريد. از آنجائيکه اين روال ها براي مراجعه اول کامپايل شده و از آن پس جهت اجرا در اختيار مدير بانک اطلاعاتي (DBMS) قرار مي گيرد، نسبت به پرس و جوهاي معمولي درون برنامه اي بسيار کاراتر و سريعتر هستند. از طرفي با بهينه سازي خاصي که براي گرداننده (driver) SQLServer در مجموعه دات نت شده است، سرعت اجراي روال هاي ذخيره شده نسبت به روش هاي معمولي OLEDB يا ODBC بيش از دو الي سه برابر مي باشد.

از Data Reader استفاده کنيد.

اگر حجم بالائي از داده نداريد يا تنها مي خواهيد از بانک اطلاعاتي عمل خواندن را انجام دهيد حتما از Data Reader استفاده کنيد. استفاده از Data Set سبب کندي کار و مصرف بالاي منابع مي گردد.

از Caching استفاده کنيد.

Caching شاهکار ASP.NET است. تا آنجائيکه ممکن است از caching استفاده کنيد. استفاده از caching سبب مي شود تا از توليد مجدد کد HTML لازم براي يک صفحه تکراري جلوگيري شده و کاربر هم صفحات را خيلي سريعتر دريافت کند.

حالت Debug را غيرفعال کنيد.

هنگاميکه کار برنامه نويسي شما تمام شده است و زمان استفاده واقعي از برنامه فرا رسيده است، فراموش نکنيد که حالت Debug در کامپايل نهائي برنامه تان را غيرفعال نمائيد.
ادامه دارد ......
* ارسال مقاله توسط عضو محترم سايت با نام کاربري : mirkazemi
Add Comments
Name:
Email:
User Comments:
SecurityCode: Captcha ImageChange Image