Forwarded from اتچ بات
#Security
#Software
چند راهکار ساده ایمن سازی نرم افزار
امنیت یکی از نکات بسیار مهم در ساخت هر نرم افزاری است. گاهی اوقات برای حفظ امیت نرم افزار نیاز نیست به ابزار های پیچیده متوصل شد و با انجام چند نکته ساده می توان امنیت نرم افزار را تامین کرد.
نظم دشمن امنیت!
در برنامه نویسی وطراحی دیتابیس داشتن نظم بسیار مهم است چون باعث می شود در زمان رفع اشکال بتوانبه سادگی مشکل را پیدا کرد اما همین نظم دشمن امنیت ماست.
به این مثال توجه کنید:
فرض کنید که یک سایت دارید برای ذخیره سازی نوشته های کاربرانتان و شش نوشته در سیستم شما موجود است سه تا اول با ای دی های ۱و۳و۴ متعلق به user1 و نوشته های ۶و۸و۹ متعلق به user2 هست. و ادرس دسترسی به نوشته های هم به صورت زیر است:
www.example.com/note//{id}
حال اگر بر حسب اشتباه فراموش کرده باشیم قبل از در خواست باز کردن چک کنیم که نوشته درخواست متعلق به کاربر هست یا نه بعد نوشته را باز کنیم کاربر متخاصم به سادگی می تواند با عوض کرد یک عدد تمام نوشته های کاربران ما را بخواند اما حال فکر کنیداگر به جای ای دی منظم از ای دی نامنظم استفاده می کردیم.
به جدول زیر توجه کنید:
random id
1sdsa 1
5fsd3 3
6sd 4
1ffs 6
sdf5 8
gh6 9
@ABlueDeveloper
اگر به جای ای دی ۱ از ۱sdsa استفاده کینم قطعا کاربر متخاصم نمی تواند فقط با عوض کردن یک عدد تمام نوشته ها به خواند.
یا این که فرض کنید شما سایتی دارید و اطلاعاتی به کاربر هایتان نشان می دهید و این اطلاعات ممکن است برای یک نفر مهم باشند مثلا در هر صفحه شماره تماس یک شخص خواص وجود دارد حال اگر ادرس صفحات شما به صورت بالا باشد و برای دیدن صفحه بعدی فقط نیاز باشد عدد ۱ به ۲ تبدیل شود یک ربات می تواند به سادگی تمام صفحات شما را بخواندواطلاعات مهم را از ان خارج کند. اما با تبدیل id به random id دیگر چنین چیزی ممکن نیست.
به کاربران اطلاعات اضافی ارسال نکنید.
معمولا در زمان ساخت اپلیکیشن به این نکته کمتر توجه می شود. برای مثال برای ساخت اطلاعات یک صفحه فقط به تاریخ و نام نیاز است اما وقتی که درخواست را بررسی می کنی متوجه می شوی که توکن، تاریخ ثبت نام، نام پدر ، شماره شناسنامه، ای دی و هر آن چه در دیتابیس هست برای کاربر ارسال می شود.
اگرمن می توانم بخوانم دیگران هم می توانند.
یکیاز نکاتی که خوب به ان توجه کنیم این است که اطلاعات مهم را به گونه ای ارسال نکنیم که قابلیت خوانش داشته باشند.
برای مثال در طراحی نرم افزار وب و یا موبایل مرسوم است از که نام کاربری و پسورد به صورت عادی برای سرور ارسال می شود و بررسی ها لازم صورت می گیرد و جواب مناسب برای کاربر ارسال می شود. برای تامین امنیت هم از لایه امنیتی SSL استفاده می شود.
اما یک سوال ایا این اطلاعات مهم غیر قابل خوانش توسط دیگران هستند؟
اگر از SSL استفاده کنیم این کار سخت می شود اما هنوز هم نرم افزار های مخرب مقیم در مرورگر و یا دستگاه کاربر می توانند حتی بسته SSL را هم باز کنند و بخوانند.
اما بماند گاهی اوقات همین SSL هم نا امن می شود
برای رفع این مشکل من معمولا به جای ارسال نام کاربری و پسورد هش شده این دو عبارت را به سرور ارسال می کنم این کار را در وب سایت باستفاده از جاوااسکریپت انجام می دهم و در و گوشی با استفاده کد جاوا و از قبل مقدار هش شده نام کاربری + پسورد کاربر را در یک ستون در دیتابیس ذخیره کرده ام و از انجایی که انتظار می رود این فیلد یکتا باشد ان را ایندکس هم می کنم.
@ABlueDeveloper
تغییر مرتب اطلاعات دسترسی
وقتی کاربر لاگین کرد آیا همه چیز تمام شده است؟ قطعا خیر معمولا در این جور مواقع همه اطلاعات موجود در کوکی و یا توکن نرم افزار ثابت است و تا زمانی که مثلا کاربر از سایت یا نرم افزار خارج نشود سثابت هم می ماند!
در حالی که باید از ثابت بودن این جور چیز ها هم جلوگیری شود مثلا در بعد از گذشت یکزمان خاص توکن از بین برود و باید اپلیکیشن توکن جدید درخواست کند یا بعد از گذشت چند در خواست کوکی عوض شود کم نیستن سایت هایی که با اشتراک گذاری کوکی سایت های پولی کمک می کنند همه از مزایای پولی سایت بیچاره بدون پرداخت پول استفاده کنند.
@ABlueDeveloper
#Software
چند راهکار ساده ایمن سازی نرم افزار
امنیت یکی از نکات بسیار مهم در ساخت هر نرم افزاری است. گاهی اوقات برای حفظ امیت نرم افزار نیاز نیست به ابزار های پیچیده متوصل شد و با انجام چند نکته ساده می توان امنیت نرم افزار را تامین کرد.
نظم دشمن امنیت!
در برنامه نویسی وطراحی دیتابیس داشتن نظم بسیار مهم است چون باعث می شود در زمان رفع اشکال بتوانبه سادگی مشکل را پیدا کرد اما همین نظم دشمن امنیت ماست.
به این مثال توجه کنید:
فرض کنید که یک سایت دارید برای ذخیره سازی نوشته های کاربرانتان و شش نوشته در سیستم شما موجود است سه تا اول با ای دی های ۱و۳و۴ متعلق به user1 و نوشته های ۶و۸و۹ متعلق به user2 هست. و ادرس دسترسی به نوشته های هم به صورت زیر است:
www.example.com/note//{id}
حال اگر بر حسب اشتباه فراموش کرده باشیم قبل از در خواست باز کردن چک کنیم که نوشته درخواست متعلق به کاربر هست یا نه بعد نوشته را باز کنیم کاربر متخاصم به سادگی می تواند با عوض کرد یک عدد تمام نوشته های کاربران ما را بخواند اما حال فکر کنیداگر به جای ای دی منظم از ای دی نامنظم استفاده می کردیم.
به جدول زیر توجه کنید:
random id
1sdsa 1
5fsd3 3
6sd 4
1ffs 6
sdf5 8
gh6 9
@ABlueDeveloper
اگر به جای ای دی ۱ از ۱sdsa استفاده کینم قطعا کاربر متخاصم نمی تواند فقط با عوض کردن یک عدد تمام نوشته ها به خواند.
یا این که فرض کنید شما سایتی دارید و اطلاعاتی به کاربر هایتان نشان می دهید و این اطلاعات ممکن است برای یک نفر مهم باشند مثلا در هر صفحه شماره تماس یک شخص خواص وجود دارد حال اگر ادرس صفحات شما به صورت بالا باشد و برای دیدن صفحه بعدی فقط نیاز باشد عدد ۱ به ۲ تبدیل شود یک ربات می تواند به سادگی تمام صفحات شما را بخواندواطلاعات مهم را از ان خارج کند. اما با تبدیل id به random id دیگر چنین چیزی ممکن نیست.
به کاربران اطلاعات اضافی ارسال نکنید.
معمولا در زمان ساخت اپلیکیشن به این نکته کمتر توجه می شود. برای مثال برای ساخت اطلاعات یک صفحه فقط به تاریخ و نام نیاز است اما وقتی که درخواست را بررسی می کنی متوجه می شوی که توکن، تاریخ ثبت نام، نام پدر ، شماره شناسنامه، ای دی و هر آن چه در دیتابیس هست برای کاربر ارسال می شود.
اگرمن می توانم بخوانم دیگران هم می توانند.
یکیاز نکاتی که خوب به ان توجه کنیم این است که اطلاعات مهم را به گونه ای ارسال نکنیم که قابلیت خوانش داشته باشند.
برای مثال در طراحی نرم افزار وب و یا موبایل مرسوم است از که نام کاربری و پسورد به صورت عادی برای سرور ارسال می شود و بررسی ها لازم صورت می گیرد و جواب مناسب برای کاربر ارسال می شود. برای تامین امنیت هم از لایه امنیتی SSL استفاده می شود.
اما یک سوال ایا این اطلاعات مهم غیر قابل خوانش توسط دیگران هستند؟
اگر از SSL استفاده کنیم این کار سخت می شود اما هنوز هم نرم افزار های مخرب مقیم در مرورگر و یا دستگاه کاربر می توانند حتی بسته SSL را هم باز کنند و بخوانند.
اما بماند گاهی اوقات همین SSL هم نا امن می شود
برای رفع این مشکل من معمولا به جای ارسال نام کاربری و پسورد هش شده این دو عبارت را به سرور ارسال می کنم این کار را در وب سایت باستفاده از جاوااسکریپت انجام می دهم و در و گوشی با استفاده کد جاوا و از قبل مقدار هش شده نام کاربری + پسورد کاربر را در یک ستون در دیتابیس ذخیره کرده ام و از انجایی که انتظار می رود این فیلد یکتا باشد ان را ایندکس هم می کنم.
@ABlueDeveloper
تغییر مرتب اطلاعات دسترسی
وقتی کاربر لاگین کرد آیا همه چیز تمام شده است؟ قطعا خیر معمولا در این جور مواقع همه اطلاعات موجود در کوکی و یا توکن نرم افزار ثابت است و تا زمانی که مثلا کاربر از سایت یا نرم افزار خارج نشود سثابت هم می ماند!
در حالی که باید از ثابت بودن این جور چیز ها هم جلوگیری شود مثلا در بعد از گذشت یکزمان خاص توکن از بین برود و باید اپلیکیشن توکن جدید درخواست کند یا بعد از گذشت چند در خواست کوکی عوض شود کم نیستن سایت هایی که با اشتراک گذاری کوکی سایت های پولی کمک می کنند همه از مزایای پولی سایت بیچاره بدون پرداخت پول استفاده کنند.
@ABlueDeveloper
Telegram
attach 📎
#Security
#Hsts
#قسمت_اول
What Is Hsts?
پروتکل Http یک پروتکل ناامن است و اگر هکر ی بتواند دربین کلاینت و سرور موفق به شنود خط شود به راحتی دیتای تبادل شده بدون کدگذاری شدن برای او قابل مشاهده خواهد بود .
نام این حملات
( SSL-stripping یا man-in-the-middle )
میباشد.
برای حل این مشکل از نسخه امن Http با عنوان Https استفاده میکنیم اما این پروتکل نیز ضعف های امنیتی خود را دارد .
زمانی که برای وب سایت خود ssl تهیه میکنید و https را فعال میکنید از این به بعد وب سایت شما از طریق یک درخواست Https در دسترس خواهد بود اما شما نیز بایستی تنظیمات وب سایت خود را به گونه انجام دهید که فقط به صورت https در دسترس باشد و فقط درخواست های Https را بپزیرد در غیر اینصورت کاربر میتواند درخواستی مبتی بر Http به سایت شما انجام دهد. و مراحل آن به صورت زیر است .
1. کاربر ابتدا ادرس sabteahval.ir را در نوار آدرس مرورگر خود می نویسد.
2. مرورگر به صورت پیشفرض آدرس
http://www.sabteahval.ir/
را بار گذاری میکند.
3.و وب سایت sabteahval.ir در پاسخ درخواست به صورت ریدایرکت دائمی یا موقت به آدرس
https://www.sabteahval.ir/
مرور گر را آگاه میسازد .
4. واین بارمرورگر این ریدایرکت را میبیند و به جای سایت قبلی وبسایت
https://www.sabteahval.ir/
را بارگذاری میکند.
همانطور که میبینید با اینکه برای وب سایت خود ssl تهیه نموده و Https را فعال نموده اید باز هم وب سایت شما پذیرای دارخواست های http بوده و میتوانید در معرض حملات
SSL-stripping
قرار بگیرید و هکر در مرحله 3 (بالا) می تواند کاربر را به آدرس دیگری که تقریبا مشابه سایت شماست ریدایرکت کند.(فیشینگ)
وقتی که Hsts را فعال میکنید . اولین باری که مرورگر کاربر به سایتان درخواست http می فرستد در پاسخ درخواست ، هدر
Strict-Transport-Security
به ResposeHeader افزوده میشود و از این به بعد این هدر بر روی مرورگر کاربر فعال باقی میماند. و از این به بعد که کاربر بخواهد درخواستی http به سایتان بفرستد با فعال بودن این هدر مرورگر به صورت پیشفرض یک درخواست Https میفرستد.
@fullStackDevs
#Hsts
#قسمت_اول
What Is Hsts?
پروتکل Http یک پروتکل ناامن است و اگر هکر ی بتواند دربین کلاینت و سرور موفق به شنود خط شود به راحتی دیتای تبادل شده بدون کدگذاری شدن برای او قابل مشاهده خواهد بود .
نام این حملات
( SSL-stripping یا man-in-the-middle )
میباشد.
برای حل این مشکل از نسخه امن Http با عنوان Https استفاده میکنیم اما این پروتکل نیز ضعف های امنیتی خود را دارد .
زمانی که برای وب سایت خود ssl تهیه میکنید و https را فعال میکنید از این به بعد وب سایت شما از طریق یک درخواست Https در دسترس خواهد بود اما شما نیز بایستی تنظیمات وب سایت خود را به گونه انجام دهید که فقط به صورت https در دسترس باشد و فقط درخواست های Https را بپزیرد در غیر اینصورت کاربر میتواند درخواستی مبتی بر Http به سایت شما انجام دهد. و مراحل آن به صورت زیر است .
1. کاربر ابتدا ادرس sabteahval.ir را در نوار آدرس مرورگر خود می نویسد.
2. مرورگر به صورت پیشفرض آدرس
http://www.sabteahval.ir/
را بار گذاری میکند.
3.و وب سایت sabteahval.ir در پاسخ درخواست به صورت ریدایرکت دائمی یا موقت به آدرس
https://www.sabteahval.ir/
مرور گر را آگاه میسازد .
4. واین بارمرورگر این ریدایرکت را میبیند و به جای سایت قبلی وبسایت
https://www.sabteahval.ir/
را بارگذاری میکند.
همانطور که میبینید با اینکه برای وب سایت خود ssl تهیه نموده و Https را فعال نموده اید باز هم وب سایت شما پذیرای دارخواست های http بوده و میتوانید در معرض حملات
SSL-stripping
قرار بگیرید و هکر در مرحله 3 (بالا) می تواند کاربر را به آدرس دیگری که تقریبا مشابه سایت شماست ریدایرکت کند.(فیشینگ)
وقتی که Hsts را فعال میکنید . اولین باری که مرورگر کاربر به سایتان درخواست http می فرستد در پاسخ درخواست ، هدر
Strict-Transport-Security
به ResposeHeader افزوده میشود و از این به بعد این هدر بر روی مرورگر کاربر فعال باقی میماند. و از این به بعد که کاربر بخواهد درخواستی http به سایتان بفرستد با فعال بودن این هدر مرورگر به صورت پیشفرض یک درخواست Https میفرستد.
@fullStackDevs
#Security
#Hsts
#قسمت_دوم(قسمت اخر)
Enforce SSL And Use Hsts in Asp Core
در این پست که پست آخر در این مورد نیز میباشد به فعال سازی Https و نحوه افزودن هدر Strict-Transport-Security به ResposeHeader می پردازیم .
برای فعال سازی Hsts مسلم است که ابتدا باید Https را فعال نمایید که به دو صورت انجام میشود.
1.فعال کردن https فقط برای بخش هایی از سایت
2. فعال کردن Https برای کل سایت
در حالت اول میتوانید از اتریبیوت [RequireHttps] بربالای کنترل خود استفاده کنید.(این روش اصلا برای webapi توصیه نمی شود).
روش دوم استفده از گلوبال فیلتر هاست و به این صورت انجام میشود
Third Party Library
نظیر
اما از این نسخه به بعد میدلوری به نام
هدر را برای SubDomain های تان نیز فعال میکند.
MaxAge
مدت زمان فعال بودن هدر
ExcludedHosts
افزودن لیست سایت های که نیاز به فعال سازی هدر Hsts را برای آنها نیست.
Preload
اما هنوز ما مشکلی با اولین در خواست به سایتمان که به صورت پیشفرض توسط مرورگر http ارسال میشود داریم . این مشکل را میتوانید به کمک سایت https://hstspreload.org/ حل کنید
کافیست دامنه سایت تان را در آن ثبت کنید و در Release های بعدی مرورگر کروم دامنه سایت تان به صورت توکار در Preload List های مروگر خواهد بود و مرورگر میداند برای سایت تان باید از Https استفده کند.
مرورگر های فایر فاکس ، سافاری ،اپرا، IE 11 ،Edge نیز از همین Preload List کروم استفاده میکنند.
@fullStackDevs
https://t.me/fullStackDevs
#Hsts
#قسمت_دوم(قسمت اخر)
Enforce SSL And Use Hsts in Asp Core
در این پست که پست آخر در این مورد نیز میباشد به فعال سازی Https و نحوه افزودن هدر Strict-Transport-Security به ResposeHeader می پردازیم .
برای فعال سازی Hsts مسلم است که ابتدا باید Https را فعال نمایید که به دو صورت انجام میشود.
1.فعال کردن https فقط برای بخش هایی از سایت
2. فعال کردن Https برای کل سایت
در حالت اول میتوانید از اتریبیوت [RequireHttps] بربالای کنترل خود استفاده کنید.(این روش اصلا برای webapi توصیه نمی شود).
روش دوم استفده از گلوبال فیلتر هاست و به این صورت انجام میشود
if (!_env.IsDevelopment())
{
services.Configure<MvcOptions>(options =>
{
options.Filters.Add(new RequireHttpsAttribute());
});
}
مرحله بعدی فعال کردن Hsts میباشد. از نسخه 2.1 فریم Asp Core به بعد به صورت توکار میدلوری برای پیاده سازی Hsts به فریم وورک اضافه شد و تا قبل ان باید ازThird Party Library
نظیر
NWebsec.AspNetCore.Middleware
Joonasw.AspNetCore.SecurityHeaders
استفاده می کردید .اما از این نسخه به بعد میدلوری به نام
app.UseHsts();
به صورت توکار وجود دارد که کار افزودن هدر Strict-Transport-Security
انجام میدهد . if (env.IsDevelopment())
{
//
}
else
{
app.UseHsts(); // Add This
}
برای انجام تنظیمات خاص خود بر روی این هدر میتوانید در ConfigureServices
کانفیگ های خود را به این صورت اعمال نمایید.if (!_env.IsDevelopment())
{
services.AddHsts(options =>
{
options.Preload = true;
options.IncludeSubDomains = true;
options.MaxAge = TimeSpan.FromDays(60);
options.ExcludedHosts.Add("example.com");
options.ExcludedHosts.Add("www.example.com");
});
}
IncludeSubDomainsهدر را برای SubDomain های تان نیز فعال میکند.
MaxAge
مدت زمان فعال بودن هدر
Strict-Transport-Security
بر روی مرورگر کاربر به صورت پیشفرض 30 روز تنظیم شده است.ExcludedHosts
افزودن لیست سایت های که نیاز به فعال سازی هدر Hsts را برای آنها نیست.
Preload
اما هنوز ما مشکلی با اولین در خواست به سایتمان که به صورت پیشفرض توسط مرورگر http ارسال میشود داریم . این مشکل را میتوانید به کمک سایت https://hstspreload.org/ حل کنید
کافیست دامنه سایت تان را در آن ثبت کنید و در Release های بعدی مرورگر کروم دامنه سایت تان به صورت توکار در Preload List های مروگر خواهد بود و مرورگر میداند برای سایت تان باید از Https استفده کند.
مرورگر های فایر فاکس ، سافاری ،اپرا، IE 11 ،Edge نیز از همین Preload List کروم استفاده میکنند.
@fullStackDevs
https://t.me/fullStackDevs
Telegram
Web Devs
Articles, News, Jokes, Quotes, Back-End and UI/UX for web developers.
Github : https://github.com/fullStackDevsGroup
Advertising: @adsfullStackDevs
Github : https://github.com/fullStackDevsGroup
Advertising: @adsfullStackDevs