یاسر کریمی
یاسر کریمی
خواندن ۴ دقیقه·۶ سال پیش

ساده اما ایمن – چند راهکار ساده ایمن سازی نرم افزار

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

نظم دشمن امنیت!

در برنامه نویسی وطراحی دیتابیس داشتن نظم بسیار مهم است چون باعث می شود در زمان رفع اشکال بتوانبه سادگی مشکل را پیدا کرد اما همین نظم دشمن امنیت ماست.

به این مثال توجه کنید:

فرض کنید که یک سایت دارید برای ذخیره سازی نوشته های کاربرانتان و شش نوشته در سیستم شما موجود است سه تا اول با ای دی های ۱و۳و۴ متعلق به user1 و نوشته های ۶و۸و۹ متعلق به user2 هست. و ادرس دسترسی به نوشته های هم به صورت زیر است:

www.example.com/note//{id}

حال اگر بر حسب اشتباه فراموش کرده باشیم قبل از در خواست باز کردن چک کنیم که نوشته درخواست متعلق به کاربر هست یا نه بعد نوشته را باز کنیم کاربر متخاصم به سادگی می تواند با عوض کرد یک عدد تمام نوشته های کاربران ما را بخواند اما حال فکر کنیداگر به جای ای دی منظم از ای دی نامنظم استفاده می کردیم.

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

random id id

1sdsa 1

5fsd3 3

6sd 4

1ffs 6

sdf5 8

gh6 9

اگر به جای ای دی ۱ از ۱sdsa استفاده کینم  قطعا کاربر متخاصم نمی تواند فقط با عوض کردن یک عدد تمام نوشته ها به خواند.

یا این که فرض کنید شما سایتی دارید و اطلاعاتی به کاربر هایتان نشان می دهید و این اطلاعات ممکن است برای یک نفر مهم باشند مثلا در هر صفحه شماره تماس یک شخص خواص وجود دارد حال اگر ادرس صفحات شما به صورت بالا باشد و برای دیدن صفحه بعدی فقط نیاز باشد عدد ۱ به ۲ تبدیل شود یک ربات می تواند به سادگی تمام صفحات شما را بخواندواطلاعات مهم را از ان خارج کند. اما با تبدیل id به random id دیگر چنین چیزی ممکن نیست.

به کاربران اطلاعات اضفی ارسال نکنید.

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

اگرمن می توانم بخوانم دیگران هم می توانند.

یکیاز نکاتی که خوب به ان توجه کنیم این است که اطلاعات مهم را به گونه ای ارسال نکنیم که قابلیت خوانش داشته باشند.

برای مثال در طراحی نرم افزار وب و یا موبایل مرسوم است  از که نام کاربری و پسورد به صورت عادی برای سرور ارسال می شود و بررسی ها لازم صورت می گیرد و جواب مناسب برای کاربر ارسال می شود. برای تامین امنیت هم از لایه امنیتی SSL استفاده می شود.

اما یک سوال ایا این اطلاعات مهم غیر قابل خوانش توسط دیگران هستند؟

اگر از SSL  استفاده کنیم این کار سخت می شود اما هنوز هم نرم افزار های مخرب مقیم در مرورگر و یا دستگاه کاربر می توانند حتی بسته SSL را هم باز کنند و بخوانند.

اما بماند گاهی اوقات همین SSL هم نا امن می شود( اگردر مورد خونریزی قلبی چیزینمی دانید اینجا کلیک کنید).

برای رفع این مشکل من معمولا به جای ارسال نام کاربری و پسورد هش شده این دو عبارت را به سرور ارسال می کنم این کار را در وب سایت باستفاده از جاوااسکریپت انجام می دهم و در و گوشی با استفاده کد جاوا و از قبل مقدار هش شده نام کاربری + پسورد کاربر را در یک ستون در دیتابیس ذخیره کرده ام و از انجایی که انتظار می رود این فیلد یکتا باشد ان را ایندکس هم می کنم.

با همین کار ساده تا حدود در برابر حملات تزریق به دیتابیس هم محافظت می شوید.( در مورد SQL Injection بیشتر بدانید.)

تغییر مرتب اطلاعات دسترسی

وقتی کاربر لاگین کرد آیا همه چیز تمام شده است؟ قطعا خیر معمولا در این جور مواقع همه اطلاعات موجود در کوکی و یا توکن نرم افزار ثابت است و تا زمانی که مثلا کاربر از سایت یا نرم افزار خارج نشود سثابت هم می ماند!

در حالی که باید از ثابت بودن این جور چیز ها هم جلوگیری شود مثلا در بعد از گذشت یکزمان خاص توکن از بین برود و باید اپلیکیشن توکن جدید درخواست کند یا بعد از گذشت چند در خواست کوکی عوض شود کم نیستن سایت هایی که با اشتراک گذاری کوکی سایت های پولی کمک می کنند همه از مزایای پولی سایت بیچاره بدون پرداخت پول استفاده کنند.

البته کار های دیگری هم می توانید بکنید که شاید بعدا در موردش نوشتم. اما اگر ایده ای دارید خوش حال می شوم با من و دیگران در میان بگذارید.

http://karimi.today/blog/2018/08/%d8%b3%d8%a7%d8%af%d9%87-%d8%a7%d9%85%d8%a7-%d8%a7%db%8c%d9%85%d9%86-%da%86%d9%86%d8%af-%d8%b1%d8%a7%d9%87%da%a9%d8%a7%d8%b1-%d8%b3%d8%a7%d8%af%d9%87-%d8%a7%db%8c%d9%85%d9%86-%d8%b3%d8%a7%d8%b2/

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

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