اینترنت و به دنبال آن وب ، دنیای نرم افزار را دستخوش تحولات فراوانی نموده است . ظهور نسل جدیدی از برنامه های کامپیوتری موسوم به "برنامه های وب " از جمله این تحولات عظیم است . پس از ارائه سرویس وب در سال 1991، وب سایت های متعددی ایجاد گردید . اینگونه سایت ها به منظور ارائه اطلاعات به مخاطبان خود از صفحات وب ایستا استفاده می کردند . در چنین وب سایت هائی ، امکان تعامل کاربر با برنامه وجود نداشت .
با توجه به این که رویکرد فوق با ماهیت و یا روح نرم افزار چندان سازگار نمی باشد ، تلاش های گسترده ای در جهت ایجاد محتویات پویا انجام و متعاقب آن ، فن آوری های متعددی ایجاد گردید . به عنوان نمونه ، با پیاده سازی فن آوری CGI ( برگرفته از Common Gateway Interface ) ، امکان استفاده از برنامه های خارجی به منظور تولید محتویات پویا فراهم گردید . بدین ترتیب ، کاربران قادر به درج اطلاعات و ارسال آنها برای یک برنامه خارجی و یا اسکریپت سمت سرویس دهنده شدند . برنامه موجود در سمت سرویس دهنده پس از دریافت اطلاعات و انجام پردازش های تعریف شده ، نتایج را تولید و آنها را برای کاربر ارسال می نمود .
رویکرد فوق ، به عنوان نقطه عطفی در برنامه های وب تلقی می گردد چراکه برای اولین مرتبه امکان تولید محتویات پویا در وب سایت ها فراهم گردید . از آن زمان تاکنون فن آوری های متعددی به منظور تولید برنامه های وب ایجاد شده است . PHP و ASP.NET نمونه هائی در این زمینه می باشند . صرفنظر از این که از کدام فن آوری به منظور ایجاد برنامه های وب استفاده می گردد ، ایمن سازی آنان از جمله اهداف مشترک تمامی پیاده کنندگان است .
امنیت برنامه های وب و برداشت های اولیه
زمانی که در رابطه با امنیت برنامه های وب سخن به میان می آید ، تهاجم علیه یک سایت ، سرقت کارت های اعتباری ، بمباران وب سایت ها در جهت مستاصل کردن آنان به منظور ارائه خدمات و سرویس های تعریف شده ، ویروس ها ، تروجان ها ، کرم ها و ... در ذهن تداعی می گردد . صرفنظر از نوع برداشت ما در رابطه با موارد فوق ، می بایست بپذیریم که تهدیدات امنیتی متعددی متوجه برنامه های وب با توجه به ماهیت آنان می باشد . سازمان ها و یا موسساتی که از اینگونه برنامه ها استفاده می نمایند و یا در صدد طراحی و پیاده سازی آنان می باشند ، می بایست به این نکته مهم توجه نمایند که ایمن سازی یک برنامه وب ، محدود به بکارگیری یک فن آوری خاص نبوده و فرآیندی است مستمر که عوامل انسانی و غیرانسانی متعددی می توانند بر روی آن تاثیرگذار باشند .
امنیت برنامه های وب را می بایست با توجه به |
برداشت های غیرواقعی از امنیت برنامه های وب
متاسفانه به دلیل عدم شناخت لازم در خصوص ماهیت برنامه های وب از یک طرف و از سوی دیگر عدم آشنائی لازم با مفاهیم امنیت ، شاهد برداشت های نادرست در خصوص امنیت برنامه های وب می باشیم . اجازه دهید به چند نمونه در این خصوص اشاره نمائیم :
ما ایمن هستیم چون از یک فایروال استفاده می نمائیم . این تصور کاملا" اشتباه است و به نوع تهدید بستگی خواهد داشت . مثلا" یک فایروال قادر به تشخیص داده ورودی مخرب جهت ارسال به یک برنامه وب نمی باشد . فایروال ها دارای عملکردی قابل قبول در رابطه با اعمال محدودیت بر روی پورت ها می باشند و برخی از آنان می توانند همزمان با بررسی اطلاعات مبادله شده ، امکانات برجسته حفاظتی را ارائه نمایند . فایروال ها جزء لاینفک در یک فریمورک امنیتی می باشند ولی نمی توان آنان را به عنوان یک راهکار جامع به منظور ایجاد و برپائی یک محیط ایمن در نظر گرفت .
ما ایمن هستیم چون از SSL ( برگرفته ازSecure Sokets Layer ) استفاده می نمائیم . SSL برای رمزنگاری ترافیک موجود بر روی شبکه یک گزینه ایده آل است ولی قادر به بررسی داده ورودی یک برنامه نمی باشد .
ما ایمن هستیم چون از سیستم عاملی استفاده می نمائیم که نسبت به سایر سیستم های عامل دارای امنیت بیشتری است . استدلال فوق با فرض درست بودن اصل قضیه ، نادرست و غیرمنطقی است چراکه امنیت یک فرآیند است نه یک محصول . بنابراین با بکارگیری یک محصول خاص ( به عنوان نمونه یک سیستم عامل ) نمی توان این ادعا را داشت که ما به یک محیط ایمن به منظور ایجاد برنامه های وب دست یافته ایم .
با رد امنیت یک سیستم عامل نمی توان امنیت یک سیستم عامل دیگر را تائید نمود. |
امنیت چیست ؟
اولین رسالت امنیت ، حفاظت از سرمایه های یک سازمان است که ممکن است شامل آیتم های ملموسی نظیر یک صفحه وب و یا بانک اطلاعاتی مشتریان و یا آیتم های غیرملموسی نظیر شهرت و اعتبار یک سازمان باشد. امنیت یک مسیر است نه یک مقصد و به موازات تجزیه و تحلیل زیرساخت و برنامه های موجود ، می بایست اقدام به شناسائی تهدیدات و خطرات ناشی از آنان نمود . در واقع ، امنیت به مدیریت خطرات و پیاده سازی یک سیستم به منظور پاسخگوئی و مقابله با تهدیدات اشاره داشته و در ارتباط با عتاصر کلیدی زیر است :
Authentication ، فرآیندی است که به کمک آن به صورت منحصربفرد سرویس گیرندگان یک برنامه شناسائی می گردند . کاربران ، سرویس ها ، فرآیندها و کامپیوترها ، نمونه هائی از سرویس گیرندگان یک برنامه می باشند . در واقع ، authentication هویت استفاده کنندگان یک برنامه را بررسی می نماید .
Authorization ، فرآیندی است که به کمک آن دستیابی سرویس گیرندگان تائید شده به منابع و عملیاتی که قصد انجام آن را دارند بررسی و مجوز لازم صادر می گردد. فایل ها ، بانک های اطلاعاتی ، جداول ، سطرها ، منابع موجود در سطح سیستم نظیر کلیدهای ریجتسری و داده پیکربندی ، نمونه هائی از منابع مورد درخواست سرویس گیرندگان می باشند . انجام تراکنش هائی خاص نظیر خرید یک محصول ، واریز و انتقال پول از یک حساب به حساب دیگر و یا افزایش اعتبار یک کارت اعتباری از جمله عملیاتی می باشند که می بایست مجوز استفاده از آنان برای سرویس گیرندگان صادر گردد . در واقع ، authorization محدوده مجاز عملیاتی را که یک سرویس گیرنده می تواند انجام دهد را مشخص می نماید .
Auditing : ممیزی موثر و ثبت عملیات انجام شده یکی از اصول مهم در جلوگیری از انجام اعمال خلاف قانون است . بدین ترتیب این اطمینان ایجاد خواهد شد که یک کاربر نمی تواند باعث عدم انحام یک کار و یا فعالیت در سیستم گردد و یا یک تراکنش را مقداردهی اولیه نماید . مثلا" در یک سیستم e-commerce می بایست از مکانیزم هائی استفاده گردد تا این اطمینان حاصل گردد که یک مصرف کننده نمی تواند سفارش انجام شده برای خرید یکصد نسخه از یک کتاب را انکار نماید .
Confidentiality ، که از آن با نام privacy نیز نام برده می شود ، فرآیندی است که به کمک آن این اطمینان ایجاد می گردد که حریم خصوصی داده رعایت و امکان مشاهده آن توسط کاربران غیرمجاز و یا سایر افرادی که قادر به ردیابی ترافیک یک شبکه می باشند ، وجود نخواهد داشت .
Integrity ، فرآیندی است که به کمک آن این اطمینان ایجاد می گردد که داده در مقابل تغییرات تصادفی و یا تعمدی حفاظت خواهد شد . همانند privacy ، یکپارچگی اطلاعات یک فاکتور اساسی در خصوص امنیت داده محسوب می گردد ، خصوصا" در مواردی که داده در طول شبکه مبادله خواهد شد . یکپارچگی داده در حال حمل ،عموما" با استفاده از روش هائی نظیر hashing و یا کدهای تائید پیام انجام می شود .
Availability ، فرآیندی است که به کمک آن این اطمینان ایجاد خواهد شد که همواره داده برای کاربران مجاز در دسترس و قابل استفاده خواهد بود . در اغلب حملات از نوع DoS ، مهاجمان این هدف را دنبال می نمایند که بتوانند امکان استفاده و در دسترس بودن برنامه برای کاربران مجاز را غیرممکن و عملا" آن را از کار بیندازند .
تعاریف اولیه برخی از اصطلاحات امنیتی : تهدیدات ، نقاط آسیب پذیر و حملات
تهدید ( threat ) : به هرگونه پتانسیل بروز یک رویداد مخرب و یا سایر موارد دیگر که می تواند به سرمایه های یک سازمان آسیب برساند ، تهدید گفته می شود . به عبارت دیگر، هر رویدادی که بتواند به سرمایه های یک سازمان آسیب برساند ، در زمره تهدیدات محسوب می گردد .
نقاط آسیب پذیر (vulnerability) : ضعف های موجود در یک سیستم می باشند که پتانسیل اولیه بروز یک رویداد مخرب را فراهم می نمایند . ضعف در طراحی ، پیکربندی اشتباه ، استفاده از روش های کدینگ غیرایمن مهمترین دلایل ایجاد یک ضعف در سیستم می باشند . ضعف در بررسی صحت داده ورودی توسط کاربر ، نمونه ای از یک لایه آسیب پذیر در یک برنامه است که می تواند زمینه بروز یک تهاجم را فراهم نماید .
تهاجم (attack) : عملیاتی است که محوریت آن سوء استفاده از نقاط آسیب پذیر و پتانسیل های بروز یک رویداد مخرب می باشد . ارسال ورودی مخرب به یک برنامه و یا flooding یک شبکه به منظور از کار انداختن یک سرویس ، نمونه هائی در این زمینه می باشد .
یک تهدید پتانسیل بروز یک رویداد مخرب را فراهم می نماید که می تواند به سرمایه های یک سازمان آسیب برساند |
چگونه می توان یک برنامه وب ایمن را ایجاد نمود ؟
تا زمانی که شناخت مناسبی نسبت به تهدیدات وجود نداشته باشد ، امکان ایجاد یک برنامه وب ایمن وجود نخواهد داشت . بنابراین قبل از هر چیز لازم است که با "مدل تهدیدات " موجود آشنا شویم . هدف مدل فوق، آنالیز معماری و نحوه طراحی برنامه به منظور شناسائی نقاط آسیب پذیری است که ممکن است به صورت تصادفی توسط یک کاربر ناآگاه و یا مهاجمان با اهداف مخرب مورد سوء استفاده قرار گرفته تا با استناد به آنان بتوانند موجودیت و امنیت سیستم را با خطر مواجه نمایند .
پس از آسنائی با تهدیدات ، می بایست با بکارگیری مجموعه ای از اصول امنیتی اقدام به طراحی سیستم نمود . در ادامه ، پیاده کنندگان می بایست از روش های ایمن به منظور نوشتن کدهای مطمئن ، مستحکم و قابل اعتماد استفاده نمایند . پس از طراحی و پیاده سازی برنامه ، می بایست از یک شبکه ایمن ، یک host مطمئن و یک پیکربندی مناسب بر روی سرویس دهنده ، استفاده گردد .
ایجاد یک برنامه وب ایمن ، مستلزم اقدامات امنیتی چند جانبه ای است که موفقیت در تمامی آنان ، ایمن بودن برنامه های وب را تضمین خواهد کرد . ایمن سازی شبکه ، host و برنامه ، رئوس مثلث امنیتی ایجاد برنامه های وب ایمن را تشکیل می دهند .
ایمن سازی شبکه ، host و برنامه
به منظور ایجاد برنامه های وب ایمن ، تبعیت از یک رویکرد جامع امری است الزامی . بنابراین ، می بایست امنیت برنامه های وب را در سه لایه متفاوت بررسی و اقدامات لازم را در هر لایه با توجه به جایگاه آن انجام داد . شکل زیر سه لایه مهم به منظور ایجاد برنامه های وب ایمن را نشان می دهد .
وجود یک نقطه آسیب پذیر در شبکه به یک مهاجم اجازه می دهد تا کنترل یک host و یا برنامه را بدست بگیرد . وجود یک نقطه آسیب پذیر در host به یک مهاجم اجازه می دهد تا بتواند کنترل یک شبکه و یا برنامه را بدست بگیرد . وجود یک نقطه آسیب پذیر در برنامه به یک مهاجم اجازه می دهد تا کنترل یک host و یا شبکه را بدست بگیرد . |
در بخش دوم به بررسی هر یک از لایه های فوق خواهیم پرداخت .
ایمن سازی شبکه
شبکه ، نقطه ورود به یک برنامه وب است و اولین لایه حفاظتی به منظور کنترل دستیابی به سرویس دهندگان متعدد موجود در محیط عملیاتی را فراهم می نماید . با این که سرویس دهندگان توسط سیستم های عامل نصب شده بر روی خود حفاظت می گردند ولی نمی بایست به این موضوع صرفا" اکتفاء نمود و لازم است که تدابیر لازم به منظور حفاظت آنها در مقابل سایر تهدیدات ( نظیر ارسال سیلابی از بسته های اطلاعاتی از طریق لایه شبکه ) نیز اندیشیده گردد .
ایمن سازی شبکه ، شامل حفاظت از دستگاه های شبکه ای و داده مبادله شده بر روی آنها می باشد . روتر ، فایروال و سوئیچ عناصر اولیه زیرساخت یک شبکه را تشکیل می دهند . شکل زیر نحوه استفاده از عناصر فوق را در یک شبکه نشان می دهد .
عناصر شبکه : روتر ، فایروال و سوئیچ
یک برنامه وب بر روی یک زیرساخت شبکه ای ایمن فعالیت و به کاربران خود سرویس های لازم را ارائه می نماید . برای ایمن سازی شبکه ، علاوه بر این که شبکه می بایست در مقابل حملات مبتنی بر TCP/IP از خود محافظت نماید ، بلکه لازم است اقدامات متعدد دیگری نیز در این رابطه انجام شود . ایجاد اینترفیس های مدیریتی ایمن، استفاده از رمزهای عبور قدرتمند ، حصول اطمینان از صحت ترافیک ارسالی از جمله اقدامات دیگر در خصوص ایجاد یک شبکه ایمن می باشد . بدین منظور لازم است که پورت ها و پروتکل های استفاده شده در هر لایه به دقت بررسی و در صورتی که وجود آنها غیرضروری تشخیص داده شود و یا استفاده از آنها زمینه بروز تهدیداتی را فراهم می نماید ، می بایست در همان لایه با آنان برخورد و از یک راهکار مناسب امنیتی استفاده گردد .
وجود ضعف امنیتی در یک شبکه زمینه بروز تهدیدات متعددی را فراهم می نماید . بدون شناسائی اینگونه تهدیدات ، امکان مقابله منطقی با آنان وجود نخواهد داشت .
تهدیدات
یک مهاجم به منظور برنامه ریزی حملات خود به دنبال دستگاه های شبکه ای است که بر روی آنها پیکربندی ضعیفی اعمال شده است . تنظیمات ضعیف پیش فرض ، دستیابی بدون ضابطه به منابع موجود بر روی شبکه ، وجود دستگاه هائی که به درستی patch و یا بهنگام نشده اند، حفره های امنیتی متعددی را در یک شبکه ایجاد می نماید . وجود حفره های امنتیی فوق و عدم برخورد مناسب با آنها ، احتمال موفقیت مهاجمان را افزایش می دهد .
مهمترین تهدیدات در یک شبکه عبارتند از :
با آگاهی از ماهیت هر یک از تهدیدات فوق و نحوه تاثیر آنها بر روی عملکرد شبکه ، می توان امکانات حفاظتی و تدافعی مناسبی را در یک شبکه پیش بینی و پیاده سازی نمود.
در ادامه به بررسی مختصر هر یک از تهدیدات فوق خواهیم پرداخت .
جمع آوری اطلاعات
مهاجمان در اولین مرحله ،اقدام به جمع آوری اطلاعات در رابطه با اهداف خود می نمایند . جمع آوری اطلاعات می تواند باعث افشای اطلاعات توپولوژی شبکه ، پیکربندی سیستم و دستگاه های شبکه ای گردد . یک مهاجم می تواند در ادامه با استفاده از اطلاعات جمع آوری شده بر روی نقاط آسیب پذیر متمرکز و از حفره های امنیتی موجود در جهت تامین خواسته های مخرب خود استفاده نماید .
نقاط آسیب پذیر
متداولترین نقاط آسیب پذیری که شبکه را مستعد این نوع از حملات می نماید عبارتند از :
حملات
متداولترین حملات مبتنی بر "جمع آوری اطلاعات" عبارتند از :
استفاده از درخواست های broadcast برای شمارش تعداد host موجود بر روی یک subnet
پیشگیری و مقابله با تهدیدات
به منظور پیشگیری و مقابله با این نوع حملات می توان از روش های زیر استفاده نمود :
sniffing
sniffing که به آن "استراق سمع " نیز گفته می شود ، مانیتورینگ ترافیک شبکه برای داده هائی نظیر رمزهای عبور ( رمزنشده) و یا اطلاعات پیکربندی است . با استفاده از یک برنامه packet sniffer ، می توان به سادگی تمامی ترافیک plain text ( رمز نشده ) را مشاهده نمود .
نقاط آسیب پذیر
متداولترین نقاط آسیب پذیری که شبکه را مستعد این نوع از حملات می نماید عبارتند از :
حملات
مهاجمان با قرار دادن یک packet sniffer بر روی شبکه می توانند تمامی ترافیک را capture و آنالیز نمایند .
پیشگیری و مقابله با تهدیدات
به منظور پیشگیری و مقابله با این نوع حملات می توان از روش های زیر استفاده نمود :
Spoofing
spoofing ، که به آن "هویت مبهم " نیز گفته می شود ، به کتمان هویت واقعی بر روی شبکه اطلاق می گردد . در این رابطه از یک آدرس مبداء جعلی که بیانگر آدرس اولیه صادرکننده پیام نمی باشد ، استفاده می گردد . در بسیاری موارد از spoofing به منظور مخفی کردن منبع بروز یک تهاجم استفاده می شود. در برخی موارد که دستیابی به منابع موجود بر روی شبکه بر اساس آدرس متقاضیان انجام می شود ، مهاجمان با تغییر آدرس مبداء سعی می نمایند به اینگونه از منابع دستیابی پیدا نمایند .
نقاط آسیب پذیر
متداولترین نقاط آسیب پذیری که شبکه را مستعد این نوع از حملات می نماید عبارتند از :
ماهیت غیرایمن ذاتی پروتکل TCP/IP
ضعف در فیلترینگ بسته های اطلاعاتی ورودی و خروجی : ترافیک ورودی و خروجی شبکه به درستی کنترل و فیلتر نمی گردد (ingress & egress filtering )
حملات
یک مهاجم می تواند از ابزارهای متعددی به منظور تغییر آدرس بسته های خروجی استفاده نماید تا اینچنین وانمود نماید که آنها از یک host و یا شبکه دیگر ارسال شده اند .
پیشگیری و مقابله با تهدیدات
به منظور پیشگیری و مقابله با این نوع حملات می توان از از فیلترینگ egress و ingress بر روی روتر های perimeter استفاده نمود .
session Hijacking
با استفاده از این نوع حملات که به آنها man in middle نیز گفته می شود ، مهاجمان می توانند از یک برنامه برای تغییر شکل ظاهری خود به عنوان یک سرویس گیرنده و یا سرویس دهنده موجه استفاده نمایند . بدین ترتیب ، یک سرویس دهنده و یا سرویس گیرنده واقعی فریب خورده و فکر می کنند که با یک host معتبر و مجاز ارتباط برقرار نموده اند . در واقع ، این نوع کامپیوترهای میزبان متعلق به مهاجمان بوده که سعی می نمایند با دستکاری شبکه خود را به عنوان مقصد مورد نظر وانمود نمایند . از این نوع حملات به منظور آگاهی از اطلاعات logon و دستیابی به سیستم و سایر اطلاعات محرمانه استفاده می گردد .
نقاط آسیب پذیر
متداولترین نقاط آسیب پذیری که شبکه را مستعد این نوع از حملات می نماید عبارتند از :
حملات
یک مهاجم می تواند از ابزارهای متعددی به منظور انجام عملیات spoofing ، تغییر روتینگ و دستکاری بسته های اطلاعاتی استفاده نماید.
پیشگیری و مقابله با تهدیدات
به منظور پیشگیری و مقابله با این نوع حملات می توان از روش های زیر استفاده نمود :
DoS
در این نوع از حملات ، امکان دستیابی کاربران مجاز به یک سرویس دهنده و یا سرویس خاص سلب می گردد .در حملات DoS لایه شبکه ، معمولا" مهاجمان با ارسال سیلابی از بسته های اطلاعاتی امکان استفاده از یک سرویس توسط سایر کاربران را سلب می نمایند . علاوه بر مشکل فوق ، در چنین مواردی از پهنای باند و منابع موجود بر روی شبکه استفاده بهینه نخواهد شد .
نقاط آسیب پذیر
متداولترین نقاط آسیب پذیری که شبکه را مستعد این نوع از حملات می نماید عبارتند از :
حملات
متداولترین حملات DoS عبارتند از :
پیشگیری و مقابله با تهدیدات
به منظور پیشگیری و مقابله با این نوع حملات می توان از روش های زیر استفاده نمود :
بدون آنالیز صحیح تهدیدات ، |
برای ایمن سازی شبکه از کجا می بایست شروع کرد ؟
برای ایمن سازی شبکه می بایست بر روی هر یک از دستگاه های استفاده شده در شبکه متمرکز و پس از بررسی چالش های امنیتی هر یک ، از راهکارهای خاصی به منظور ایمن سازی آنها استفاده نمود.
همانگونه که اشاره گردید در زیرساخت شبکه از روتر ، فایروال و سوئیچ استفاده می گردد که می بایست ضمن آشنائی با جایگاه آنها در یک شبکه با نحوه عملکرد و ایمن سازی آنها از منظر برنامه های وب نیز آشنا شویم . در بخش سوم به بررسی موارد فوق خواهیم پرداخت .
اشاره : | ||||||||||||||||||||||||||||||||||||||||||
منبع: اینترنت ادوایزر
خیلی وقتها باید اسناد چاپی را به فرم دیجیتالی درآورد تا در وب قابل استفاده باشد. در این مواقع، انواع فرمتهای گرافیکی وجود دارند که میتوانید انتخاب کنید. گاهی اوقات باید فرمت TXT را به HTML تبدیل کنید، و گاهی مجبورید محتوای HTML یک سایت را به شکل TXT بیرون بکشید تا در اضافاتی که برای زیباسازی آن استفاده شده گرفتار نشوید. خوشبختانه، برنامههایی وجود دارند که انجام این کارها را بدون هیچ زحمتی برای شما فراهم میسازند.
| ||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||
خواندن PDF
برای دیدن یک فایل PDF باید از نظر نرم افزار Adobe Acrobat Reader استفاده کنید. این نرم افزار از طریق سایت www.adobe.com/acrobat قابل دانلود است.
همچنین همراه بسیاری از CD ها هم وجود دارد. برای دانلود کردن یک فایل PDF بهتر است به جای کلیک کردن بر روی لینک آن ، ابتدا کلیک راست کنید و سپس Save target as را انتخاب نمایید تا ابتدا فایل بر روی کامپیوتر شما ذخیره گردد و بعد براحتی بتوانید آن را باز کنید و محتویات درونی اش را مشاهده نمایید.
ساختن یک فایل PDF
برای ساختن فایلهای PDF راههای مختلفی وجود دارد. تقریبا هر فایلی که قابل چاپ کردن باشد را می توان به PDF تبدیل کرد.
به این ترتیب می توانید فایلهای نرم افزارهای مختلف را به این فرمت تبدیل کنید تا دیگران برای دیدن فایلهای شما نیازی به نصب آن نرم افزارها نداشته باشند. یکی از راههای ساختن PDF استفاده از نصب نرم افزار Adobe Acrobatاست.
دقت کنید که این نرم افزار با Adobe Acrobat Reader متفاوت است. Reader فقط برای خواندن فایلهای PDF است ولی Adobe Acrobat که بعضی اوقات به آن Adobe Acrobat Writer هم می گویند برای خواندن ، ویرایش و ایجاد فایلهای PDF است. اگر فایلهای PDF را با نرم افزار Adobe Acrobat باز کنید می توانید آنها را تغییر هم بدهید. برای ساخت فایل PDFو در حقیقت تبدیل فایلهای دیگر به PDF از Acrobat Distiller که به همراه Adobe Acrobat نصب می شود می توان استفاده کرد.
البته نرم افزار Acrobat Distiller به تنهایی هم وجود دارد و می توانید به جای نصب Adobe Acrobat فقط Acrobat Distiller را نصب کنید. که در این صورت برای خواندن فایلهای PDF باید Adobe Acrobat Reader را هم نصب نمایید.
به همراه Acrobat Distiller چاپگری با همین نام بر روی کامپیوتر نصب می شود. هر فایلی را که می خواهید به PDF تبدیل کنید با نرم افزار خودش آن را باز کنید و فایل را چاپ کنید. چاپگر Acrobat Distiller را به جای چاپگر معمول خود انتخاب نمایید تا مسیر ذخیره فایل PDF از شما پرسیده شود و فایل PDF درست شود.
این روش هر چند بسیار ساده و راحت است ولی ممکن است بعضی اوقات با مشکل مواجه شود و فایل PDF درست نکند. مثلا گاهی اوقات این روش نمی تواند با بعضی از فونتهای استفاده شده در فایل شما بخوبی کار کند و با پیغام خطا مواجه شوید. راه دیگر ساختن فایلهای PDF ، استفاده از نرم افزار PDF 995 است.
این نرم افزار را می توانید از طریق سایت WWW.Pdf995.com دانلود کنید. با نصب این نرم افزار کم حجم ، یک چاپگر با نام PDF 995 بر روی ویندوز شما نصب می گردد که می توانید با انتخاب این چاپگر در موقع چاپ یک فایل ، فایل PDF تولید کنید. مطمئن ترین روش (البته با دردسر بیشتر) برای ساخت PDF استفاده از یک چاپگر Postscript است.
برای نصب چنین چاپگری در ControlPanel، Printers را باز کنید و بر روی AddPrinter دو بار کلیک کنید. در مرحله بعدی (LocalPrinter انتخاب پیش فرض) را انتخاب کرده و در قسمت Selectthe Printer Port از میان فهرست نمایش داده شده ، آخرین آنها یعنی File:Printtofile را انتخاب نمایید. در مرحله بعد که انتخاب چاپگر است یک چاپگر Postscript مثلا HPLaserJet5P/5MPPostscript را انتخاب نمایید. در مرحله بعد اگر می خواهید این چاپگر ، چاپگر پیش فرض شما باشد Yes و در غیر این صورت No را انتخاب نمایید. چند بار کلید Next را بزنید تا نصب این چاپگر تمام شود.
هم اکنون برای ساختن فایل PDF ابتدا در نرم افزار مورد نظر فایل را با استفاده از چاپگری که نصب کرده اید چاپ کنید. البته باید مسیر و نام ذخیره فایل را مشخص کنید تا یک فایل prn بر روی هارد ذخیره شود. سپس می توانید این فایل را با استفاده از نرم افزار AcrobatDistiller به فایل PDF تبدیل کنید. برای این کار می توانید نرم افزار AcrobatDistiller را باز کنید و سپس با ماوس prn را بر روی نرم افزار قرار دهید.
Distiller یک فایل PDF در کنار فایل prn شما می سازد که می توانید آن را باز کنید و محتویات آن را ببینید. سایتهایی هم نظیر www.pdfconverter.com هم وجود دارند که به صورت Online بعضی از فایلها نظیر فایلهای Word و html را به PDF تبدیل می کنند.
البته این سایتها معمولا با فایلهای فارسی مشکل دارند. همچنین بعضی از نرم افزارها امکانات خاصی برای ساختن فایلهای PDF دارند و در قسمت SaveAs و یا Export آنها می توان فایلهای PDF ساخت.
پردازش های سمت سرویس گیرنده از گذشته تاکنون
با توجه به این که پردازش های سمت سرویس گیرنده در برنامه های وب می بایست مستقل از نوع پلت فرم باشند ، بدیهی است که تمامی تلاش های انجام شده در این عرصه ، می بایست متمرکز بر روی برنامه های مرورگر باشد تا با ایجاد پتانسیل هائی در آنها ، امکان انجام پردازش های سمت سرویس گیرنده فراهم گردد . ظهور زبان های اسکریپت نویسی نظیر جاوااسکریپت و تجهیز مرورگرها به برنامه های مفسر مربوطه از جمله اقدامات عملی دراین عرصه است . استفاده از زبان جاوااسکریپت به منظور کدینگ پردازش های سمت سرویس گیرنده دارای قدمتی چندین ساله است . در ادامه ، قابلیت های جدیدی به مرورگرها اضافه گردید تا پیاده کنندگان بتوانند به کمک آنان برنامه های وب سمت سرویس گیرنده را ایجاد نمایند . هم اینک ، تمامی مرورگرهای متداول از یک مدل شی گراء موسوم به DOM ( برگرفته از document object model ) استفاده می نمایند و تعداد اندکی از آنها از یک ویژگی جدید با نام XMLHTTP استفاده می نمایند که به کمک آن ، سرویس گیرندگان و سرویس دهندگان می توانند بدون نیاز به انجام یک postback کامل و round trip با یکدیگر و به صورت مستقیم ارتباط برقرار نمایند.
XMLHTTP ، شامل مجموعه ای API ( رابط برنامه نویسی ) است که امکان ارسال و یا دریافت داده به صورت باینری ، HTML و XML را از سرویس دهندگان وب بر روی اینترنت و به کمک پروتکل HTTP فراهم می نماید . در مواردی که نیاز به داده موجود در سمت سرویس دهنده می باشد ، XMLHTTP به صورت پیوسته اقدام به ارسال درخواست خود برای سرویس دهنده می نماید تا آخرین اطلاعات را بدون نیاز به refresh کردن مدام مرورگرها ، بازیابی نماید . در واقع ، به کمک فن آوری فوق ، سرویس گیرندگان قادر به مبادله غیرهمزمان با سرویس دهنده بوده و می توانند اقدام به ارسال و یا دریافت داده XML بدون نیاز به انجام یک round trip کامل که باعث تولید مجدد یک صفحه می گردد ، نمایند .
ماحصل این تحولات ، ظهور نسل جدیدی از برنامه های وب نظیر Microsoft Virtual Earth و Microsoft Windows Live است . ایجاد چنین برنامه های وبی کار ساده ای نخواهد بود و پیاده کنندگان می بایست شناخت مناسبی نسبت به جاوااسکریپت و مدل DOM داشته باشند که ممکن است در هر مرورگر متفاوت باشد . علاوه بر این ، جاوااسکریپت تمامی ویژگی های یک زبان شی گراء را ارائه نمی نماید و بسیاری از ملزومات مورد نیاز پیاده کنندگان برنامه های وب در فریمورک دات نت را تامین نمی نماید ( نظیر type-safe ) .
ایجاد برنامه های وب با تاکید بر انجام پردازش سمت سرویس گیرنده ، نیازمند ملزوماتی نظیر |
AJAX ( برگرفته از asynchronous JavaScript and XML )
پیاده سازی برنامه های وب با استفاده از فن آوری های اشاره شده ( اسکریپت نویسی سمت سرویس گیرنده و مبادله غیرهمزمان با سرویس دهنده ) ، AJAX نامیده می شود . AJAX ، پیاده کنندگان را قادر به تولید صفحاتی می نماید که از توان پاسخگوئی بسیار مطلوبی در سمت سرویس گیرنده متناسب با رویداد ایجاده شده ، برخوردار می باشند . چراکه آنها از اسکریپت های سمت سرویس دهنده برای دستیابی و مدیریت عناصر بخش رابط کاربر استفاده می نمایند . علاوه بر این ، با توجه به مبادله غیرهمزمان داده به منظور ارسال و دریافت داده ، امکان انجام عملیات مورد نظر بر روی داده بدون وقفه و ازدست دادن state وجود خواهد داشت . Microsoft Virtual Earth و برنامه سرویس گیرنده نامه های الکترونیکی Outlook Web Access ، دو نمونه از برنامه های سبک AJAX ، می باشند .
Atlas : تلاشی در جهت ایجاد یک پلت فرم پیاده سازی جامع
فن آوری جدید ASP.NET با نام Atlas ، مجموعه ای از فن آوری های مایکروسافت را شامل می شود که با تمرکز بر روی اصول AJAX ، سعی در توسعه و بهبود آن را دارد .
Atlas ، یک فن آوری جدید در عرصه پیاده سازی برنامه های وب ASP.NET است که کتابخانه های اسکریپت سرویس گیرنده را با فریمورک پیاده سازی مبتنی بر سرویس دهنده ASP.NET 2.0 ترکیب می نماید . در واقع ، Atlas به پیاده کنندگان برنامه های وب یک پلت فرم مناسب به منظور پیاده سازی صفحات وب مبتنی بر سرویس گیرنده را ارائه می نماید که قبلا" مشابه آن در خصوص صفحات وب مبتنی بر سرویس دهنده توسط ASP.NET ارائه شده بود . با توجه به این که Atlas ، به عنوان یک پتانسیل اضافه در کنار ASP.NET مطرح می باشد ، بدیهی است که کاملا" سازگار با سرویس های مبتنی بر سرویس دهنده باشد . با استفاده از Atlas ، می توان بخش قابل توجهی از پردازش های مورد نیاز یک برنامه را به سمت سرویس گیرنده انتقال داد ( fat-client ) . در چنین مواردی ، امکان ارتباط سرویس گیرنده با سرویس دهنده در background فراهم می گردد. ماحصل این فن آوری ، ایجاد برنامه های وبی است که علاوه بر ارائه امکانات مناسب در لایه رابط کاربر ( UI ) ، دارای توان پاسخگوئی بالائی می باشند و به سادگی می توانند با سرویس دهنده ارتباط برقرار نمایند .
مفاهیم فنی اولیه AJAX
در AJAX ، پیاده کنندگان می توانند سرویس های وب را بطور غیرهمزمان و از طریق اسکریپت های سمت سرویس گیرنده و با استفاده از شی XMLHTTPRequest فراخوانده تا اطلاعات به عنوان داده XML بسته بندی و در ادامه آنها را بر روی شبکه ارسال نمایند . بدین منظور شی XMLHTTPRequest یک شی پراکسی را ارائه می نماید تا به کمک آن امکان فراخوانی از راه دور و مبادله داده فراهم گردد . در فن آوری AJAX از زبان های اسکرپیت سمت سرویس گیرنده نظیر جاوااسکریپت بطرز گسترده ای استفاده می گردد . از جاوااسکریپت در مواردی نظیر فراخوانی از راه دور روتین ها ، انجام پردازش های مورد نیاز یک برنامه در سمت سرویس گیرنده و ایجاد ویژگی های پیشرفته ای در سطح لایه رابط کاربر استفاده می شود .
AJAX علاوه بر جاوااسکریپت از چندین فن آوری دیگر در سمت سرویس گیرنده نیز استفاده می نماید :
DOM : به کمک فن آوری فوق ، عناصر موجود در یک صفحه HTML به عنوان مجموعه ای از اشیاء استاندارد ( نظیر document و windows ) در نظر گرفته می شوند . بدین ترتیب ، امکان دستیابی و انجام عملیات دلخواه بر روی آنان از طریق کد فراهم می گردد .
DHTML ( برگرفته از Dynamic HTML ) : فن آوری فوق ، توانمندی HTML را به منظور واکنش مناسب در خصوص عملیاتی که توسط کاربران انجام می شود ( نظیر درج داده ) با استفاده از اسکریپت های سمت سرویس گیرنده و بدون نیاز به یک round trip افزایش می دهد .
رفتارها ، شامل روشی مناسب به منظور برخورد سیستماتیک با عملیاتی نظیر drag and drop در سطح لایه رابط کاربر و مرتبط با عناصر موجود بر روی یک صفحه می باشد .
عناصر : اشیاء سفارشی شده جاوااسکریپت می باشند که پتانسیل های توسعه یافته ای را در سمت سرویس گیرنده ایجاد می نمایند .
چالش های فن آوری AJAX
برنامه نویسی صفحات به سبک AJAX دارای چالش های متعددی است :
عناصر موجود در صفحات وب می بایست متناسب با شرایط هر مرورگر برنامه نویسی گردند ، چراکه هر مرورگر یک نسخه متفاوت از DOM و DHTML را ارائه می نمایند(هر چند این تفاوت ها اندک باشد) .
برنامه نویسی سمت سرویس گیرنده صرفا" با استفاده از جاوااسکریپت انجام می شود . پیاده سازی برخی از پتانسیل های AJAX می تواند برای پیاده کنندگان بسیار پیچیده باشد و نیازمند دانش بالائی در خصوص استفاده از جاوااسکریت است .
جاوا اسکریپت ، ویژگی ها و امکانات مورد نیاز پیاده کنندگان برنامه های دات نت را تامین نمی نماید ( نظیر یک رویکرد شی گراء کامل ) . علاوه بر این ، در این فن آوری از کتابخانه ای نظیر آنچه در پلت فرم دات نت ارائه شده است ، استفاده نمی گردد و برنامه نویسان می بایست تمامی برنامه را از ابتدا کد نمایند .
جاوااسکریپت و پیاده سازی سمت سرویس گیرنده ، عموما" بخوبی در IDEs حمایت نمی گردند .
فن آوری Atlas ، مسائل اشاره شده را با ارائه یک فریمورک کامل برای ایجاد برنامه های وب مبتنی بر سرویس گیرنده برطرف می نماید.
فن آوری Atlas ، |
مفاهیم فنی اولیه معماری Atlas
در ساده ترین حالت ، یک برنامه Atlas ، از کتابخانه های سمت سرویس گیرنده به منظور مدیریت رابط کاربر و فراخوانی عناصر مبتنی بر سرویس دهنده استفاده می نماید . Atlas ، همچنین عناصر سمت سرویس دهنده ای را ارائه می نماید که با سرویس گیرنده مرتبط و می توانند اسکریپت سمت سرویس گیرنده از قبل تعریف شده ای را تولید نمایند .
عناصر سمت سرویس گیرنده Atlas
فن آوری Atlas برای پیاده سازی برنامه های سمت سرویس گیرنده ، از مجموعه ای کتابخانه سمت سرویس گیرنده ( فایل هائی با انشعاب Js . ) استفاده می نماید که پیامد آن تعریف یک رویکرد لایه ای برای ایجاد برنامه های مبتنی بر سرویس گیرنده است . این لایه ها عبارتند از :
لایه مختص مرورگرها : با استفاده از پتانسیل های ارائه شده توسط این لایه ، اسکریپت های Atlas در اکثر مرورگر سازگار بوده و ضرورتی به نوشتن اسکریت های مختص یک مرورگر وجود ندارد .
سرویس های هسته atlas : شامل ضمائمی به جاوااسکریپت نظیر کلاس ها ، namespace ، event handler ، توارث ، نوع های داده و تسلسل اشیاء است . ویژگی های فوق یک مدل برنامه نویسی شی گراء را در اختیار پیاده کنندگان قرار می دهد تا به کمک بتوان علاوه بر سرعت در ایجاد برنامه ها از کد تولید شده نیز بدفعات استفاده نمود.
کتابخانه کلاس پایه Atlas : شامل عناصری نظیر دیباگرها ، Timers ، ردیابی و string buliders است .
لایه شبکه : این لایه با سرویس های مبتنی بر وب و برنامه ها ارتباط برقرار می نماید و مدیریت فراخوانی متدها از راه دور و غیرهمزمان را برعهده می گیرد . لایه فوق ، مدیریت فراخوانی غیرهمزمان برروی XMLHTTP را برعهده گرفته و باعث می گردد که پیاده کنندگان بدون این که درگیر پیچیدگی های موجود شوند با نوشتن چندین خط کد ، متدهای مورد نظر را فراخوانند .
لایه UI : در این لایه قابلیت های سرویس گیرنده Atlas نظیر رفتارها ، گرامر تعریفی Atlas ، عناصر UI و نسبت دهی داده ارائه می گردد .
لایه کنترل ها : این لایه کنترل های مختص atlas را برای پیاده سازی سمت سرویس گیرنده ایجاد می نماید . علاوه بر این که می توان از طریق اسکریپت به این کنترل ها دستیابی داشت ، امکان انجام عملیات متفاوتی نظیر نسبت دهی داده نیز وجود دارد. کنترل های Navigation و data-bound listview نمونه هائی در این زمینه می باشند .
یک مدل برنامه نویسی تعریفی که پیاده کنندگان را قادر می سازد عناصر atlas را با روشی مشابه کنترل های سرویس دهنده ASP.NET ایجاد نمایند .
فن آوری Atlas را می توان |
برای پیاده سازی برنامه های وب سمت سرویس گیرنده ، فن آوری Atlas ویژگی های متعددی را ارائه می نماید . ارائه یک مجموعه API برای پیاده سازی در جاوااسکریپت ، قابلیت سازگاری اتوماتیک با مرورگرها و یک مدل تعریفی برای پیاده سازی سمت سرویس گیرنده ، نمونه هائی در این زمینه می باشند .
عناصر سمت سرویس دهنده Atlas
فن آوری Atlas ، صرفا" در ارتباط با اسکریپت های سمت سرویس گیرنده نمی باشد و از عناصر سمت سرویس دهنده ، سرویس ها و کنترل هائی استفاده می نماید که می توانند با اسکریپت های Atlas سمت سرویس گیرنده مرتبط گردند :
سرویس های وب که ویژگی های ASP.NET نظیر سرویس های پروفایل ، membership ، roles ، personalization و globalization را ارائه می نمایند .
کنترل های سرویس دهنده Atlas که کنترل های سرویس دهنده ASP.NET را reasemble می نمایند ولی اسکریپت های سمت سرویس گیرنده Atlas را منتشر می نمایند . این نوع کنترل ها ارتباط بسیار نزدیکی با کنترل های سرویس دهنده ASP.NET نظیر دکمه ها ، Label و ... دارند .
کنترل های سرویس دهنده Atlas که باعث می گردند جاوااسکریپت رفتارهای سمت سرویس گیرنده را تولید نماید . کنترل های HoverBehavior ، ClickBehavior ، Popup و AutocompleteBehavior نمونه هائی در این زمینه می باشند .
تمامی کنترل های سرویس دهند atlas در ویژوال استودیو نیر قابل استفاده می باشند. بنابراین می توان از آنان در زمان طراحی استفاده نمود ( همانند کنترل های سرویس دهنده ASP.NET ) .
فن آوری Atlas ، اسکریپت نویسی سمت سرویس گیرنده را با پیاده سازی سمت سرویس دهنده ASP.NET یکپارچه می نماید و پیاده کنندگان می توانند از پتانسیل های ASP.NET در سمت سرویس دهنده برای برنامه های Atlas نیز استفاده نمایند .
هدف اولیه فن آوری Atlas ، |
دربخش اول به ضرورت استفاده از اسکریپت های سمت سرویس گیرنده در برنامه های وب اشاره و با نحوه استفاده از اسکریپت های سمت سرویس گیرنده توسط برخی از کنترل های سرویس دهنده ASP.NET به منظور انجام وظایف از قبل تعریف شده ، آشنا شدیم . همچنین ، به این موضوع اشاره گردید که رفتار اسکریپت های سمت سرویس گیرنده در صفحات ASP.NET در برخی موارد با صفحات HTML متفاوت است :
اضافه کردن event handler سمت سرویس گیرنده به کنترل های سرویس دهنده ASP.NET
شناسائی و مراجعه به کنترل های سرویس دهنده از طریق اسکریپت های سمت سرویس گیرنده
افزودن اسکریپت های سمت سرویس گیرنده به صفحه به صورت پویا
ایجاد رویداد کلیک سمت سرویس گیرنده برای کنترل های سرویس دهنده
اشتراک اطلاعات بین اسکریپت های سمت سرویس گیرنده و کدهای سمت سرویس دهنده
فراخوانی کدهای سمت سرویس دهنده از طریق اسکریپت های سمت سرویس گیرنده بدون نیاز به postback
در این بخش به بررسی موارد اول و دوم مورد خواهیم پرداخت .
اضافه کردن event handler سمت سرویس گیرنده به کنترل های سرویس دهنده ASP.NET
با توجه به این که با کنترل های سرویس دهنده ASP.NET در یک صفحه به عنوان element برخورد می شود (نوع عنصر تفسیر شده توسط یک کنترل به زبان نشانه گذاری استفاده شده در یک صفحه بستگی دارد : HTML ، XHTML و یا ... ) ، می توان اسکریپت های سمت سرویس گیرنده event handler را به کنترل ها همانند سایر عناصر موجود در صفحه اضافه نمود . توجه به این موضوع که کنترل چگونه خروجی خود را تفسیر می نماید و کدام خصلت را برای خود رزو نموده است ، حائز اهمیت است .
افزودن event handler سمت سرویس گیرنده به صورت تعریفی
از طریق تگ های کنترل های سرویس دهنده ASP.NET ، می توان با استفاده از Attributes مقادیر مورد نظر خصلت ها را مشخص نمود . مثلا" برای مقداردهی خصلت Text کنترل TextBox ، می توان از تگ زیر استفاده نمود :
<asp:textbox id="TextBox1" runat="server" text="Sample Text" /> |
در صورتی که از یک attribute استفاده گردد که نتوان آن را به یک خصلت خاص map نمود ، ASP.NET در زمان پردازش سمت سرویس دهنده از آن صرفنظر نموده و آن را به عنوان as-is به همراه سایر تگ های HTML تولید شده برای کنترل سرویس دهنده به مقصد مرورگر ارسال می نماید . مثلا" کنترل TextBox دارای خصلتی با نام onKeyup نمی باشد . بنابراین در صورتی که به همراه کنترل TextBox از خصلت فوق استفاده گردد ، ASP.NET بدون انجام هیچگونه واکنشی آن را برای مرورگر سرویس گیرنده ارسال می نماید . با توجه به نحوه برخورد ASP.NET با اینچنین خصلت هائی ، می توان رویدادهآی مورد نظر را به کنترل های سرویس دهنده و از طریق تعریف تگ های مربوطه نسبت داد .
کد زیر نحوه استفاده از یک event handler سمت سرویس گیرنده به همراه کنترل سرویس دهنده TextBox را نشان می دهد . پس از درج هر حرف در TextBox ( بروز رویداد ) ، طول آن در یک عنصر span با نام spanCounter نمایش داده می شود ( event handler ) .
<%@ Page Language="VB"%> |
در صورت ضرورت می توان event handler سمت سرویس گیرنده را در قالب یک تابع سازماندهی تا پس از بروز رویداد ( فشردن یک کلید ) مرتبط با یک کنترل سرویس دهنده ، فعال و وظایف خود را انجام دهد .
<%@ Page Language="VB"%> |
افزودن یک event handler سمت سرویس گیرنده از طریق برنامه و در زمان اجراء
در صورت ضرورت می توان event handler سمت سرویس گیرنده را از طریق برنامه و در زمان اجراء به یک کنترل سرویس دهنده ASP.NET اضافه نمود . استفاده از ویژگی فوق در مواردی مفید است که رویداد و یا کد مرتبط با آن به اطلاعاتی نیاز دارند که صرفا" در زمان اجراء قابل دسترسی است . در چنین مواردی می توان از رویداده Load و یا Init صفحه به منظور اضافه کردن خصلت مورد نظر به یک کنترل استفاده نمود (استفاده از متد Add ) .
کد زیر نحوه اضافه کردن یک خصلت به یک کنترل سرویس دهنده در زمان اجراء و به منظور اجرای یک event handler را نشان می دهد . اسکریپت سمت سرویس گیرنده طول متن تایپ شده در کنترل TextBox را در هر لحظه نمایش می دهد . در اسکریپت فوق ،فرض شده است که صفحه دارای یک عنصر span با نام spanCounter است .
<%@ Page Language="VB"%> |
افزودن یک رویداد onClick سمت سرویس گیرنده به کنترل سرویس دهنده Button
با کلیک بر روی کنترل سرویس دهنده button بلافاصله و به صورت پیش فرض یک postback اتفاق می افتد تا event handler مرتبط با آن در سمت سرویس دهنده اجراء گردد . در صورت ضرورت می توان از خصلت OnClientClick کنترل Button ( کنترل هائی نظیر Button , LinkButton و ImageButton ) ، به منظور معرفی یک event handler استفاده نمود تا پس از کلیک بر روی button ، درابتدا event handler سمت سرویس گیرنده اجراء گردد و در ادامه عملیات postback انجام شود .
کد زیر نحوه اضافه کردن یک رویداد کلیک سمت سرویس گیرنده به کنترل Button را نشان می دهد . پس از کلیک بر روی Button یک پیام ارائه و در صورت تائید ، اطلاعات برای سرویس دهنده ارسال می گردد . ( با کلیک اول ، از یک روتین سمت سرویس گیرنده پرای پاسخگوئی به آْن استفاده می شود و پس از کلیک مجدد بر روی Button نمایش داده شده در جعبه محاوره ای ، اطلاعات برای سرویس دهنده ارسال تا متناسب با شرایط برنامه با آنان برخورد شود) .
<%@ Page Language="VB" %> |
شناسائی و مراجعه به کنترل های سرویس دهنده از طریق اسکریپت های سمت سرویس گیرنده
زمانی که یک کنترل سرویس دهنده ASP.NET تفسیر می گردد ، خصلت ClientID آن در بردارنده خصلت های Id و name عنصر تولید شده است . ( خصلت ClientID به صورت اتوماتیک و همزمان با مقداردهی به خصلت ID مقدار لازم را خواهد گرفت ) . فرض کنید با استفاده از نمونه کد زیر ، یک کنترل سرویس دهنده ASP.NET را ایجاد کرده باشیم :
<asp:textbox id="TextBox1" runat="server" text="Sample Text" /> |
خصلت ClientID ، مقدار TextBox1 را خواهد گرفت و در نهایت نتایج تولید شده زیر برای یک مرورگر مبتنی بر HTML ارسال می گردد :
<input name="TextBox1" type="text" value="Sample Text" id="TextBox1" /> |
بنابراین ، به منظور دستیابی به یک کنترل سرویس دهنده ASP.NET از طریق اسکریپت های سمت سرویس گیرنده ، می توان از خصلت های Id و name استفاده نمود . برای آدرس دهی یک کنترل سرویس دهنده ASP.NET توسط اسکریپت های سمت سرویس گیرنده ، می توان از نام کامل آن نیز استفاده نمود ( fully qualified reference ). در صورتی که کنترل سرویس دهنده فرزند عنصر form در صفحه باشد ، می توان از گرامر زیر به منظور مراجعه به کنترل در اسکریپت های سمت سرویس گیرنده استفاده نمود .
<document.forms[0].TextBox1.value = "New value"; |
گرامر واقعی مورد نیاز برای مراجعه به یک کنترل سرویس دهنده به نوع کنترل و این که آیا کنترل فرزند کنترل دیگری است ، بستگی خواهد داشت .
مراجعه به کنترل ها ئی که درون سایر کنترل ها قرار دارند
برخی کنترل ها ، کنترل های فرزند را درون صفحه تفسیر می نمایند . کنترل های GridView, DetailsView, FormView, DataList , Repeater , user controls و Web Parts نمونه هائی در این زمینه می باشند . در چنین مواردی ، کنترل فرزند ممکن است دارای یک ID منحصربفرد نباشد چراکه کنترل های فرزند در تمپلیتی تعریف شده اند که برای هر سطر نمونه ، کنترل های جدیدی تولید و یا ممکن است کنترل parent از طریق یک منبع خارجی به صفحه اضافه شده باشد ( نظیر کنترل های Web part و user ) . کنترل های parent به منزله naming containers میباشند (توسط INamingContainer پیاده سازی شده اند ). یک naming containers منحصربفرد بودن IDs کنترل های فرزند را تضمین می نماید .
مثلا" می توان یک خصلت ItemTemplate را در کنترل DataList ایجاد و یک کنترل Checkbox را به آن اضافه نمود که مقدار ID آن CheckEnabled در نظر گرفته شده باشد . در زمان تفسیر کنترل DataList ، یک کنترل جدید CheckEnabled برای هر آیتم داده در نظر گرفته می شود . صفحه تفسیر شده نمی بایست شامل چندین نمونه از یک عنصر با نام CheckEnabled باشد ، بنابراین کنترل DataList یک شناسه منحصربفرد برایهر یک از کنترل های فرزند خود ایجاد می نماید .
شناسه های منحصربفرد برای کنترل های فرزند یک naming container با بررسی دو خصلت تولید می گردند . برای هر کنترل فرزند :
خصلت UniqueID کنترل به عنوان خصلت name در نظر گرفته می شود .
خصلت ClientID کنترل به عنوان خصلت Id در نظر گرفته می شود .
هم ClientID و هم UniqueID بر اساس خصلت ID اولیه تولید می گردند تا اطلاعات لازم به منظور تضمین منحصربفرد بودن نتایج در یک صفحه تامین گردد .از مقدار ClientID که در واقع ID عنصر تفسیر شده است ، می توان در اسکریپت های سمت سرویس گیرنده استفاده نمود . پس از اجرای یک صفحه حاوی یک naming container و مشاهده Source آن ، می توان ID تولید شده برای هر یک از کنترل های فرزند را مشاهده نمود .
در بخش سوم به بررسی سایر موارد خواهیم پرداخت .
با توجه به موضوع این مقاله اجازه دهید بر روی ویژگی دوم متمرکز شده و با آن بیشتر آشنا شویم .
واژه "سرویس گیرنده - سرویس دهنده " نشاندهنده این واقعیت است که از شبکه های مبتنی بر سرویس دهندگان به منظور مدیریت اشتراک منابع استفاده می گردد . برای توزیع پردازش از پتانسیل های سخت افزاری و نرم افزاری سرویس دهندگان و سرویس گیرندگان استفاده می گردد و هر یک دارای سهمی در کل پردازش می باشند ( گرچه در توزیع سهم پردازش ، عدالت به درستی رعایت نشده باشد ) .
با توجه به رویکرد فوق، پیاده کنندگان برنامه های وب می توانند به منظور تامین خواسته های یک برنامه از پتانسیل های پردازش سمت سرویس دهنده و یا سمت سرویس گیرنده استفاده نمایند . برای تحقق پردازش های سمت سرویس دهنده و سرویس گیرنده از فن آوری های متعددی استفاده می گردد .
ASP.NET ، یک فن آوری سمت سرویس دهنده است و نمی تواند مستقیما" با مرورگر تعامل و یا ارتباط داشته باشد .به عنوان نمونه ، در ASP.NET مکانیزمی وجود ندارد که بتوان با استفاده از آن داده تایپ شده از طریق صفحه کلید توسط کاربر در برنامه مرورگر را دریافت ، به رویدادهای موس پاسخ و عملیاتی را انجام داد که مستلزم تعامل مستقیم با کاربر می باشند . ASP.NET صرفا" می تواند نتایج اینچنین تعاملاتی را پس از ارسال صفحه مشاهده و از آنان استفاده نماید و قادر به پاسخگوئی مستقیم به رویدادهای ایجاد شده در سطح مرورگر نمی باشد .
به منظور برخورد و مدیریت تعامل با مرورگر و رویدادهای محقق شده در آن سطح ، بهترین گزینه استفاده از اسکریپت های سمت سرویس گیرنده است که توسط یکی از زبان های اسکریپت نویسی نظیر جاوااسکریپت نوشته می گردند . اسکریپت های سمت سرویس گیرنده در مرورگر اجراء شده و می توانند بلافاصله نسبت به عملیات انجام شده توسط کاربر از خود واکنش نشان دهند . مثلا" با استفاده از اسکریپت های سمت سرویس گیرنده می توان یک افکت rollover را ایجاد و یا واکنش مناسبی را در زمان حرکت موس بر روی یک button و یا یک آیتم خاص موجود در منو انجام داد .
اسکریپت های سمت سرویس گیرنده توان عملیاتی پیاده کنندگان را به منظور برخورد با رویدادهائی که در سطح لایه رابط کاربر محقق می شوند و لازم است که بلافاصله به آنان پاسخ داده شود ، افزایش می دهد .
کنترل های سرویس دهنده ASP.NET و اسکریپت های سمت سرویس گیرنده
تعدادی از کنترل های سرویس دهنده ASP.NET به منظور انجام وظایف از قبل تعریف شده خود نیازمند استفاده از اسکریپت های سمت سرویس گیرنده می باشند . به عنوان نمونه کنترل LinkButton برای انجام فرآیند Postback نیازمند استفاده از اسکریپت های سمت سرویس گیرنده است . کد زیرنحوه استفاده ازکنترل LinkButton را نشان می دهد . ( پس از کلیک بر روی آن یک متن در کنترل label نمایش داده می شود) .
<%@ Page Language="VB" AutoEventWireup="True" %> |
تحقق برخی از پتانسیل و قابلیت های صفحات ASP.NET نیز در ارتباط با اسکریپت های سمت سرویس گیرنده است و لازم است با نحوه استفاده کنترل های سرویس دهنده ASP.NET از اسکریپت های سمت سرویس گیرنده آشنا شویم چراکه از این طریق برداشت ما از نحوه تاثیر اسکریپت های سمت سرویس گیرنده بر روی صفحات وب ASP.NET شکل واقعی و منطقی خود را پیدا خواهد کرد .
اسکریپت های سمت سرویس گیرنده مورد نیاز کنترل های سرویس دهنده ASP.NET به صورت اتوماتیک به صفحه اضافه می گردند. توجه داشته باشید که اسکریپت سمت سرویس گیرنده که به صورت اتوماتیک برای کنترل های سرویس دهنده ایجاد می گردد ، مستقل از سایر اسکریپت های سمت سرویس گیرنده ای است که توسط پیاده کنندگان نوشته می گردد .
عناصر زیر از اسکریپت های سمت سرویس گیرنده استفاده می نمایند ( کنترل و یا برخی خصلت های مرتبط با یک کنترل) :
کنترل های Page .HtmlForm و Panel : خصلت های DefaultFocus ، DefaultButton و MaintainScrollPositionOnPostback نیازمند استفاده از اسکریپت های سمت سرویس گیرنده می باشند .
کنترل های LinkButton, ImageButton و HtmlButton از اسکریت های سمت سرویس گیرنده به منظور حمایت از رویداد Postback استفاده می نمایند. توجه داشته باشید که کنترل های Button Web server control، HtmlInputButton و HtmlInputImage به اسکریت های سمت سرویس گیرنده نیاز ندارند .
Calendar : کنترل فوق از کنترل LinkButton به منظور پیاده سازی حرکت در بین روز ، هفته و ماه استفاده می نماید . کنترل LinkButton از اسکریپت های سمت سرویس گیرنده برای رویداد postback استفاده می نماید . در صورتی که از کنترل calendar صرفا" به منظور نمایش یک ماه بدون امکان انتخاب و یا حرکت استفاده می گردد ، کنترل فوق نیازی به استفاده از اسکریت هآی سمت سرویس گیرنده ندارد .
DetailsView : در صورتی که کنترل شامل دکمه هائی باشد که به عنوان کنترل های LinkButton پیکربندی شده باشند ( برای ویرایش ، paging و ...)، به منظور انجام عملیات فوق از اسکریپت های سمت سرویس گیرنده استفاده می گردد . در صورتی که خصلت EnablePagingCallbacks فعال و مقدار آن True باشد ، از اسکریپت های سمت سرویس گیرنده به منظور مدیریت callback استفاده می گردد .
GridView : در صورتی که کنترل شامل دکمه هائی است که به عنوان کنترل های LinkButton پیکربندی شده باشند ( برای ویرایش ، paging و ...) ، به منظور انجام عملیات فوق از اسکریپت های سمت سرویس گیرنده استفاده می گردد . از اسکریپت های سمت سرویس گیرنده به منظور مرتب سازی و paging استفاده می گردد (در صورت حمایت کنترل منبع داده مرتبط با آن ). در صورتی که خصلت EnablePagingCallbacks فعال و مقدار آن True باشد ، از اسکریپت های سمت سرویس گیرنده به منظور مدیریت callback استفاده می گردد .
Label : خصلت AssociatedControlID به همراه خصلت AccessKey اسکریپت های سمت سرویس دهنده ای را در پاسخ به keyboard shortcut تولید می نمایند. در صورتی که خصلت های فوق مقداردهی نشده باشند ، کنترل Label نیازی به استفاده از اسکریپت های سمت سرویس گیرنده ندارد .
Menu: از اسکریپت های سمت سرویس گیرنده برای باز وبستن آیتم های منو ، نمایش پانل های pop-out و کنترل نمایش زمانی که کاربر اشاره گر موس را بر روی آیتم های موجود در منو قرار می دهد ، استفاده می گردد .
TreeView ، از اسکریپت های سمت سرویس گیرنده به منظور باز و بستن گره ها استفاده می نماید .
هر نوع کنترل سرویس دهنده ای که خصلت PostBack آن true باشد : رفتار خصلت AutoPostBack برای کنترل های غیر button با استفاده از اسکریپت های سمت سرویس گیرنده پیاده سازی می گردد .
کنترل های Web Part از اسکریپت های سمت سرویس گیرنده به منظور حمایت از Drag-and-drop ، افزودن کنترل های Web part به Zones و Verbs و صدور و یا ورود توانمندی ها استفاده می گردد .
کنترل های Validator ( شامل CompareValidator، CustomValidator ، RangeValidator ، RegularExpressionValidator ، RequiredFieldValidator ) ، از اسکریت های سمت سرویس گیرنده به منظور ارائه پاسخ فوری پس از بررسی اعتبار داده استفاده می نمایند. در صورتی که سرویس گیرنده از اسکریپت حمایت نمی نماید ، validation صرفا" بر روی سرویس دهنده اجراء خواهد شد .
هر متد و یا خصلتی که بر روی کنترل ها focus می نماید ، نظیر متد Focus بر روی کنترل ها و متد SetFocus صفحه : از اسکریپت های سمت سرویس گیرنده به منظور تنظیم focus بر روی کنترل مورد نظر استفاده می گردد .
اسکریت های سمت سرویس گیرنده مورد نیاز برای هر یک از کنترل ها و اعضاء به صورت اتوماتیک تولید و به همراه صفحه ارسال می گردد .
در برخی موارد ممکن است کاربران امکان استفاده از اسکریپت را در مرورگر خود غیرفعال نمایند ( اقدامی در جهت افزایش ایمنی سیستم ) . در صورت انجام این کار ، نمی توان از پتانسیل های ارائه شده توسط اسکریپت های سمت سرویس گیرنده استفاده نمود و بدیهی است که برخی کنترل ها نظیر کنترل LinkButton ، بطور کامل از کار بیافتد و یا قابلیت های خصلت AutoPostBack غیرفعال گردد . برخی کنترل ها از وضعیت فوق کمتر متاثر شده و در شرایط خاصی می توانند عملیات خود را انجام دهند . مثلا" کنترل های Validation می توانند در صورت بروز مشکل در خصوص اجرای اسکریپت های سمت سرویس گیرنده ، آنان را سمت سرویس دهنده اجراء نمایند ( با این تفاوت که به دلیل اجرای آنان بر روی سرویس دهنده به کاربر سریعا" پاسخ داده نمی شود ) .
استفاده از اسکریپت های سمت سرویس گیرنده توسط پیاده کننده در صفحات ASP.NET
با توجه به این که رفتار صفحات ASP.NET در برخی موارد مشابه صفحات HTML است ، می توان اسکریپت های سمت سرویس گیرنده خود را به صفحات ASP.NET اضافه نمود . در صفحات ASP.NET از اسکریپت های سمت سرویس گیرنده به منظور پاسخ به رویدادهای محقق شده در سطح لایه رابط کاربر، حمایت می گردد . استفاده از اسکریپت های سمت سرویس گیرنده در یک صفحه ASP.NET همانند سایر صفحات HTML است . با افزودن یک بلاک script به صفحه امکان نوشتن اسکریپت های سمت سرویس گیرنده فراهم می گردد . پیاده کنندگان می توانند از اسکریپت های سمت سرویس گیرنده به منظور نوشتن event handler به منظور پاسخ به رویدادهای محقق شده در سمت سرویس گیرنده نظیر رویداد onload صفحه نیز استفاده نمایند . زمانی که یک صفحه ASP.NET در مرورگر اجراء می گردد ، با استفاده از اسکریپت های سمت سرویس گیرنده می توان عناصر موجود بر روی صفحه را آدرس دهی و متناسب با رویداد محقق شده ، مدیریت آنان را در سمت سرویس گیرنده برعهده گرفت .
استفاده از اسکریپت های سمت سرویس گیرنده در صفحات ASP.NET نسبت به صفحات HTML در برخی موارد متفاوت است :
اضافه کردن event handler سمت سرویس گیرنده به کنترل های سرویس دهنده ASP.NET
مراجعه به کنترل های سرویس دهنده از طریق اسکریپت های سمت سرویس گیرنده
افزودن اسکریپت های سمت سرویس گیرنده به صفحه به صورت پویا
ایجاد رویداد کلیک سمت سرویس گیرنده برای کنترل های سرویس دهنده
اشتراک اطلاعات بین اسکریپت های سمت سرویس گیرنده و کدهای سمت سرویس دهنده
فراخوانی کدهای سمت سرویس دهنده از طریق اسکریپت های سمت سرویس گیرنده بدون نیاز به postback
در بخش دوم به بررسی هر یک از موارد فوق خواهیم پرداخت .
میتوانید با استفاده از روشـــــی آسان، کامپیوتر خــود را قفل کنیـــــد؛ منظور از قفل کردن کامپیوتر، بردن ویندوز به حالتی است کـــــه برای استفاده از آن مجبـــور باشید مانند زمان راه اندازی سیستم، کلمه عبـــــور خـــــود را وارد کنید، با این تفاوت که این فرآیند بسیار سریع انجام میشود. در ادامه به شما خواهیم آموخت کـــــه چگونه میتوان آیکنی بدین منظور در دسک تاپ ایجاد کرد.
در ناحیـــــهای خـــــالی از دسکتاپ سیستم خـــــود، کلیـــــک راست کرده و سپس از منـــــوی ظاهـــــر شـــــده، به ترتیب گزینههای New و Shortcut را انتخاب کنید.حــــــــــال در کــــــــــادر محــــــــــاورهای Create Shortcut و در فیلـــــد Type the location of the item عبــــــــــارت rundll32user32.dll,LockWorkStation را تـــــایپ کنید.
سپـــــــــــــــس روی دکمــــــــــه Next کلیــــــــــک کنیــــــــــد. در فیـــــلـــــد Type a name for this shortcut، عبـــــارت Lock یا هر عبارت مورد نظر دیگر را تایپ کرده و پس از آن روی دکمه Finish کلیک کنید.
با انجام ایـــــن کار آیکنی در دسکتاپ شما ایجـــــاد خواهد شد. هـــــر زمان که روی این آیکن دابل کلیک کنید، دسکتاپ شما قفل شده و برای ورود مجدد به سیستم بایـــــد دکمههای Ctrl + Alt + Del را فشرده و کلمه عبور خود را وارد کنید.
در بخش اول به امکانات ASP کلاسیک ، ASP.NET 1.x و ASP.NET 2.0 در خصوص تائید و اعطاء مجوزهای لازم به کاربران به منظور استفاده از تمام و یا بخش هائی خاص از یک وب سایت اشاره گردید . در این بخش به بررسی سرویس جدید membership در ASP.NET 2.0 و نحوه استفاده از آن در برنامه های وب خواهیم پرداخت . قبل از هر چیز اجازه دهید مجددا" این نکته را یادآور شویم که فرآیند Authentication در ASP.NET 2.0 از طریق سرویس membership و فرآیند Authorization از طریق سرویس Roles انجام می شود.
تائید کاربران در ASP.NET 2.0
ASP.NET 2.0 ، سرویس membership را به منظور تائید کاربران جهت دستیابی به تمام صفحات و یا صفحاتی خاص از یک وب سایت ارائه نموده است . سرویس فوق ، علاوه بر ارائه یک API جدید برای مدیریت کاربران ، کنترل های سرویس دهنده جدیدی را به منظور پیاده سازی فرآیند تائید در اختیار پیاده کنندگان قرار می دهد.
چگونه می توان از سرویس membership استفاده نمود ؟
قبل از این که بتوان از کنترل های سرویس دهنده امنیتی استفاده نمود ، می بایست در ابتدا پیکربندی برنامه را بگونه ای انجام داد که امکان استفاده از سرویس membership فراهم گردد .
به صورت پیش فرض ، ASP.NET 2.0 از AspNetSqlProvider برای ذخیره جزئیات اطلاعات مربوط به کاربران ریجستر شده استفاده می نماید .
یکی از دستاوردهای مهم ASP.NET 2.0 ، ارائه یک data provider model است که مسئولیت جزئیات عملیات مدیریتی مورد نیاز برای ارتباط با چندین نوع منبع داده را برعهده می گیرند .
شکل زیر ، سرویس جدید membership در ASP.NET 2.0 را نشان می دهد .
منبع : سایت مایکروسافت
همانگونه که در شکل فوق مشاهده می نمائید ، Membership provider ( همانند سایر ASP.NET 2.0 Provider models ) قادر به دستیابی مجموعه ای گسترده از منابع داده است . در شکل فوق ، صرفا" منبع داده SQL Server ( گزینه پیش فرض ) نشان داده شده است . پیاده کنندگان می توانند در صورت تمایل اقدام به پیاده سازی membership provider اختصاصی خود نموده تا به کمک آن با سایر منابع داده ارتباط برقرار نمایند . در شکل فوق ، همچنین مجموعه ای از کنترل های سرویس دهنده امنیتی که امکان دستیابی به Provider model برای پیاده سازی فرآیند تائید کاربران را فراهم می نمایند ، مشاهده می گردد .
افزودن عنصر <authentication> در فایل web.config
برای استفاده از تائید کاربران مبتنی بر فرم در یک برنامه وب جهت بکارگیری سرویس جدید membership ، اولین مرحله فعال کردن ویژگی فوق از طریق فایل web.config است . در صورت عدم وجود فایل web.config ، در ابتدا آن را ایجاد و بخش زیر را به آن اضافه می نمائیم :
<?xml version=?1.0? encoding="utf-8" ?> |
با اضافه کردن عنصر <authentication> به فایل web.config ، امکان استفاده از تمامی پتانسیل های سرویس membership ارائه شده توسط ASP.NET 2.0 فراهم می گردد . بدین منظور می بایست مقدار خصلت mode ، معادل Forms در نظر گرفته شود ( خصلت فوق می تواند مقادیر دیگری نظیر windows ,passport و None را داشته باشد ) .
افزودن عنصر <forms> به فایل web.config
استفاده از تائید مبتنی بر فرم ، کاربران را ملزم به درج نام و رمز عبور خود در یک فرم خاص می نماید . زمانی که یک کاربر قصد دستیابی به یک وب سایت را داشته باشد ، در ابتدا وی به صورت یک کاربر ناشناس ( anonymous ) وارد سایت می گردد . در صورتی که تشخیص داده شود که کاربر ناشناس است ، ASP.NET وی را به یک صفحه خاص login هدایت می نماید . پس از درج نام و رمز عبور و تائید هویت کاربر ، برای وی یک HTTP cookie ایجاد که از آن در درخواست های آتی استفاده می گردد . کد زیر نحوه تعریف یک فرم در فایل web.config را نشان می دهد .
<?xml version=?1.0? encoding="utf-8" ?> |
توضیحات :
عنصر <forms> می بایست درون عنصر <authentication> تعریف گردد.
خصلت name ، نام کوکی ارسالی برای کاربران تائید شده را مشخص می نماید . نام کوکی به صورت پیش فرض ، ASPXAUTH . در نظر گرفته می شود .
loginUrl ، صفحه login را مشخص می نماید . ( در صورتی که کوکی با نام ASPZAUTH . و یا هر نام دیگری پیدا نشود ) . به صورت پیش فرض مقدار این خصلت login.aspx در نظر گرفته می شود .
Protection ، میزان حفاظت اعمال شده در خصوص کوکی ذخیره شده بر روی ماشین کاربر را مشخص می نماید . خصلت فوق می تواند یکی از مقادیر All ,None , Encryption و Validation را دارا باشد که معمولا" از گزینه All استفاده می گردد .
timeout ، مدت زمان حیات یک کوکی را مشخص می نماید ( بر حسب دقیقه ) . مقدار پیش فرض سی دقیقه است .
Path ، مسیر ذخیره کوکی را مشخص می نماید .
requireSSL ، مشخص می نماید که آیا اطلاعات حساس کاربر شامل نام و رمز عبور می بایست به صورت رمز شده و از طریق پروتکل SSL ارسال گردد .
slidingExpiration ، مدت زمان timeout کوکی را در یک sliding scale مشخص می نماید. با توجه به این که مقدار گزینه فوق به صورت پیش فرض True در نظر گرفته می شود، کوکی ایجاد شده بر روی ماشین کاربر سی دقیقه ( مقدار مشخص شده توسط خصلت timeout ) پس از آخرین درخواست اعتبار خواهد داشت . در صورتی که مقدار خصلت فوق False در نظر گرفته شود ، اعتبار کوکی پس از گذشت سی دقیقه از اولین درخواست به اتمام خواهد رسید .
cookieless ، نحوه مدیریت کوکی توسط ASP.NET را مشخص می نماید . خصلت فوق می تواند یکی از مقادیر useDeviceProfile , UseCookies ,auto ، useUrl را دارا باشد . مقدار پیش فرض ، useDeviceProfile در نظر گرفته می شود و نحوه مدیریت کوکی بر اساس user agent دستگاه سرویس گیرنده انجام خواهد شد .
محل ذخیره اطلاعات کاربران در سرویس membership
SqlMemberShipProvider ، یکی از دو Membership Provider است که به همراه ASP.NET 2.0 ارائه شده است و از یک بانک اطلاعاتی SQL Server به منظور ذخیره اطلاعات کاربران استفاده می نماید . به منظور استفاده از Provider فوق ، می بایست یک DataBase schema ایجاد تا در ادامه provider بتواند از آن استفاده نماید . به منظور انجام این کار می توان از دو روش زیر استفاده نمود :
استفاده از ابزار مدیریت ASP.NET website : با استفاده از ابزار فوق یک database schema در یک فایل SQL server 2005 ( فایل ASPNETDB.mdf ) و در فولدر App_Data ایجاد می گردد .
استفاده از ابزار خط دستوری ASP.NET SQL Server Registration tool ( فایل aspnet_regsql.exe )
برای استفاده از ابزار مدیریت ASP.NET website ، پس از اجرای ویژوال استودیو دات نت 2005 ، از طریق منوی Website گزینه ASP.NET configuration را انتخاب می نمائیم . در ادامه و از طریق Security Tab ، نوع authentication را به "From internet" تغییر می دهیم . مراحل فوق را می توان از طریق لینک موجود در Authentication box و یا توسط Security Setup Wizard و دنبال نمودن مراحل مربوطه ، انجام داد .
ابزار مدیریت ASP.NET website
با انجام مراحل فوق ، به صورت اتوماتیک یک بانک اطلاعاتی با نام ASPNETDB.mdf در فولدر App_Date ایجاد که دارای ساختار از قبل تعریف شده ای است .
ایجاد بانک اطلاعاتی ASPNETDB.mdf
در مواردی که از ابزار مدیریت وب سایت برای مشخص کردن نوع authentication ، به "From internet" استفاده می گردد، خط زیر به فایل web.config اضافه می گردد :
<?xml version=?1.0? encoding="utf-8" ?> |
در صورتی که لازم است اطلاعات کاربران را در مکانی دیگر ذخیره نمود ( در یک بانک SQL Server 2000 و یا یک بانک SQL Server 2005 که در فولدر App_data موجود نمی باشد ) ، می بایست از ابزار aspnet_regsql.exe استفاده نمود .
در صورتی که ایجاد Schema از طریق ASP.NET SQL Server Registration tools انجام شود ، می بایست عبارت اشاره شده به صورت دستی در فایل web.config اضافه گردد . در صورتی که Schema در یک بانک اطلاعاتی دیگر غیر از ASPNETDB.mdf و فولدر App_Data باشد ، لازم است که پیکربندی membership را در فایل web.config سفارشی و connection string مربوطه را مشخص نمود .
SqlMemberShipProvider اطلاعات مربوط به کاربران را در دو جدول زیر ذخیره می نماید :
aspnet_users ، برای هر user account دارای یک سطر است که اطلاعات پایه را نگهداری می نماید . ستون UserID به صورت منحصربفرد هر کاربر را در سیستم مشخص و به صورت یک uniqueidentifier ذخیره می نماید ( یک GUID ) .
aspnet_membership ، دارای یک ستون UserId است که هر رکورد را به یک رکورد خاص در aspnet_membership مرتبط می نماید. جدول فوق ، اطلاعات مرتبط با هر account نظیر email,password و سایر موارد را در خود ذخیره می نماید .
ساختار بانک اطلاعاتی ASPNETDB.mdf
سفارشی نمودن SqlMembershipProvider
در صورت استفاده از SqlMembershipProvider با تنظمیات پیش فرض (اطلاعات مربوط به کاربران در فایل ASPNETDB.mdf سرویس دهنده SQL 2005 و درفولدر App_Data ذخیره می گردد ) ، ضرورتی به اعمال تغییرات در فایل web.config نمی باشد. در غیر اینصورت ، می بایست از تائیدیه مبتنی بر فرم استفاده شود و قوانین لازم جهت مجوزها نیز مشخص گردد .
در صورتی که قصد استفاده از یک بانک اطلاعاتی دیگر را داشته باشیم و یا بخواهیم برخی تنظمیات memebership را تغییر دهیم ( حداقل طول رمز عبور ، نحوه ذخیره رمز عبور به صورت plain text ، hashed و یا رمزشده و ... ) ، می بایست تنظمیات سفارشی را در فایل web.config ثبت نمود .
نمونه کد زیر نحوه سفارشی نمودن تنظیمات MemeberShipProvider را نشان می دهد .
<configuration> <connectionStrings> <add name="MyDB" connectionString="..." /> </connectionStrings> <system.web> <membership defaultProvider="CustomizedProvider"> <providers> <add name="CustomizedProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="MyDB" minRequiredPasswordLength="5" minRequiredNonalphanumericCharacters="0" /> </providers> </membership> </system.web> </configuration> |
در <membership> ، یک provider جدید با نام CustomizedProvider تعریف تا membership provider پیش فرض را ایجاد می نماید . provider سفارشی فوق ، همچنان از SqlMemberShipProvider استفاده می نماید و صرفا" برخی مقادیر مربوطه سفارشی شده است .
پس از پیکربندی ASP.NET website ، جهت استفاده از سیستم Membership می توان مدیریت کاربران سایت را از طریق ابزار مدیریت وب سایت ASP.NET انجام داد . پس از فعال شدن برنامه فوق با استفاده از Security tab و کلیک بر روی لینک Create User می توان یک کاربر جدید را ایجاد و یا از طریق لینک manage users اقدام به ویرایش و یا حذف رکوردهای موجود کاربران نمود .
در بخش سوم با نحوه استفاده از برخی کنترل های امنیتی جهت استفاده از سرویس membership آشنا خواهیم شد.
اجازه دهید قبل از این که به نحوه مدیریت کاربران در ASP کلاسیک ، ASP.NET 1.x و ASP.NET 2.0 اشاره نمائیم ، تعریفی داشته باشیم از Authentication و Authorization :
Authentication ، فرآیندی است که بر اساس آن هویت یک کاربر بررسی می گردد. پس از تائید کاربر ، این موضوع بررسی خواهد شد که کاربر تائید شده مجاز به انجام چه نوع عملیاتی است .
Authorization ، فرآیندی است که بر اساس آن مشخص می گردد کاربر تائید شده مجاز به انجام چه نوع عملیاتی است .
با استفاده از فرآیندهای فوق ، پیاده کنندگان می توانند یک سایت را با توجه به نوع کاربران سفارشی نمایند .
ملزومات یک سیستم مدیریت کاربران به منظور تامین فرآیندهای Authentication و Authorization
ایجاد یک سیستم جهت مدیریت کاربران مستلزم انجام مراحل مشابهی است :
در ادامه به بررسی امکانات ارائه شده در ASP کلاسیک ، ASP.NET 1.x و ASP.NET 2.0 در خصوص مدیریت کاربران خواهیم پرداخت .
ASP کلاسیک
قبل از ASP.NET ، پیاده کنندگان مجبور بودند که علاوه بر پیاده سازی تمامی مراحل فوق ، تمهیدات لازم به منظور تائید کاربران و صدور مجوزهای لازم به منظور دستیابی به منابع موجود بر روی یک سایت و یا برنامه را انجام دهند . یکی از چالش های اصلی در این زمینه و در هنگام درخواست یک منبع از سرویس گیرنده توسط کاربر ، حصول اطمینان از این موضوع است که کاربر متقاضی قبلا" تائید شده باشد . یکی دیگر از چالش های موجود ، نحوه حفاظت برخی صفحات از دستیابی غیرمجاز است . چگونه می توان یک صفحه را بگونه ای پیکربندی نمود که صرفا" کاربران خاصی بتوانند از آن استفاده نمایند؟
به منظور حل مشکل فوق از یک متغیر session استفاده می گردید. برای کاربرانی که فرآیند Authentication را با موفقیت طی می نمایند یک متغیر session ایجاد و در تمامی صفحات وجود این متغیر بررسی می گردید تا هویت کاربر تشخیص و مجاز بودن وی برای استفاده از صفحه درخواستی تائید گردد .
در ASP کلاسیک به منظور مدیریت کاربران هیچگونه امکانات بالقوه ای وجود نداشته و پیاده کنندگان می بایست علاوه بر ایجاد بستر اطلاعاتی مورد نیاز ، ملزومات سیستم مدیریت کاربران را پیاده سازی نمایند .
ASP.NET 1.x
به منظور کاهش عملیات مورد نیاز برای پیاده سازی سیستم مدیریت کاربران در ASP.NET 1.x ، امکانات متعددی ارائه گردید . تائید کاربران بر اساس فرم ، امکان تعریف قوانین و مجوزهای دستیابی در فایل web.config ، نمونه هائی در این زمینه می باشد .
ASP.NET ، مفهوم تائید بر اساس فرم را با استفاده از کلاس FormAuthentication معرفی تا امکان ورود و خروج از یک سایت با سهولت بیشتری فراهم گردد . بدین منظور از یک Authentication ticket حفاظت شده به منظور بخاطر سپردن این که چه کاربرانی login نموده اند ، استفاده می گردید ( در زمان درخواست صفحات ) . برای ایجاد یک مکانیزم ایمن تبادل اطلاعات یک authentication ticket به عنوان یک کوکی بر روی کامپیوتر سرویس گیرنده ایجاد تا امکان بخاطر سپردن و تشخبص این که کاربر به برنامه و یا سایت login نموده است وجود داشته باشد (در درخواست های بعدی ) . کلاس FormAuthentication متدهای لازم به منظور کار با authentication ticket ( ایجاد :: logging و حذف :: logout ) را ارائه می نماید.
تائید کاربران مبتنی بر فرم به دنبال این هدف بود تا بتواند یک رویکرد استاندارد برای انجام دو عملیات متداول در ارتباط با مدیریت کاربران را ارائه نماید .
روش فوق علیرغم مزایای متعدد ، پیاده کنندگان را مجبور می نماید که همچنان حجم بالائی از کد را نوشته و مدیریت بسیاری از عملیات مرتبط با کاربران را خود انجام دهند( ایجاد صفحات login ,logoff ، تعریف یک کاربر جدید و ... ) . بدین ترتیب حجم کار پیاده کنندگان نه تنها کمتر نمی گردد ، بلکه در بسیاری از موارد نیز افزایش می یابد . رویکرد فوق باعث گردید که نتوان از یک روش جامع امنیتی استفاده نمود. مثلا" یک پیاده کننده ممکن است اطلاعات کاربران را به صورت متن معمولی و رمزنشده در یک بانک ذخیره نماید و دیگری به صورت hash .
ایده تائید کاربران مبتنی بر فرم ارائه شده در ASP.NET 1.x ، یک ایده بزرگ و در عین حال جالب است ولی به نظر پیاده سازی آن با در نظر گرفتن تمامی ملزومات مورد نیاز یک سیستم مدرن مدیریت کاربران انجام نشده است .
ASP.NET 2.0
فرآیند Authentication در ASP.NET 2.0 از طریق سرویس جدید membership و Authorization از طریق سرویس جدید Roles انجام می شود.
ASP.NET 2.0 کار آغاز شده در تائید کاربران مبتنی بر فرم را که در نسخه ASP.NET 1.x شروع شده بود ، تکمیل و امکانات مناسبی برای انجام عملیات متفاوتی نظیر تائید کاربران ، ایجاد یک کاربر جدید ، حذف یک کاربر و ویرایش اطلاعات کاربران از طریق برنامه نویسی و به کمک کنترل های وب را ارائه نمود . شیوه عملکرد عمومی تائید کاربران مبتنی بر فرم در ASP.NET 2.0 مشابه نسخه قبلی است و می بایست عملیات اولیه و پیکربندی لازم را از طریق فایل های پیکربندی انجام داد ( ثبت تنظیمات لازم در فایل web.config ) . چیزی که در ASP.NET 2.0 به آن اضافه گردید در واقع membership API و کنترل های وب ( سرویس دهنده ) امنیتی است . API فوق به برنامه نویسان اجازه می دهد از طریق کد به پتانسیل های سرویس membership دستیابی داشته باشند .
Membership API با استفاده از Provider model پیاده سازی شده است . این بدان معنی است که علیرغم این که اینترفیس فوق به خوبی تعریف شده است ولی می توان در صورت تمایل ، پیاده سازی آن را متناسب با شرایط موجود سفارشی نمود . فریمورک دات نت ، بدین منظور کلاس Membership را که شامل متدهائی نظیر CreateUser ,GetAllUser,Validateuser و ... است ، ارائه نموده است .سیستم membership قابلیت ها و توانمندهای برنامه نویسی خود را از طریق کلاس Membership ارائه می نماید . از کلاس فوق می توان مستقیما" در صفحات وب استفاده نمود . مثلا" می توان یک صفحه را ایجاد که تمام کاربران در سیستم را لیست نماید ( استفاده از متد Membership.GetAllUsers که به یک GridView نسبت داده شده باشد) .
ASP.NET به همراه دو Membership provider از قبل تعبیه شده ارائه شده است .یکی برای ذخیره اطلاعات کاربران در یک بانک اطلاعاتی SQL و دیگری که از اکتیو دایرکتوری استفاده می نماید .
علاوه بر موارد فوق ، ASP.NET 2.0 به منظور مدیریت کاربران هفت کنترل متفاوت را ارائه که با استفاده از آنان می توان برنامه های وبی را ایجاد نمود که از پتانسیل سرویس های membership و roles استفاده نمایند . در واقع ، کنترل های فوق یک رابط کاربر مناسب برای انجام عملیات مرتبط با کاربران را ارائه می نمایند .
در صورتی که از یک محل ذخیره سازی سفارشی استفاده شده باشد ( در صورت استفاده از یک membership provider سفارشی ) ، همچنان امکان استفاده از کنترل های فوق وجود خواهد داشت . این کنترل ها عبارتند از :
Login : یک اینترفیس متداول برای login شامل نام و رمز عبور را ارائه می نماید . به صورت پیش فرض ، زمانی که کاربر بر روی دکمه login کلیک می نماید یک postback ایجاد و کنترل تلاش می نماید تا بر اساس اطلاعات درج شده توسط کاربر وی را تائید نماید . بدین منظور متد ( Verify (Username,password مربوط به کلاس membership صدا زده می شود . در صورتی که اطلاعات درج شده معتبر باشند ، یک authentication thicket برای کاربر ایجاد می گردد . در غیراینصورت یک پیام خطاء بر روی اینترفیس نمایش داده می شود .
LoginView : در برخی موارد لازم است که در یک صفحه محتویات متفاوتی را با توجه به ماهیت کاربر ( ناشناس و یا تائید شده ) ، نمایش داد. مثلا" زمانی که یک کاربر ناشناس صفحه اصلی یک وب سایت را مشاهده می نماید یک Login web control نمایش داده شود و زمانی که یک کاربر تائید شده همان صفحه را مشاهده می نماید ، یک پیام خاص مرتبط با نام کاربر به همراه یک لینک جهت logoff نمایش داده شود . با استفاده از کنترل loginview می توان از دو تمپلیت AnonymouseTemplate و LoggedInTemplate استفاده نمود . کنترل های وب و تگ های Html را می توان در AnonymouseTemplate برای کاربران ناشناس و کنترل ها و تگ های html برای کاربران تائید شده را در LoggedInTemplate قرار داد . Loginview همچنین می تواند خروجی های متفاوتی را با توجه به نقش کاربر تائید شده نمایش دهد .
PasswordRecovery : کنترل فوق ، این امکان را در اختیار کاربران قرار می دهد تا بتوانند رمزعبور موجود و یا جدیدی را از طریق email دریافت نمایند . در صورتی که memebership provider رمز عبور را به صورت hashed ذخیره کرده باشد ، فرآیند بازیافت رمز عبور عملا" ایجاد یک رمز عبور جدید و تصادفی است که برای کاربر ارسال می گردد . برای رمزهای عبوری که به صورت plain text و یا رمز شده می باشند ، رمز عبور واقعی موجود برای کاربر از طریق email ارسال می گردد .
Loginstatus : کنترل فوق یک لینک به صفحه login را برای کاربران ناشناس و تائید نشده ، نمایش خواهد داد . در صورتی که یک کاربر تائید شده صفحه را ملاقات نماید ، یک لینک logoff برای وی نمایش داده می شود .
LoginName : کنترل فوق ، نام کاربر تائید شده ای را که به سیستم وارد شده است ، نمایش می دهد . با استفاده از User.Identity.Name در برنامه ، می توان به کاربرانی که به سایت و یا برنامه login نموده اند ، دستیابی داشت .
CreateUserWizard : علاوه بر یک صفحه جهت logging ، هر وب سایت مبتنی بر account نیاز به صفحه ای دارد تا مشخص نماید کدامیک از کاربران قادر به ایجاد یک کاربر جدید می باشند . کنترل CreateUserWizard ، یک رابط کاربر گرافیکی مناسب برای ایجاد یک کاربر جدید را ایجاد می نماید.همانند کنترل login ، پس از تکمیل داده در فیلدهای مورد نیاز و کلیک بر روی دکمه Create user ، متد CreateUser کلاس Membership فراخوانده می شود . CreateUserWizard همچنین می تواند در صورت نیاز با استفاده از تمپلیت ها سفارشی گردد.
Changepassword : از کنترل فوق به متظور تغییر رمز عبور استفاده می گردد .
تمامی کنترل های امنتیی اشاره شده را می توان بدون نیاز به نوشتن کد استفاده نمود . مثلا" برای ایجاد یک صفحه login کافی است یک صفحه با نام Login.aspx را ایجاد و یک کنترل Login را بر روی آن قرار داد . بدین ترتیب شما دارای یک صفحه login می باشید بدون این که لازم باشد از یک خط کد استفاده شود . در صورت تمایل می توان شکل ظاهری و یا منطق کنترل را تغییر داد .
در بخش دوم به بررسی امکانات سرویس جدید membership در ASP.NET 2.0 و نحوه استفاده از آن در برنامه های وب خواهیم پرداخت .