نکات امنیتی برای برنامه نویسان ASP.NET

فریم ورک ASP.NET به همراه ویژوال استادیو تولید یک وب اپلیکیشن را بسیار ساده و لذت بخش کرده اند. ویژوال استادیو سعی می کند بسیاری از نکات تکنیکی را از چشم برنامه نویس پنهان نماید تا برنامه نویس تمام تمرکز خود را بر روی منطق اصلی برنامه خود بگذارد. ASP.NET به صورت پیش فرض بسیاری از نکات امنیتی وب را رعایت می کند و تا جایی که امکان دارد دست و پای نفوذگران را می بندد. اما به هر حال هکرها همیشه به دنبال موقعیت هایی هستند که یک برنامه نویس سهل انگار و مبتدی برای آن ها ایجاد می کند.

در این مطلب کوتاه با نکاتی آشنا خواهید شد که اگر آن ها را بکار ببرید می توانید تا حدی امنیت وب اپلیکیشن های خود را تامین کنید.

ASP.NET Security Tips

1) داده های ورودی کاربران را اعتبارسنجی کنید

قانون اول : هرگز به کاربران خود اعتماد نکنید! همیشه امکان اشتباه وارد کردن داده ها توسط کاربران وجود دارد. شما باید همیشه و درهر حال تمام داده های ورودی توسط کاربران را Validate کنید و اجازه ورود اطلاعات نادرست و دور از انتظار را به سیستم ندهید. یک کاربر ممکن است آن قدر ناوارد و خنگ باشد که اطلاعات را نادرست و ناقص وارد کند و یا آن قدر حرفه ای باشد که به جای اطلاعات، کدهای مخرب به سیستم تزریق کند. در تمام فرم های آنلاین وب سایت خود از کنترل های Validation برای اطمینان از درستی داده های وارد شده توسط کاربر استفاده کنید. اگر داده های ورودی کاربر معتبر باشند، امکان اشتباه در سیستم به حداقل خواهد رسید.

2) اطلاعات حساس را کد کنید

قانون دوم : هر اطلاعاتی را که فکر می کنید ممکن است از آن سوء استفاده شود را کد کنید. حتماً Username و Password کاربران را کد کرده و سپس ذخیره کنید. Hash کردن رمز عبور یکی از بهترین و مطمئن ترین راه ها برای تامین امنیت رمزعبور کاربران است. برای این کار در دات نت راه حل های خوبی وجود دارد. اطلاعات حساس دیگر مثل Connection String دیتابیس خود را حتماً Encrypt کنید. در ASP.NET توصیه شده است به جای اینکه رشته اتصال دیتابیس خود را در کدهای خود بنویسید، آن را به صورت جداگانه در فایل Web.config تعریف کنید. از آن جایی که فرمت این فایل XML است و امنیت پایینی دارد، شما باید تمام اطلاعات حساس این فایل از جمله Connection String را کد کرده و سپس ذخیره کنید.

حتی توصیه می شود در برخی مواقع که کوئری استرینگ ها اطلاعات حساسی را به کاربران لو می دهند، آن ها را نیز کد کنید.

3) اطلاعات تکنیکی را از دید کاربران مخفی کنید

در برنامه های ASP.NET هنگامی که خطایی رخ می دهد که توسط برنامه هندل نشده، تمام اطلاعات تکنیکی مربوط به خطای مذکور با ذکر جزئیات و حتی خطی از برنامه که خطا در آن اتفاق افتاده است توسط کاربران قابل مشاهده است. البته این تنظیمات پیش فرض ASP.NET برای زمان توسعه در Localhost و خطایابی مناسب است که هنگام پابلیش وب اپلیکیشن بر روی اینترنت یا اینترانت باید تغییر کند. متاسفانه برخی از برنامه نویسان ناشی هنگام توزیع وب اپلیکیشن خود همان فایل web.config روی لوکال هاست خود را بدون هیچ تغییری بر روی محیط اجرایی قرار می دهند. این گونه پیغام های خطای ASP.NET معمولاً اطلاعات مناسبی در مورد آسیب پذیری های یک وب سایت در اختیار یک هکر قرار می دهد. برای حل این مشکل شما باید تمام خطاهای ممکن را هندل کنید و مقدار ویژگی customErrors در فایل web.config را برابر RemoteOnly قرار دهید.

<customErrors mode=«RemoteOnly«></customErrors>

4) حالت دیباگ را غیرفعال کنید

هنگام توسعه یک وب اپلیکیشن در ASP.NET حالت Debug به صورت پیش فرض true است. شما باید پس از توسعه و هنگام آپلود وب اپلیکشن در یک هاست اینترنتی خاصیت debug در قسمت compilation فایل web.config را برابر false قرار دهید. این کار هم کارایی برنامه تحت وب شما را بالاتر می برد و هم از نشان دادن برخی از خطاها که باعث لو رفتن کدهای شما می شود جلوگیری می کند.

5) مواظب حملات SQL Injection باشید

این نوع حملات در اکثر وب سایت های اطلاعاتی مبتنی بر دیتابیس مرسوم است. به این صورت که کاربر/هکر یک کد SQL را به برنامه شما تزریق می کند و باعث ایجاد خرابکاری می شود. با وجود خطرناک بودن و جدی بودن این نوع حمله باز هم هستند برنامه نویسانی که به این مورد توجهی ندارند. به طور مثال در یک فرم لاگین نا امن که کوئری چک کردن Username و Password شبیه به کد زیر باشد، حمله SQL Injection به راحتی امکان پذیر است.

string query = «SELECT * FROM Users WHERE username='» +
txtUsername.Text + «‹ AND password='» + txtPassword.Text + «‹»;

در این موقعیت یک فرد نسبتاً باهوش با نوشتن رشته x› or username like %x در فیلد password به راحتی می تواند فرم لاگین شما را رد کرده و خود را به عنوان یک کاربر قانونی جا بزند. برای جلوگیری از این مشکل حتماً قانون اول را رعایت کنید و به جای استفاده از مقادیر تکست باکس ها به این صورت، از کلاس SqlParameter برای مقداردهی استفاده کنید. یکی از راه های دیگر برای جلوگیری از این حمله استفاده از ORMهایی مثل LINQ  to SQL است.

6) جلوگیری از حملات Cross-site Scripting

یکی از مرسوم ترین و در دسترس ترین نوع حملات به وب سایت هاست که فرد خرابکار سعی می کند اسکریپت مخربی را به وب اپلیکیشن شما تزریق کند. به طور مثال در فرم های ورود اطلاعات کاربر خرابکار می تواند به جای وارد کردن اطلاعات صحیح، کدهای جاوا اسکریپت مخرب را وارد کند. خوشبختانه ASP.NET به صورت پیش فرض دارای یک محافظ درخواست توکار است که در اکثر مواقع جلوی این حملات را می گیرد. اما باز هم نمی توان به صورت صد در صد به آن اطمینان کرد، چون راه هایی برای دور زدن آن نیز وجود دارد. بهتر است هنگام نمایش دادن داده های ورودی کاربر، ابتدا رشته مورد نظر را با Server.HtmlEncode به یک رشته امن HTML تبدیل کنید و سپس آن را نمایش دهید. در این صورت اگر حتی کاربر اسکریپت مخربی را با موفقیت به برنامه شما تزریق کرده باشد، آن اسکریپت اجرا نخواهد شد و فقط به صورت یک رشته به نمایش در خواهد آمد.

7) سیستم لاگین خود را امن بسازید

روش مرسوم برای پیاده سازی سیستم لاگین در وب، روش استفاده از Session است. Session متغیرهایی هستند که بر روی سرور به ازای هر کاربر لاگین شده ساخته می شوند و وب اپلیکیشن با چک کردن متوالی آن در هر صفحه هویت کاربر وارد شده را شناسایی می کند. یک Session معمولاً برای یک مدت زمان محدودی (مثلاً 20 دقیقه) اعتبار دارد و پس از آن کاربر دوباره باید به سیستم لاگین کند. در ASP.NET بهترین و امن ترین راه برای پیاده سازی لاگین استفاده از ویژگی خوب تشخیص هویت خود دات نت است. منظورم همان FormsAuthentication است که شما با آن می توانید یک سیستم لاگین بسیار امن پیاده سازی کنید. به هیچ وجه از کوکی ها برای پیاده سازی یک سیستم لاگین استفاده نکنید! از کوکی ها فقط برای پیاده سازی قابلیت «Remember Me» استفاده کنید آن هم با کلی احتیاط! یک نکته دیگر در مورد لاگین این است که تعداد تلاش های ناموفق یک کاربر برای لاگین را محدود کنید. مثلاً بعد از 5 بار وارد کردن اشتباه رمز عبور به او تا یک مدت اجازه ورود ندهید!

8 ) در مواقع لازم از تصاویر امنیتی استفاده کنید

این نکته را در اکثر وب سایت ها و هنگام ثبت نام دیده اید. مثلاً گوگل در هنگام ثبت نام شما را مجبور می کند که یکسری حروف عجیب و غریب را که در عکس می بینید درون تکست باکس وارد کنید تا بفهمد شما آدم هستید! شما هم سعی کنید در اکثر فرم هایی که نیاز به لاگین کاربر ندارند (مثل فرم ثبت نام یا فرم تماس) از این تصاویر استفاده کنید.

9) امنیت دیتابیس خود را تامین کنید

معمولاً دیتابیس های SQL Server دارای امنیت بسیار خوبی هستند اما اگر از دیتابیس Access برای ذخیره اطلاعات استفاده می کنید حتماً 1- روی فایل آن پسورد بذارید 2- مطمئن شوید که فولدری که فایل دیتابیس در آن قرار دارد توسط کاربران قابل دسترسی نباشد 3- حتماً اطلاعات داخل آن را کدگذاری کنید.

farasun.wordpress.com

مطالب مرتبط :

کامپایل قطعات کد دات نت با Snippet Compiler

Snippet Compiler برنامه کوچکی است برای اجرای قطعات کوچک کدهای سی شارپ و ویژوال بیسیک دات نت زمانی که شما نمی خواهید یک پروژه با فایل های همراهش در ویژوال استادیو فقط برای تست یک قطعه کد بسیازید! برای من خیلی پیش آمده که برای تست یک قطعه کد مجبور به باز کردن ویژوال استادیو و استفاده از Console Application شده ام. این برنامه با داشتن قالب یک برنامه کنسول آماده برای تست قطعات کد می تواند در وقت شما صرفه جویی کند و کارایی تان را بالا ببرد.

آخرین نسخه Sinppet Compiler را از اینجا دریافت کنید. این برنامه نیازی به نصب ندارد، بعد از باز کردن برنامه، قطعه کد مورد نظر خود را در بدنه متد RunSnippet تایپ کنید و کلید F5 را فشار دهید تا قطعه کد کامپایل و اجرا شود. این ابزار قابلیت های واقعاً خوبی دارد و ارزش دانلود کردن را دارد.

farasun.wordpress.com

شاید مطالب زیر هم برای شما جالب باشند :

10 نکته SEO برای وب سایت های ASP.NET

پس از ساخت یک وب سایت و قرار دادن آن در اینترنت، مهمترین مسئله پیدا کردن بازدیدکننده و مشتری برای آن است. وب سایتی که بازدیدکننده نداشته باشد به هیچ دردی نمی خورد. در این روزگار هم بازدید کننده و مشتری از کجا پیدا می شود… از موتورهای جستجوی معروف مثل گوگل، یاهو و بینگ! اکثر بازدیدهای یک وب سایت را موتورهای جستجو تامین می کنند، به همین علت داشتن یک رتبه ی خوب در موتورهای جستجو یک امتیاز مهم محسوب می شود و باعث پیشرفت وب سایت شما خواهد شد. موتورهای جستجو برای ربته بندی وب سایت ها در نتایج جستجوی خود قوانین مشخصی دارند که با پیروی از این استانداردها می توانید وب سایت خود را برای موتورهای جستجو بهینه کنید. به بهینه کردن یک وب سایت برای موتورهای جستجوگر SEO یا Search Engine Optimization می گویند.

بهینه سازی برای موتورهای جستجو

در این مطلب با نکاتی آشنا خواهید شد که اگر آن ها را به کار بگیرید، موتورهای جستجوگر مطالب وب سایت شما را ایندکس خواهند کرد و لینک های شما در نتایج جستجوی موتورهای جستجوگر معروفی همچون گوگل پدیدار خواهد شد! هر چند این نکات به صورت عمومی و برای صفحات استاتیک هم کاربرد دارند اما این مطلب به صورت خاص برای توسعه دهندگان ASP.NET نوشته شده است.

1 ) URLهای تمیز بسیازید!

URL یک صفحه وب، اولین جایی است که یک موتور جستجو می بیند پس سعی کنید تا جایی که می توانید آدرس های شما با معنی باشند. اگر از ASP.NET MVC استفاده می کنید که هیچ! در غیر این صورت باید از تکنیک URL Rewriting برای بازنویسی آدرس های پارامتری و تبدیل آن به URLهای با معنی استفاده کنید. به طور مثال شما باید آدرسی مثل mysite.com/products.aspx?id=1 را تبدیل به mysite.com/products/1 کنید. اگر به جای اعداد از کلمات با معنی استفاده کنید که چه بهتر!

2 ) URLهای کوتاه بهتر از URLهای طولانی است

سعی کنید آدرس های تولید شده توسط وب سایت شما حداقل طول ممکن را داشته باشند. خود گوگل توصیه می کند که صفحات پویا حداکثر دارای دو پارامتر باشند. صفحاتی با آدرس شبیه به mysite.com/products.aspx?item=3&category=7&subcategory=12&show=true شانس کمتری برای ایندکس شدن نسبت به صفحاتی با یک URL تمیز و کوتاه دارند.

3 ) تا جایی که می توانید از ایجاد Postback جلوگیری کنید!

استفاده از Postback در صفحات aspx می تواند از مهمترین دلایل برای عدم ایندکس شدن بخشی از این صفحات در موتورهای جستجوگر باشد. به طور مثال فرض کنید بخشی از صفحه را در یک Panel قرار داده اید که کاربر پس از فشردن یک دکمه و ایجاد یک Postback به صفحه دستور panel1.Visible = true اجرا شده و محتویات پانل را به کاربر نمایش می دهد. این کار اشتباه شما باعث عدم ایندکس شدن بخشی از محتویات سایت شما که در پانل وجود دارد، می شود، به این دلیل که یک موتور جستجو نمی تواند لینک های یک دکمه را دنبال کند، به زبان ساده تر نمی تواند روی آن دکمه کلیک کند تا ببیند چه اتفاقی می افتد! علاوه بر این مورد، Postback باعث ساخته شدن مقداری کد جاوا اسکریپت در صفحه ما می شود که هم حجم صفحه را بالا می برد و هم اینکه این کدها به هیچ وجه ایندکس نمی شوند. راه حل استفاده از Query String برای انجام اعمالی است که می خواهید هنگام Postback انجام شوند. به طور مثال یک پارامتر به همین صفحه می فرستید و در Page_Load پارامترها را چک می کنید تا عمل مورد نظر کاربر را انجام دهید. در این صورت صفحه شما به راحتی در موتورهای جستجو ایندکس خواهد شد.

4 ) تا جایی که می توانید از کنترل Button استفاده نکنید!

در بکارگیری و استفاده از کنترل تحت سرور asp:Button دقت مضاعف! داشته باشد. این کنترل حتی اگر کدی برای آن ننویسید باعث ایجاد یک Postback می شود. موتورهای جستجوگر نمی توانند کد پشت این دکمه را اجرا کنند تا نتیجه را ایندکس کنند. سعی کنید تا جایی که امکان دارد به جای استفاده از دکمه از تگ a (لینک معمولی) و دستور Response.Redirect استفاده کنید.

5 ) همیشه Title صفحه را به صورت پویا ایجاد کنید

هنگامی که یک صفحه aspx به پروژه خود اضافه می کنید، صفحه شما هیچ Title خاصی ندارد. همانطور که می دانید تگ Title یکی از مهمترین بخش های یک صفحه وب است که از نگاه تیزبین موتورهای جستجو مخفی نمی ماند. فرض کنید شما یک عنوان مناسب برای قسمت Title تعیین کردید، اما آیا این کافیست؟ مگر قرار نیست صفحه پویای شما بر اساس درخواست کاربر محتویات مختلفی نمایش دهد؟ اگر جوابتان مثبت است پس شما باید بر اساس درخواست کاربر و محتویات صفحه، هر بار یک Title خاص را ایجاد کنید. برای این کار می توانید از کلاس HtmlTitle استفاده کنید یا تگ title صفحه خود را به شکل زیر تغییر دهید :

<title runat="server" id="mytitle"></title>

سپس در Page_Load کدی شبیه به کد زیر را بنویسید :

if (Request.QueryString.Count > 0)
{
mytitle.Text = "Test - " + Request.QueryString["name"];
}

6 ) به تگ Meta توجه ویژه ای داشته باشید

تگ Meta با خاصیت های name=»description»x و name=»keywords»x یکی از مهمترین تگ های مربوط به SEO هستند که اولی برای توضیح یک صفحه وب و دومی برای مشخص کردن کلمات کلیدی آن صفحه وب برای موتورهای جستجو کاربرد دارند. خزنده موتورهای جستجو همیشه دقت ویژه ای به محتویات این دو تگ مهم دارند و استفاده درست از آن ها باعث بالا رفتن رتبه صفحه وب شما در نتایج موتورهای جستجو مثل گوگل خواهد شد. در صفحات استاتیک که محتویات صفحه قرار نیست تغییر کنند، شما به صورت دستی مقادیر این تگ ها را مشخص می کنید اما در صفحات پویای ASP.NET بهتر است بر اساس محتویات صفحه ای که قرار است بر اساس اطلاعاتی که از دیتابیس خوانده می شود تغییر کند، محتویات این تگ ها نیز تغییر کنند. برای این که هر بار تگ متا به صورت پویا تعیین شود می توانید این تگ را به شکل زیر بنویسید :

<meta name="description" content=<%= MetaDesc %>  />
<meta name="keywords" content=<%= MetaKeywords %> />

سپس در Code Behind صفحه خود دو متغیر Public از نوع string به نام های MetaDesc و MetaKeywords بسازید. حالا در Page_Load بر اساس اطلاعاتی که می خواهید نمایش دهید این دو متغیر را تغییر دهید تا تگ های متای شما نیز تغییر کنند.

7 ) هر صفحه* URL یکتای خود را داشته باشد

این نکته خیلی مهم است. * منظور از صفحه در اینجا یک فایل فیزیکی نیست. به طور مثال فایل فیزیکیproducts.aspx می تواند صفحات products.aspx?id=1 یا products.aspx?name=datefa را بسازد که محتویات یکسانی ندارند! موتورهای جستجو این دو آدرس را به صورت دو صفحه جداگانه در نظر می گیرند. اگر مثل همین مثال از Query String برای مشخص کردن پارامترها استفاده کنید هیچ مشکلی وجود ندارد، اما اگر از ViewState، Session یا کوکی برای ذخیره این پارامترها و پاس دادن مقادیر به صفحات استفاده می کنید، راه اشتباهی را در پیش گرفته اید! استفاده از این روش باعث می شود که نرم افزارهای خزنده توانایی تفکیک صفحات را نداشته باشند و در نتیجه محتویات شما در موتورهای جستجو ایندکس نخواهد شد. به بیان ساده هر صفحه ای که یک URL یکتا داشته باشد و کاربر بتواند آن را بوکمارک کند توسط موتورهای جستجو نیز قابل ایندکس شدن خواهد بود.

8 ) حتماً یک Site Map برای پروژه خود بسازید

Site Map یک پروتکل استاندارد بر اساس XML است که به موتورهای جستجو کمک می کند تا صفحات را آسان تر و کاراتر ایندکس کنند. داشتن یک Site Map در یک وب سایت مبتنی بر ASP.NET علاوه بر فوایدی که برای ایندکس شدن در موتورهای جستجوی مختلف دارد، باعث نظم در ساختار منوها و Navigation یک وب سایت می شود. ساختن یک Site Map با لطف ویژوال استادیو بسیار آسان شده است. روی پروژه خود کلیک راست کنید و گزینه Add New Item… را برگزینید. در پنجره باز شده Site Map را پیدا کنید و به پروژه خودتان اضافه کنید. حالا فایلی به نام Web.sitemap به پروژه شما اضافه شده است. اگر با XML آشنایی داشته باشید، قواعد نوشتن Site Map نیز مانند نوشتن تگ های XML است. سعی کنید تمام صفحات مهم خودتان را با جزئیات کامل و رعایت قوانین یک نقشه سایت، در این فایل مشخص کنید.

9 ) URLهای خود را با حروف کوچک بسازید

اکثر موتورهای جستجو به بزرگی و کوچکی حروف حساس هستند و این یعنی دو آدرس mysite.com/products.aspx و mysite.com/Products.aspx برای آن ها متفاوت هستند. برای جلوگیری از این اشتباه شما باید تمام URLهای خود را با حروف کوچک بسازید تا مشکلی در ایندکس شدن صفحات توسط موتورهای جستجو پیش نیاید.

10 ) سورس کد صفحات را تمیز کنید!

سورس کد خود را تمیز کنید تا صفحات شما کم حجم شوند. در اینجا منظور از سورس کد، کد نوشته شده در فایل های aspx است نه کدهای موجود در Code Behind که به cs یا vb ختم می شوند. برای تمیز کردن سورس صفحات :

  • کامنت های html را حذف کنید
  • از ViewState وقتی که نیازی به آن ندارید، استفاده نکنید
  • از form runat=»server»x وقتی که نیازی به آن ندارید، استفاده نکنید
  • تا می توانید کد جاوا اسکرپیت درون فایل aspx ننویسید، بلکه از فایل های Js خارجی استفاده کنید
  • تا می توانید کدهای CSS خود را در فایل های استایل جداگانه تعریف کنید

farasun.wordpress.com

نکات مهم دیگر :

  • در تگ های a حتماً از خاصیت title استفاده کنید
  • در تگ های img از خاصیت alt استفاده کنید
  • مطالب وب سایت خود را در فرمت rss هم ارئه کنید
  • از Flash یا Silvetlight برای نشان دادن محتویات استفاده نکنید
  • از Flash یا Silverlight برای ساختن منوها استفاده نکنید
  • از منوهای جاوا اسکریپت استفاده نکنید
  • لینک خود را در وب سایت های دیگر قرار دهید

farasun.wordpress.com

PHP برای برنامه نویسان ASP.NET – قسمت ششم

قسمت اول قسمت دومقسمت سومقسمت چهارمقسمت پنجم

کار کردن با فایل ها در PHP

باز کردن و خواندن یک فایل متنی در PHP

تابع fopen در PHP می تواند یک فایل یا یک URL را برای شما باز کند. کافیست آدرس فایل و حالتی که می خواهید فایل را باز کنید به این تابع بدهید تا این تابع یک handle برای کار با فایل مورد نظر شما، برگرداند. در مثال زیر می خواهیم یک فایل متنی را باز کنیم و خط به خط بخواینم و روی خروجی مرورگر چاپ کنیم.

<?php
$f = fopen(«change.txt»,«r») or exit(«File not found.»);
while (!feof($f))
{
echo fgets($f). «<br />»;
}
fclose($f);
?>

در خط اول با نوشتن دستور fopen(«change.txt»,»r»)x فایل change.txt را با حالت خواندن (r) باز می کنم و PHP هندل آن را برای کارهای بعدی در متغیر $f ذخیره می کند. دستور بعد از or برای این استفاده می شود که اگر فایل وجود نداشت یا خطایی در باز شدن فایل بوجود آمد ما خطای خودمان را نشان کاربر دهیم نه خطایی که PHP می دهد. در شرط حلقه while دستوری بکار رفته به نام feof که هندل یک فایل را می گیرد و اگر فایل به آخر رسیده باشد true و در غیر این صورت false برمی گرداند. در بدنه حلقه while هم از دستور fgets برای خواندن خط به خط فایل متنی استفاده کردیم. در خط آخر نیز باید فایلی که باز کردیم را با استفاده از تابع fclose ببندیم.

در آرگومان دوم تابع fopen همانطور که ملاحظه کردید، باید حالت باز کردن فایل را مشخص کنید. در مثال بالا ما فایل را با حالت فقط خواندنی باز کردیم چون فقط می خواستیم محتویات فایل را بخواینم. حالت های دیگر باز کردن یک فایل در PHP به صورت زیر است :

  • «r» باز کردن فایل به صورت فقط خواندنی
  • «w» باز کردن فایل برای فقط نوشتن، اشاره گر را به اول فایل می برد و این یعنی اگر فایل وجود داشته باشد تمام محتویات قبلی را پاک می کند و از نو می نویسد. اگر فایل وجود نداشته باشد سعی می کند آن را ایجاد کند.
  • «r+» باز کردن فایل برای خواندن و نوشتن. حالت نوشتن شرایط همان «w» را دارد.
  • «a» باز کردن فایل فقط برای نوشتن. اشاره گر را به انتهای فایل می برد و از آنجا شروع به نوشتن می کند (Append می کند). در صورتی که فایل وجود نداشته باشد سعی می کند آن را بسازد.
  • «a+» باز کردن فایل برای خواندن و نوشتن (Append) با شرایط «a»

نوشتن (ایجاد) یک فایل متنی در PHP

حالا که با حالت های مختلف باز کردن یک فایل در PHP آشنا شدید قصد داریم فایلی را در حالت Append باز کنیم و متنی را به انتهای آن اضافه کنیم. به مثال زیر توجه کنید :

<?php
$content = «This is a sample text.\n»;
$filename = «test.txt»;
$handle = fopen($filenmae, «a»);
if (fwrite($handle,$content) == TRUE)
echo «Success»;
else
echo «Faild»;
fclose($handle);
?>

فکر می کنم مثال خیلی واضح باشد. تنها تابع نا آشنا برای شما در این مثال، تابع fwrite است که هندل فایل را در آرگومان اول می گیرد و مقدار آرگومان دوم را در آن فایل ذخیره می کند. تابع fwrite اگر موفق به نوشتن بر روی فایل شود true و در غیر این صورت false برمی گرداند.

در ASP.NET برای نوشتن در یک فایل متنی از کلاس StreamWriter موجود در فضای نام System.IO به صورت زیر استفاده می کنیم :

StreamWriter writer = File.CreateText(«test.txt»);
writer.WriteLine(«test»);
writer.Close();

بررسی وجود یا عدم وجود یک فایل یا یک دایرکتوری در PHP

برای این کار از تایع file_exists استفاده می کنیم که در آرگومان آن باید آدرس فایل یا دایرکتوری مورد نظر خود را بدهیم تا این تابع با برگرداندن true یا false وجود یا عدم وجود فایل را به ما اطلاع دهد. یک مثال کوچک می تواند قطعه کد زیر باشد :

<?php
if(file_exists(«mydirectory/myfile.temp»))
//do something
?>

در ASP.NET برای این کار از متد File.Exists موجود در فضای نام System.IO استفاده می کنیم.

آپلود فایل در PHP

قبلاً در مورد آپلود فایل در ASP.NET توضیح داده بودم +، برای انجام این کار در PHP ابتدا باید یک فرم HTML برای انتخاب فایل توسط کاربر ایجاد کنید و سپس با استفاده از کدنویسی PHP عملیات آپلود بر روی سرور را انجام دهید. فرم HTML شما برای آپلود یک فایل می تواند چیزی شبیه به کد زیر باشد :

<form enctype=»multipart/form-data» action=»upload.php» method=»POST»>
Please choose a file: <input name=»uploaded» type=»file» /><br />
<input type=»submit» value=»Upload» />
</form>

کدهای بالا را در قسمت body یک فایل html ذخیره کنید. این فرم با استفاده از متد post اقدام به ارسال فایل کاربر به صفحه upload.php می کند. حالا یک فایل به نام upload.php کنار فایل HTML بالا بسازید و کدهای زیر را در آن ذخیره کنید :

<?php
$target = «upload-directory/» . basename( $_FILES[‹uploaded›][‹name›]) ;
if(move_uploaded_file($_FILES[‹uploaded›][‹tmp_name›], $target))
echo «The file has been uploaded»;
else
echo «error during uploading.»;
?>

کد بالا برخلاف کدهای دیگری که تا به حال دیدید نیاز به توضیح بیشتری دارد! PHP تمام فایل هایی را که توسط متد post بر بروی سرور آپلود می شوند را همراه با اطلاعات مربوط به آن فایل ها در یک آرایه سراسری به نام $_FILES نگهداری می کند. در خط اول این کد با استفاده از تابع basename نام فایل را از آدرس کامل فایل جدا کردیم و به همراه آدرس دایرکتوری که می خوایم فایل ها در آن آپلود شوند در متغیر target ریختیم. در خط دوم و در شرط if با استفاده از تابع move_uploaded_file فایل های آپلود شده را که دارای نام موقت بر روی سرور هستند را به آدرسی که خودمان می خواهیم (آدرسی که در متغیر target ریختیم) منتقل می کنیم. در حقیقت این تابع کار Rename را انجام می دهد که اگر موفقیت آمیز باشد true و در غیر این صورت false برمی گرداند.

آرایه $_FILES همانطور که گفتم، علاوه بر فایل ها، اطلاعات مربوط به فایل ها را هم در خود ذخیره می کند. مثلاً $_FILES[«uploaded»][«tmp_name»] نام موقت فایل بر روی سرور را برمیگرداند. این اطلاعات خیلی مفید هستند، به طور مثال شما می توانید سایز و پسوند فایل را چک کنید که اگر دلخواه شما نبود به کاربر اجازه آپلود فایل را ندهید. به مثال زیر توجه کنید :

<?php
if(($_FILES[«userfile»][«type»] == «image/jpeg») &&
($_FILES[«userfile»][«size»] < 50000))
echo «Successfuly uploaded.»;
else
echo «Invalid file size or file type.»;
?>

در این کد چک می کنیم که فایل ارسالی کاربر از نوع عکس jpeg و سایز آن کمتر از 5 کیلوبایت باشد. خب فکر میکنم این مطلب خیلی طولانی شد 🙂 ادامه این مطلب را در قسمت های بعدی بخوانید…!

20+ توسعه دهنده دات نت برای دنبال کردن در توییتر!

توییتر یکی از محبوب ترین سرویس های شبکه اجتماعی در اینترنت است که توانست در مدت کوتاهی کاربران زیادی را جذب خود کند. ایده توییتر ساده است و معمولاً زمان بسیار کمتری نسبت به شبکه های اجتماعی دیگر مثل فیس بوک از شما می گیرد. به همین علت اشخاص پرمشغله نیز از این سرویس استفاده می کنند و در آن فعالیت روزانه دارند. در این مطلب کوتاه با افرادی آشنا خواهید شد که در زمینه دات نت و مسائل مربوط به برنامه نویسی اشخاص سرشناسی هستند و توییت های آنان معمولاً در مورد تکنولوژی های مربوط به برنامه نویسی است. دنبال کردن این افراد در توییتر از این جهت مفید است که شما می توانید با ایده ها و پروژه های این افراد بیشتر آشنا شوید و از کارهای روزانه آن ها اطلاع پیدا کنید. توییت های اکثر این اشخاص منبع خوبی برای پیگیری اخبار دنیای دات نت و برنامه نویسی است.

توییتر

  1. Jeff Atwood نویسنده وبلاگ Coding Horror و صاحب وب سایت معروف Stack Overflow +
  2. Scott Guthrie مرد درجه اول ASP.NET، نیازی به معرفی بیشتر ندارد! +
  3. Scott Hanselman مردی که فکر نمی کنم برای برنامه نویسان دات نت و ASP.NET ناشناخته باشد! +
  4. Scott Hunter مدیر برنامه تیم ASP.NET در مایکروسافت +
  5. John Resig سازنده jQuery و از اعضای شرکت موزیلا +
  6. Louis DeJardin از اعضای اصلی تیم ASP.NET و نویسنده Spark +
  7. Charlie Kindel توسعه دهنده سیستم عامل ویندوز برای گوشی های اسمارت +
  8. Damien Guard از اعضای تیم  Entity Framework و LINQ در مایکروسافت +
  9. Phil Haack از اعضای تیم ASP.NET در مایکروسافت و توسعه دهنده اصلی پروژه اوپن سورس Subtext +
  10. Pete Brown مدیر برنامه برای توسعه Windows Client در مایکروسافت +
  11. Niels Hartvig برنامه نویس ASP.NET و بنیان گذار CMS اوپن سورس Umbraco +
  12. Nikhil Kothari معمار نرم افزار در مایکروسافت در تکنولوژی های ASP.NET و Silverlight +
  13. David Fowler از اعضای برنامه نویس تیم ASP.NET +
  14. David Ebbo از اعضای تیم ASP.NET و فعال در زمینه ASP.NET MVC +
  15. Jeremy Skinner برنامه نویس سی شارپ و فعال در زمینه ASP.NET MVC و اوپن سورس +
  16. Dana Coffey برنامه نویس ASP.NET و از بنیان گذاران اصلی سایت ASPInsiders +
  17. Chris Hardy فعال در زمینه ASP.NET MVC و MonoTouch +
  18. Jon Skeet برنامه نویس سی شارپ که برای گوگل کار می کند! +
  19. Dan Wahlin برنامه نویس دات نت، سیلورلایت و شیرپوینت +
  20. Jeremy Likness برنامه نویس سی شارپ و سیلورلایت و نویسنده کتاب +

https://farasun.wordpress.com

اکانت من در توییتر +

پ.ن 1 : به دلیل فیلتر بودن وب سایت توییتر می توانید از لینک های + کنار هر کدام از افراد بالا برای مشاهده توییت هایشان استفاده کنید. کلاینت تحت وب Tweetree کلاینت توییتر محبوب من است!

پ.ن 2: شما هم می توانید برنامه نویسان موفقی که در زمینه دات نت کار می کنند و در توییتر اکانت دارند را به این لیست اضافه کنید.

پروژه دات نت شما چه وابستگی هایی دارد؟

اغلب پروژه هایی که با پلت فرم دات نت توسعه داده می شوند علاوه بر وابستگی به دات نت فریم ورک ممکن است به فایل های دیگری نیز برای اجرا وابسته باشند. فایل هایی که برنامه ما بدون وجود آن ها در کامپیوتر کاربران اجرا نخواهد شد. این موضوع مخصوصاً هنگام ساخت Setup برای برنامه اهمیت پیدا می کند. اینکه تمام فایل هایی که برنامه ما برای اجرا به آن ها احتیاج دارد را پیدا کنیم تا برنامه Setup آن ها را نیز همراه با برنامه ما روی سیستم کاربر نصب کند.

یکی از ساده ترین راه ها برای یافتن فایل های وابسته به پروژه، نگاه کردن به پوشه References موجود در پنجره Solution Explorer در ویژوال استادیو است. یا اینکه یک پروژه Setup بسازید و پوشه Detected Dependencies موجود در آن را بررسی کنید. اما متاسفانه این راه های ساده همیشه ما را به جواب قطعی نمی رسانند. زیرا ممکن است همین فایل های موجود در ارجاع های پروژه شما نیز وابستگی هایی به فایل های خارج از پروژه شما داشته باشند.

در اینجا به بررسی 3 ابزار برای یافتن وابستگی های یک پروژه یا اسمبلی دات نت می پردازیم.

x.NET Reflector

یکی از بهترین راه ها برای یافتن تمام وابستگی های یک پروژه دات نت، استفاده از ابزار سودمند x.NET Reflector است. این ابزار می تواند تمام محتویات یک کامپوننت دات نت مثل یک اسمبلی را شناسایی، تحلیل، جستجو و مرور کند و اطلاعات باینری را به فرم قابل خواندن تبدیل نماید. هنگامی که یک کامپوننت دات نت را با این ابزار باز می کنید، تمام اجزای آن را که شامل کلاس ها، ارجاع ها و منابع می شود به شما نشان می دهد. با زدن Ctrl+R یا انتخاب گزینه Analyze از منوی Tools پنجره جدیدی به برنامه اضافه می شود که وابستگی های کامپوننت دات نت مورد نظر شما را نشان می دهد.
این برنامه دارای ویژگی های فوق العاده دیگری مانند Decompile کردن اسمبلی های دات نت و تبدیل کدهای سی شارپ به ویژوال بیسیک و بالعکس نیز هست که در مطلب دیگری به آن خواهیم پرداخت.

.NET Reflector

NDepend

یکی از قدرتمندترین ابزارهای دنیای دات نت برای یافتن وابستگی هاست که با ابزارهای ویژوالی که به شما ارائه می دهد، درک وابستگی میان اجزای پروژه را آسان می کند. هر چند این تنها قابلیت این برنامه نیست، اما یکی از قابلیت های اساسی آن یافتن وابستگی های یک پروژه دات نت است که با ابزارهایی که در اختیار شما قرار می دهد و پیشنهاداتی که بر اساس این وابستگی ها به شما ارائه می کند، شما را از شر وابستگی های نادرست خلاص می کند. با NDepend برنامه نویسان می توانند ساختار کدهای خود را تحلیل و قوانین طراحی را مشخص کنند. این ابزار دید جدید و عمیقی از ساختار پروژه به شما ارائه می کند.

متاسفانه نسخه حرفه ای NDepend رایگان نیست اما نسخه Trial آن را می توانید برای کارهای غیرتجاری به صورت رایگان از اینجا دریافت کنید.

NDepend

Dependency Finder

یک ابزار کوچک که تنها وظیفه اش لیست کردن فایل هایی است که پروژه دات نت شما به آن ها وابستگی دارد. برخلاف دو ابزار قبلی که در این زمینه بسیار حرفه ای هستند، این برنامه کم حجم یک لیست ساده به شما نمایش می دهد که با استفاده از آن می فهمید چه پروژه ها و اسمبلی هایی به یکدیگر وابستگی دارند. برای استفاده از این ابزار ساده، شما باید پوشه پروژه خود را انتخاب کنید، سپس برنامه تمام زیرپوشه ها را برای یافتن فایل های پروژه های شما جستجو می کند. این ابزار وقتی سودمند است که یک Solution بزرگ دارید که شامل چندین پروژه است و شما می خواهید وابستگی های میان این پروژه ها را پیدا کنید.
این برنامه ساده برخلاف دو ابزار قبلی فقط می تواند وابستگی پروژه های سی شارپ را پیدا کند.

<p style=»text-align: justify;»><span style=»color: #ffffff;»>farasun.wordpress.com</span></p>

<a href=»http://feeds.feedburner.com/Farasun»><img class=»size-full wp-image-163″ title=»feed» src=»https://farasun.files.wordpress.com/2008/07/feed.jpg&raquo; alt=»Subcribe to Farasun feed» width=»16″ height=»16″ /><strong>مشترک فراسان شويد</strong></a>

<span style=»color: #ffffff;»>farasun.wordpress.com</span>

farasun.wordpress.com

Subcribe to Farasun feedمشترک فراسان شويد

همچنین بخوانید :

عنوان های دیگر این مطلب : یافتن وابستگی های یک پروژه دات نت| چطور فایل های وابسته به یک پروژه دات نت را پیدا کنیم ؟

عنوان انگلیسی این مطلب : How to find your .NET project dependencies?

برای ثبت در بلاگبان : 086bf5178eb810a4c46acf3e709a87ab

ASP.NET MVC 2 یک قدم به جلوتر!

همانطور که ممکنه خبر داشته باشید نسخه کاندیدای انتشار ASP.NET MVC 2 برای دریافت عموم منتشر شده است. این طور که به نظر می آید این آخرین نسخه  ای است که قبل از نسخه اصلی منتشر می شود. نسخه کاندیدای انتشار ASP.NET MVC نسخه 2 برای ویژوال استادیو 2008 سرویس یک 1 از اینجا قابل دریافت است. این نسخه می تواند در کنار نسخه یک ASP.NET MVC نصب شود و هیچ اختلالی نیز ایجاد نخواهد کرد. همانطور که از یک نسخه کاندیدای انتشار یا RC انتظار می رود، بیشتر تمرکز تیم ASP.NET MVC بر روی رفع باگ ها و بهبود ویژگی های موجود بوده است. در کل تیم توسعه ASP.NET MVC چیزهای جدید زیادی به این نسخه اضافه نکرده است. باید منتظر ماند و دید در نسخه نهایی چه تغییراتی حاصل خواهد شد.

مهمترین بهبودی که در این نسخه شاهد هستیم مربوط به اعتبار سنجی طرف کلاینت یا Client Validation است. به طور مثال اسکریپت های اعتبارسنجی برای جلوگیری از تداخل با دیگر کتابخانه های آیجکسی در فایل های جداگانه ی جاوا اسکریپت قرار می گیرند. این اسکریپت های اعتبارسنجی از Globalization نیز پشتیبانی می کنند. متد Html.ValidationSummary نیز مدل دیگری از نمایش خطاهای اعتبارسنجی را ارائه خواهد کرد.

از زمانی که فریم ورک ASP.NET MVC از طرف مایکروسافت ارائه شده، توسعه دهندگانی که از ASP.NET WebForms استفاده می کردند بر سر دوراهی قرار گرفتند. هر چند از ابتدا هم ASP.NET MVC برای از بین بردن وب فرم ها بوجود نیامده بود اما اکنون با پیشرفت ASP.NET MVC برخی ها بر این باورند که در آینده ای نه چندان دور وب فرم ها نیز مانند ASP کلاسیک از بین خواهد رفت و ASP.NET MVC جایگزین آن خواهد شد. نظر شما چیست!؟

اگر می خواهید پروژه هایی که با ASP.NET MVC نسخه یک نوشته اید را به نسخه 2 ارتقاع دهید می توانید ادامه مطلب را بخوانید!

نحوه آپگرید کردن یک پروژه ASP.NET MVC از نسخه یک به نسخه 2 :
1- ابتدا پیشنهاد می شود یک نسخه بک آپ از پروژه فعلی خود بگیرید!

2- فایل پروژه را (فایلی با پسوند csproj یا vbproj) با یک ویرایشگر متنی باز کنید و قسمت ProjectTypeGuide را پیدا کنید. مقدار این عنصر را به {F85E285D-A4E0-4152-9332-AB1D724D3325} تغییر دهید. حالا باید شبیه به چنین عبارتی باشد :

x<ProjectTypeGuids>{F85E285D-A4E0-4152-9332-AB1D724D3325};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>x

3- در پوشه ریشه وب اپلیکیشن خود، فایل Web.config را باز کنید و به دنبال System.Web.Mvc, Version=1.0.0.0 بگردید و عدد «1» را به «2» تبدیل کنید.

4- مرحله قبل را برای فایل Web.config موجود در پوشه Views پروژه خود انجام دهید.
5- پروژه خود را با ویژوال استادیو باز کنید، در Solution Explorer قسمت References را باز کنید و ارجاع به اسمبلی System.Web.Mvc که اشاره به اسمبلی نسخه یک ASP.NET MVC دارد را حذف کنید. حالا به System.Web.Mvc(v2.0.0.0) ارجاع دهید.

6- عناصر زیر را در قسمت <configuration> فایل Web.config موجود در دایرکتوری ریشه پروژه خود اضافه کنید :

x<runtime>
<assemblyBinding xmlnsurn:schemas-microsoft-com:asm.v1«>
<dependentAssembly>
<assemblyIdentity nameSystem.Web.Mvc»
publicKeyToken31bf3856ad364e35«/>
<bindingRedirect oldVersion1.0.0.0» newVersion2.0.0.0«/>
</dependentAssembly>
</assemblyBinding>
</runtime>x

7- یک اپلیکیشن ASP.NET MVC 2 بسازید و فایل های موجود در فولدر Scripts این پروژه را به فولدر Scripts موجود در اپلیکیشن خود اضافه کنید.

farasun.wordpress.com

پ.ن : ممکن است به علت امتحانات و برخی مشغله ها اینجا کمتر به روز شود.

<ProjectTypeGuids>{F85E285D-A4E0-4152-9332-AB1D724D3325};{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>