تبلیغات
مقالات آموزشی برنامه نویسی و شبکه - مطالب آموزش ASP.NET

آموزش بررسی پسوندهای مجاز فایل ها در asp.net

در بسیاری از موارد نیاز است که کاربر و یا مدیر سایت ، یک سری فایل بر روی سایت آپلود نماید ، حال این فایل می تواند یک تصویر  ، یک سند متنی ، یک فایل فشرده و یا یک فایل ویدئویی باشد.

در این موارد برنامه نویس حتما می بایست پسوند فایل را بررسی نماید و اجازه آپلود هر نوع فایلی را ندهد.


در asp.net برای بررسی پسوند فایل ها چندین راه وجود دارد که در اینجا یکی از این راه ها را آموزش خواهیم داد :

به کد زیر توجه کنید :


در این کد ما یک آرایه ایجاد کرده ایم و تمامی انواع فایلی (MIME TYPES) مجاز را درون آن قرار داده ایم ، سپس تمامی آرایه را درون یک متغیر از نوع StringCollection ریخته ایم و در پایان با کمک تابع Contains به راحتی پسوند فایل را بررسی نموده ایم.

این راه حلی است که همکار بنده از اون استفاده می کنه.

یکی از مشکلات کد بالا این است که شما باید MIME TYPE ها را بلد باشید و همچنین نحوه عملکرد تابع Contains در حاله ای از ابهام است و باید حتما حسابی این تابع رو چک کنید و ببینید که در مقابل همه نوع فایلی درست عمل می کنه یا نه . (البته اینو برای این گفتم که خودم تا حالا با این تابع کار نکردم و کارکردشو نمی تونم بهتون تضمین بدم)

سایت نت نیک

در ادامه راه حل دیگری که بنده خودم ازش توی کارام استفاده می کنم رو بهتون آموزش میدم:
به کد زیر توجه کنید:



بنده یک کلاس استاتیک ساخته ام و درون اون یک پراپرتی استاتیک ایجاد کرده ام.
درون متد get این پراپرتی ، یک لیست جنریک از نوع استرینگ (<List<string) تعریف کرده ام که درون آن با استفاده از تابع Add تک تک پسوند های مجاز را درونش اضافه می کنم.
دقت کنید که در اینجا ما صحبتی از MIME TYPE نزدیم و شما فقط با پسوند فایل ها سرو کار دارین.

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

در ادامه من لیست جنریکم رو return می کنم.

در این کلاس یک تابع دارم که نام یک فایل رو می گیره و بعد روی لیست جنریکم حرکت می کنه و پسوند فایل رو با تک تک خونه های داخل لیست تطابق میده و در صورتی که تطابقی پیدا شد مقدار true و در غیر اینصورت مقدار false رو برمی گردونه.


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

تا آموزشی دگر بدرود.
سوالاتتونو تو بخش نظرات و یا در انجمن سایت مطرح کنین.

------------------------------------
آپدیت :

جناب آقای رضا کیا این مطلب رو ارسال نمودند که در جهت تکمیل این آموزش اینجا قرارش میدم:

سلام

نکته اوّل:
تابع Contains رو اصلا بهش شک نکن!
این تابع تمام حالتهای ضرب دکارتی مجوعه اصلی و مجموعه قیاس رو چک میکنه

برای همین برای مجموعه های بزرگ اصلا بهینه نیست.

نکته دوّم:
روش همکارت خیلی بهتره! چون با روش خودت امکان Shell Upload رو بوجود میاری، روش خودت درست مثل این میمونه که اجازه بارگذاری هر فایلی رو بدی!! جزییاتش رو تو وب دنبال کن
با این کلید واژه Shell Upload attack

نکته سوّم:
از این دستور تک خطی به جای کل تابع میتونی استفاده بکنی
سرعت اجراش کمی «کمی فقط» بیشتر و بهتره
خوانایی هم البته بیشتر داره



اگه سوالی بود بهم ایمیل بزن
آموزش خوبی بود :)
موفق باشی و سربلند

----------------------------------------
پاسخ بنده به ایشون:
 سلام
خیلی ممنون از راهنماییت ، دستت طلا.
به مطلب خیلی مهمی اشاره کردی.
با توجه به صحبت شما میشه به این نتیجه رسید که کد بنده فقط پسوند رو چک می کنه ولی کد شما و کد همکارم داره ماهیت کامل فایل رو چک می کنه که مطمئنا روش شما و همکارم خیلی بهتر از روش بنده است و به بالاخص از جنبه امنیتی نیز بسیار مهم است.
با تشکر.

نوشته شده در تاریخ جمعه 3 خرداد 1392    | توسط: ح.م    | طبقه بندی: آموزش ASP.NET، آموزش امنیت در asp.net،     | نظرات()


آموزش ست کردن دکمه پیش فرض فرم در صفحات content

در بسیاری از صفحات وب سایت ها مثل صفحات جستجو ، صفحات ورود ، صفحات ثبت نام و خیلی از جاهایی که یک دکمه درون صفحه وجود داره ، خیلی اوقات مشاهده کرده اید که به جای کلیک روی دکمه ، به راحتی می تونین دکمه اینتر صفحه کلیدتون رو بزنین.
این کار یه لذت خاصی به آدم میده و از اونجایی که سرعت عمل آدم رو بالا می بره ، یه حس رضایت خیلی خوبی به کاربر میده.
کاربر متوجه میشه که واقعا یه برنامه نویس خیلی با تجربه سایت رو طراحی کرده.
برنامه نویسی که به اصول کاربرپسند کردن سایت به خوبی واقف بوده.
این مورد خیلی کوچک شاید از نظر شما که برنامه نویس وب سایت هستید ، بی اهمیت جلوه کنه ولی در اصل خیلی مهمه و همین ریزه کاری هاست که سایت ها و برنامه نویسای سایت رو از هم متمایز می کنه.
هر یک از فرم های صفحات asp.net دارای یک خاصیت با نام DefaultButton هستند.
اگر آی دی یکی ار دکمه های داخل صفحه رو روی این خاصیت فرمتون ست کنین ، با زدن دکمه اینتر ، رویداد کلیک دکمه مورد نظرتون فراخونی میشه
تنظیم این مقدار در صفحات معمولی کار خیلی ساده ای است ولی در صفحاتی که دارن از مستر پیج استفاده می کنن ، داخل صفحه کانتنت (content) دیگه فرمی وجود نداره که شما بخواین روش آی دی یک دکمه رو ست کنین!
در این مواقع باید شما در کد بی هایند صفحاتتون (code behind) در زمان لود صفحه content این خصوصیت فرم رو ست کنین.

سایت نت نیک
این کار خیلی ساده انجام میشه.
به کد سی شارپ زیر دقت کنید:


به همین راحتی شما می تونین این امکان خیلی جالب رو در asp.net استفاده کنین.
امیدوارم که از این آموزش هم خوشتون اومده.
سوالات خودتونو در بخش نظرات و یا در انجمن سایت می تونین مطرح کنین.

نوشته شده در تاریخ جمعه 20 اردیبهشت 1392    | توسط: ح.م    | طبقه بندی: آموزش ASP.NET،     | نظرات()


شماره پورت های مهمی که هر برنامه نویسی باید بدونه

ارسال و دریافت ایمیل ، طراحی سایت های دو هاسته و اتصال به ftp هاست دوم و آپلود فایل روی اون ، اتصال به درگاه بانکی با ssl ، اتصال به یک سرور و اجرای کاماند روی اون ، ایجاد کانکشن استرینگ و اتصال به دیتابیس های مختلف ، همه این کارا با اتصال به پورت های خاصی انجام می پذیره که این رو می طلبه که برنامه نویس یک سری پورت های مهم و پرکاربرد مرتبط با علم برنامه نویسی وب رو بشناسه.
در زیر مهمترین پورت هایی رو که یک برنامه نویس وب باید بدونه رو براتون لیست کردم:
  • 21 FTP
  • 22 SSH
  • 23 TELNET
  • 25 SMTP
  • 53 DNS
  • 80 HTTP
  • 110 POP3
  • 143 IMAP
  • 443 SSL
  • 1433 MSSQL
  • 3306 MySQL
  • 3389 Remote Desktop

نکته خیلی مهم اینه که برخی سرویس های ایمیل مثل جی میل ، جهت اتصال به smtp شون باید از ssl استفاده بشه که در اینصورت به جای پورت 25 باید از طریق پورت 587 جهت اتصال به میل سرور و ارسال ایمیل استفاده کنین و این نکته ای بود که بنده طی تجربیاتم کسب کردم. (نت نیک جاییه که فوت کوزه گری رو بدون هیچ منتی در اختیار علاقمندان میزاریم،فقط علاقمندان به برنامه نویسی اینجا جمع بشن و درخواست مطلب بکنن ، خیلی دوست دارم اگر در توانم باشه کمکشون کنم.)

سایت نت نیک

امیدوارم که از این آموزش هم خوشتون اومده باشه.

موفق باشید.

نوشته شده در تاریخ شنبه 7 اردیبهشت 1392    | توسط: ح.م    | طبقه بندی: آموزش ASP.NET،     | نظرات()


قابلیت درج خودکار کوتیشن در ویژوال استودیو

شاید برای برنامه نویسان asp.net که تو ویژوال استودرو کد میزنن، یکی از بدتریت تجربیات این باشه که وقتی خصوصیت یک تگ رو می نویسین و بعد علامت مساوی رو جلوش میزارین ، خود ویژوال استودیو 2 تا کوتیشن جلوش نمیزاره !
این مورد منو که خیلی خیلی عصبانی می کنه ، آخه این چجور برنامه ایه که خودش کوتیشن ها رو هم نمیزاره (دهه )
اگر شما هم همین مشکل رو داریم و حسابی کلافتون کرده ، باید بدونین که ویژوال استودیو همچین قابلیتی داره ولی نمی دونم چرا بصورت پیش فرض غیر فعاله
برای اینکه این قابلیت خیلی خوش آیند رو فعال کنین ، کافیه بصورت زیر عمل کنین :
ابتدا ویژوال استودیوتونو باز کنین و سپس به مسیر زیر برین :

 Tools -> Options -> Text Editor -> HTML -> Format

سپس تیک کنار عبارت  "Insert attribute value quotes when typing" رو بزنین و بعد ok کنین.
از این به بعد حسابی خوش به حالتونه ، چون وقتی مثلا یک تگ div بنویسین و بعد جلوش بنویسین =class بصوزت خودکار 2 عدد دبل کوتیشن جلوش اضافه میشه و واسه همینه که مایکروسافت عشق منه !

توی ویژوال استودیوی 2008 و 2010 که به همین صورت بود ، توی بقیه نسخه هاشو نمی دونم ...
سایت نت نیک

نوشته شده در تاریخ جمعه 6 اردیبهشت 1392    | توسط: ح.م    | طبقه بندی: آموزش ASP.NET،     | نظرات()


آموزش از بین بردن یک کلاس (Dispose) در سی شارپ

با سلام

همانطور که می دانید ، در سی شارپ اطلاعات به دو صورت ذخیره می شوند:

  1. بصورت فیزیکی (روی هارد سرور)
  2. بصورت مجازی (روی رم سرور)

وقتی از یک کلاس instanse می سازید ، در اصل کلاس شما روی رم سرور ایجاد میشه و تمامی property ها و اطلاعاتش هم روی رم سرور ذخیره میشه ...


خوب این موضوع وقتی دارین تحت کنسول کار می کنین ، زیاد مهم نیست ؛

ولی زمانی که در ساخت یک سایت از کلاس نویسی استفاده می شود 2 تا مشکل بزرگ بوجود میاره :


  1. بعد از یه مدت رم سرور پر میشه و به اصطلاح بخش بزرگی از رم درگیر میشه ...
  2. اگر کلاس شما حاوی اطلاعات حساسی باشه ، هکز های حرفه ای به راحتی می تونن بهش دسترسی داشته باشن


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


در کلاس نویسی شما می تونین instance ای که ساختین رو بعد از اینکه کارتون باهاش تموم شد ، از بین ببرین


این کار با Distractor انجام میشه ....

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


در سی شارپ یک کلاس با نام GC (گاربیج کالکتور) وجود داره که کارش اینه که کلاس هایی که روی رم هستند رو خودش بطور خودکار بعد از یه مدت ار زوی رم پاک می کنه (به اصطلاح Dispose می کنه)


خوب گاهی ما به یک کلاس نیاز داریم که خود به خود توسط GC از بین نره ....

آموزش از بین بردن یک کلاس (Dispose) در سی شارپ - netnic.ir
مثلا من یک کلاس دارم که قراره یک عدد 10 رقمی بسازه و توی یکی از property هاش قرار بده ....

این عدد 10 رقمی برای من خیلی مهم و حساسه و نمی خوام روی رم باقی بمونه (نمی خوام به امید GC بمونم که بعد از یه زمانی بیاد و کلاسم رو از روی رم پاک کنه)


من می خوام توی کلاس GC رو غیر فعال کنم و بعد خودم یک تابع توی کلاسم بسازم که از بیرون از کلاس بتونم خودم هر وقت دوست داشتم کلاسم رو از روی رم پاک کنم (می خوام یک تابع Dispose شخصی برای خودم داشته باشم)


در ادامه مطلب یاد میگیریم که چطور میشه این کارو انجام داد.

نوشته شده در تاریخ سه شنبه 20 فروردین 1392    | توسط: ح.م    | طبقه بندی: آموزش ASP.NET، آموزش سی شارپ،     | نظرات()


ارور dangerous در زمان وارد کردن تگ در کنترل های asp.net

با سلام
خیلی از مواقع نیاز میشه که ما بوسیله تگ های html به مطالب سایتمون فرم بدیم.
در این مواقع دوست داریم که درون text box  های asp.net مون از تگ هایی مثل br یا strong استفاده کنیم.
حال اگر سایتمون داینامیک باشه ، خیلی دوست داریم که این متون و تگ های html ای که داخل text box نوشته ایم رو داخل دیتابیس ذخیره کنیم.
در این مواقع اگر با asp.net نسخه 4 کار کنین ، حتما با پیغامی شبیه پیغام زیر مواجه خواهید شد:
Error:A potentially dangerous Request

در این زمان asp.net مقدار داخل تکست باکس رو اسکریپت خطرناک در نظر می گیره و به شما اجازه ارسال مثایدر خطرناک به سرور رو نمیده.
البته اشتباه نکنین ، این یک عیب برای asp.net محسوب نمیشه!
بلکه این امنیت بالای asp.net رو می رسونه که کدهای خطرناک رو تشخیص میده و حتی اجازه ارسال اطلاعات به سرور رو نمیده.

راه حل چیست؟ چطوری میشه از دست ارور Error:A potentially dangerous Request رهایی پیدا کنیم؟

ابتدا درون دایرکتیو صفحه توی کد زیر رو اضافه کنین :
"ValidateRequest="false
حال وارد فایل web.config بشین و درون تگ system.web تگ زیر رو اضافه کنین:

در توضیح باید بگم که در asp.net نسخه 2 ، سیستم امنیتی asp.net اینقدر حساس نبود و به تگ های html داخل تکست باکس ها رو خطرناک در نظر نمی گرفت.
حال با این تگ شما سیستم امنیتی تشخیص کدهای خطرناک asp.net رو روی نسخه 2 تنظیم می کنین و بدین صورت بر اساس قوانین نسخه 2 اعتبار سنجی اطلاعات داخل تکست باکس هاتون انجام میشه.

سایت نت نیک
خوب به همین راحتی.
امیدوارم که از این آموزش هم لذت برده باشید.
تا آموزشی دگر بدرود
"سایت آموزشی نت نیک"

نوشته شده در تاریخ شنبه 26 اسفند 1391    | توسط: ح.م    | طبقه بندی: آموزش ASP.NET،     | نظرات()


نمونه کد کانکشن استرینگ برای اتصال به دیتابیس sql

با سلام
سایت نت نیک
بسیاری از دوستان در اتصال دادن سایتشون با دیتابیس sql مشکل دارند و نمی دونن کانکشن استرینگ موجود در فایل web.config رو باید چطوری بنویسن ....


کانکشن استرینگ رو هم می توان در کد نویسی نوشت و هم درون فایل web.config :

نوشتن کانکشن استرینگ درون فایل وب کانفیگ :



2-
در صورتی که بخواین به یک سرور sql که روی بستر اینترنت است وصل بشین (روی هاست) :


توضیح :
  • به جای آی پی باید آی پی سرور SQL هاستتون رو قرار بدید (از شرکت خدمات هاستینگتون بپرسید)
  • به جای عبارت DatabaseName باید اسم دیتابیستون رو قرار بدید
  • به جای عبارت DatabaseUserName باید یوزرنیم دیتابیستون رو قرار بدید
  • به جای عبارت DatabasePassword باید پسورد دیتابیستون رو قرار بدید

من این کانکشن استرینگ رو همیشه استفاده می کنم و تا الان همیشه جواب داده و مشکلی باهاش نداشتم.


2- در صورتی که می خواین به Sql ای که روی کامپیوتر خودتونه وصل بشین :






نوشته شده در تاریخ سه شنبه 12 دی 1391    | توسط: ح.م    | طبقه بندی: آموزش ASP.NET،     | نظرات()


نحوه نمایش اطلاعات درون گرید ویو در داخل textbox

سلام
چطوری می شه دستور select دیتا سورس را داخل گرید استفاده کرد طوری که داده ها را به کنترلها مثل تکس باکس اضافه کنه ؟
البته من می خوام کد ها را داخل row_command گرید ویو بنویسم
با تشکر

سلام
اگر منظورتون دریافت اطلاعات از دیتابیس بوسیله SqlDataSource و ریختنشون تو یک گرید ویو است ، بصورتی که اطلاعات وقتی توی گرید ویو قرار میگیره درون textBox نمایش داده بشه .
کاری نداره ، شما گرید ویو رو انتخاب کن و بعد فلش کوچکی که کنارش ظاهر میشه (smart menu) رو بزن و گرید ویو رو به SqlDataSource ای که توی صفحه داری متصل کن.
بعد از طریق گزینه Edit Items می تونی یک ستون از نوع Template Field به گرید ویوت اضافه کنی و بعد ok رو بزنی تا پنجره Edit Items بسته بشه
حالا شما یک ستون جدید توی گرید ویوت داری (می تونی کل ستونهایی که داری رو حذف کنی و فقط یک یا چند تا ستون از نوع Template Field توی گرید ویوت قرار بدی).

نوشته شده در تاریخ یکشنبه 10 دی 1391    | توسط: ح.م    | طبقه بندی: آموزش ASP.NET، جواب سوالات شما،     | نظرات()