امنیت در طراحی سایت های اینترنتی
وب سایت اینترنتی یک شرکت یا سازمان، در واقع هویت آن واحد حقوقی در دنیای مجازی محسوب می شود ، این بدان معناست که همانگونه که شناسنامه یک فرد مبین هویت فردی وی در دنیای واقعی است و او را به این نام می شناسند، در دنیای مجازی نیز وب سایت یک سازمان یا شرکت، مبین هویت مجازی ایشان است و آن شخصیت حقوقی را به آن نام می شناسند. همانطور که اگر نام یک شخصیت حقیقی در دنیای واقعی لکه دار شود و آبروی وی دستخوش تهدید گردد، به اعتبار فرد در بازار تجارت لطمه خواهد زد، به همان شکل نیز چنانچه وب سایت اینترنتی یک شخصیت حقوقی هک شود و مورد تهدید امنیتی واقع شود، تجارت الکترونیکی ایشان دچار مشکلات زیادی خواهد شد. به عنوان نمونه با نگاه به آمار و ارقام موجود، می بینیم که با هربار هک شدن یا انتشار ویروس بر روی وب سایت اینترنتی شرکتهای بزرگی همچون یاهو یا گوگل ، ارزش سهام ایشان در بازار جهانی به شدت کاهش خواهد یافت .
اما چرا این اتفاق می افتد ، علت این امر این است که دیگر آنچه از طریق این سایت ها به مشتریان خود ارائه می گردد از قابلیت اطمینان برخوردار نیست . به دیگر سخن کاربران و مشتریان تجارت الکترونیک نمی توانند به این سیستم اطمینان نمایند و مبالغی را در این عرصه هزینه کنند . فرض کنید که کسی به شما می گوید که در بانکی سرمایه گذاری کن که سود بسیاری دارد ولی احتمال دارد پول تو را بدزدند !!!! . هر چقدر هم که این سرمایه گذاری سود آور باشد باز هم شما در چنین بانکی سرمایه گذاری نخواهید کرد . تجربیات زیادی نشان می دهد که بیشتر افراد سرمایه گذاری های کم بازده و مطمئن را بر سرمایه گذاری های پربازده و خطرناک ترجیح می دهند . از این جهت است که اینقدر بر امنیت وب سایت اینترنتی تاکید می شود .
برای اینکه بدانیم چگونه باید امنیت یک سایت را برای مقابله با حملات امنیتی بهبود ببخشیم، ابتدا باید بدانیم که چگونه یک وب سایت، هک می شود. چرا که اساسا سایتی هک می شود که باگ امنیتی داشته باشد. باگ در لغت به معنای حفره و در اصطلاح هکر ها یعنی راه نفوذ به وب سایت و هک کردن آن می باشد. www.ParsCms.com
•انواع هک :
ابتدا انواع راهکارهای نفوذ در سایت های اینترنتی را بررسی می کنیم. زیرا هک کردن، انواع مختلفی دارد، اما می توانیم به دو دسته کلی هک سمت سرور (Server Side) و هک سمت کاربر (Client Side) تقسیم کرد.
هک سمت کاربر، یعنی از خود کاربر، برای هک کردن او استفاده کنیم. مثلا هنگام ورود به میل باکس، پسورد وی را به دست آوریم، یا هنگامی که در حال وارد کردن اطلاعات کارت بانکی اش برای خرید اینترنتی است، به طریقی اطلاعات وی را به دست آورده و ذخیره کنیم. اما چگونه!؟ رایج ترین این نوع هک فیشینگ می باشد. فیشینگ یعنی ساختن یک صفحه کاملا شبیه صفحه ورود به ایمیل یا بانک و … و کشاندن کاربر با ترفندهای خاص به آن صفحه. کاربر که نمی داند آن صفحه صفحه بانک یا یاهو میل نیست، براحتی اطلاعات خود را در اختیار هکر قرار می دهد.
•راهکار جلوگیری از این شیوه هک : می بایست آموزش های لازم را به کاربران ارائه کرد تا به سطحی از آگاهی و هوشمندی برسند که هنگام وارد کردن اطلاعات شخصی خود مانند ایمیل و یا اطلاعات بانکی، حتما آدرس بار را چک کرده و از صحت آن اطمینان حاصل نمایند.
به عنوان نمونه، اگر می خواهید در https://mail.google.com لاگین نمایید، باید دقت کنید که اشتباها به سمت https://mail-google.com هدایت نشوید. این آدرس می تواند اطلاعات ایمیل و پسورد آن را براحتی به دست آورد!! چون این سایت هیچ ارتباطی به شرکت گوگل نداشته و صرفا در صدد به دست آوردن اطلاعات اشخاص می باشد.
هک سمت سرور که رایج ترین سبک هک سایت ها بوده و راهکارهای متعدد و انعطاف بیشتری دارد. این هک خود انواع مختلف دارد که مهمترینشان عبارتند از :
•Xss
•استفاده از شل
•sql Injection
• Lfi
• Rfi
Xss :
طبق آمار ۶۹ درصد وبسایت ها، به این باگ دچار می باشند و بنابراین یکی از مرسوم ترین باگ های موجود می باشد. البته باید گفت که از نظر امنیتی باگ مهمی به حساب نمی آید. اما کار این باگ این است که به کمک آن می توان بر روی کامپیوتر بازدیدکنندگان، کدهای JavaScript را اجرا کرد و کنترل برخی از اجزای کامپیوتر قربانی را در دست گرفت.
استفاده از شل :
Shell، یک فایل حاوی کدها و اسکریپت های مخرب است که هکر، آن را بر روی سرور یک سایت آپلود و اجرا می کند! آپلود این فایل از راه های مختلفی امکان پذیر است. مرسوم ترین راهکار آپلود شل در سایت ها، از طریق قسمت browse و آپلود فایل است که معمولا در سایت ها برنامه نویسی می شوند تا کاربران فایل ها یا تصاویر و عکس های شان را بارگزاری نمایند.
•راهکار پیشگیری: یکی از کارهایی که می توانید جهت جلوگیری از اینگونه حملات انجام دهید، این است که فایل هایی که آپلود می شود را چک کرده و مثلا برای عکس ها فقط اجازه فایل های از نوع png,jpg,bmp,gif را بدهید.
روش دیگر آپلود فایل شل به این شکل است که : هکر با یک جستجوی ساده، نام هاست یا میزبان سایت را به دست آورده که مثلا شرکت X است. سپس بررسی می کند که علاوه بر سایت شما، چه سایت های دیگری بر روی سرور، میزبانی می شوند. هم اینک، عملیات هک آغاز می گردد، اما نه به وسیله سایت شما. بلکه سایت همسایه! چرا که برخی از سایت های موجود بر روی سرورهای هاست، بسیار غیر امن بوده و به راحتی نفوذپذیر است. نهایتا بعد از هک سایت همسایه ی شما، فایل شل را که از قضا کدگذاری شده (نا خوانا توسط آنتی ویروس) بر روی سرور آپلود کرده و دسترسی روت (کامل) اخذ می کند. (یعنی به تمام سایت های موجود بر روی سروری که میزبانی سایت شما را بر عهده دارد، دسترسی پیدا می کند) و آن ها را هک می کند.
•شیوه پیشگیری : تنها راه قطعی پیشگیری از اینگونه حملات، استفاده از سرور اختصاصی می باشد که البته هزینه زیادی در بر خواهد داشت.
Sql Injection :
این نوع هک، عموما از طریق آدرس بار مرورگر انجام می شود. این نیز یکی از رایج ترین و قدیمی ترین روش های نفوذ در وب سایت های اینترنتی است که با چند دستور ساده تمام اطلاعات پایگاه داده را به دست هکر خواهد انداخت. برای انجام این نفوذ، از تزریق کد های sql استفاده می شوند. این نوع هک، از طریق صفحاتی از سایت صورت می پذیرد که دارای query string هایی می باشند. انجام می شود. اکثر برنامه نویسان به این نوع هک آگاهی داشته و معمولا مانع از استفاده هکر ها از این راه های نفوذ می گردند. اما هنوز هم وب سایت های فراوانی هستند که از این حفره بزرگ امنیتی رنج می برند.
•راه جلوگیری از این شیوه : برای ممانعت از این روش، از stored procedure استفاده می شود و یا تمامی query string ها با استفاده از الگوریتم های خاص برنامه نویسی سنجیده شده و از تزریق کدهای SQL ممانعت خواهد شد.
Lfi و Rfi :
این باگ با بی احطیاتی برنامه نویس در استفاده از توابع Include و … به وجود میاد. در اصل این توابع (include , require … ) فایل یا صفحه ای را فراخوانی می کنند که عدم اعمال صحیح کنترل های لازم بر روی این توابع موجب بروز باگ Rfi یا حتی Lfi می شود.
هک Lfi یا Local File Inclusion یک نوع دسترسی Local به هکر برای مشاهده ی فایل های سرور می دهد ( یعنی به همه چیز بر روی سایت و “نه سرور” دسترسی حاصل می گردد!). همانگونه که بیان گردید باگ Lfi ریشه در اشتباهات برنامه نویسان در استفاده از توابعی همچون (Include ,require) دارد.
با استفاده یا به عبارت بهتر، سوء استفاده از این باگ، می توان اقدامات زیر را انجام داد :
۱٫اجرای دستورات مختلف از راه دور، با استفاده از لوگ های Apache
۲٫خواندن فایل های مهم سیستمی و اطلاع از config های سرور
•پیشنهاداتی برای افزایش سطح امنیتی سایت ها :
۱٫تغییر نام فولدر ادمین : فولدر ادمین بهتر است، با نام admin نامگذاری نشده باشد و یک نام منحصر به فرد داشته باشد که صرفا مدیر سایت از این آدرس اطلاع یابد.
۲٫استفاده از قابلیت فولدر امن در کنترل پنل هاست : با عنایت به امنیت لحاظ شده در قابلیت Protected Directories هاست ، فولدر ادمین به صورت Secure Folder تعریف گردد ، لذا برای دسترسی کاربران به آن می بایست ، نام کاربری . کلمه عبور ویژه وارد گردد .
۳٫تعریف نام کاربری و کلمه عبور با شرایط و ویژگیهای خاص : با عنایت به تعریف نام کاربری . کلمه عبور امن ، نامهای کاربری و کلمات عبور استفاده شده در نرم افزار از قواعد زیر تبعیت نماید :
۱٫عدم استفاده از نام کاربری و کلمه عبور قابل حدس در وب سایتها
۲٫ استفاده از مجموع کاراکتر ، حروف بزرگ و کوچک ، علایم و خط فاصله در نام کاربری و کلمه عبور
۴٫عدم اعطای Write Permission ، به فولدرهای سایت : چنانچه یکی از فولدر های سایت مانند فولدر image نیاز به مجوز write داشته باشد ، باید ابتدا در کد این مجوز اعطا شود و بلافاصله پس از انجام کار ، مجوز گرفته شود .
۵٫استفاده از Error Handler : زمانی که خطاهای نرم افزار ، به شکل مناسبی مدیریت نشوند ، در صفحاتی از سایت که دچار خطا یا اشتباه شده ، اطلاعات مهمی نمایش داده می شود که امکان سوء استفاده از آنها وجود خواهد داشت . می توان علاوه بر از کار انداختن خطاهای نرم افزار ، با استفاده هوشمندانه از قابلیت ارور هندلینگ و با نمایش پیغام های خطای سوری (غیر واقعی) ، هکرها را گمراه و سردرگم نموده و از هک سایت جلوگیری گردد .
۶٫تست و بررسی درستی ورودی های کاربر : با عنایت به اینکه ، معمولا بیشترین حمله هکرها به برنامه های تحت وب از طریق فرم ها ی تعاملی برنامه و کاربران صورت می پذیرد ، کلیه مقادیر ورودی کابران در فرمها ، هم به صورت client Side و هم به صورت Server Side اعتبار سنجی و ولیدیت شود .
۷٫جلوگیری از Cross site scripting یا XSS: در کلیه مداخل ورودی سایت مانند باکس جستجو … ، سعی شود تا از تزریق Script در سایت جلوگیری گردد .
۸٫محافظت در برابر SQL Injection: در کلیه دستورات برقراری ارتباط با پایگاه داده سایت ، از SQL Injection ، ممانعت شده و به هیچ عنوان از تک کوتیشن یا دابل کوتیشن غیر مجاز استفاده نگردد .
۹٫استفاده از Stored Procedure به جای دستورات مستقیم SQL در کدنویسی : با عنیات به اینکه استفاده از Stored Procedure به جای دستورات اس کیو ال می تواند به افزایش امنیت و البته کارایی سایت کمک نماید ، در تمامی بخشهای سایت از Stored Procedure به جای SQL استفاده شود .
۱۰٫ممانعت از Injection flaws : در تمامی مداخل ورودی ، آدرس ها و URL های نرم افزار سعی گردد تا صرفاً کاراکترها و فرمتهای مجاز وارد شود و از هرگونه ورود کاراکترها یا حروف یا فرمتهای غیر مجاز در URL یا InputBox های نرم افزار جلوگیری شود .
۱۱٫ممانعت از Malicious file execution : در تمامی بخشهایی که به هر نحوی قرار است ، فایلی آپلود گردد ، فرمت فایل به صورت دقیق بررسی شده و در صورت غیر مجاز بودن فایل ، هم به لحاظ فرمت ( ASP , PHP , … ) و هم به لحاظ حجم و … بررسی و اعتبار سنجی گردد .
۱۲٫ممانعت از بروزBroken authentication and session management : در تمامی بخشهای سایت سعی شود تا با رمزنگاری و استفاده از SSL ، مانع از دست رفتن Session و کوکی و یا نیمه کاره رها شدن آنها گردید.
۱۳٫Secure cryptographic storage: سعی کنید تا کلیه اطلاعات مهم مانند نام کاربری و کلمه عبور در نرم افزار به صورت رمزنگاری و اینکریپت شده ، ذخیره و جابجا شود .
۱۴٫جلوگیری از دیتا اسنیفرینگ : با تغییر جاوا اسکریپت نام کاربری و کلمه عبور هنگام ارسال از باکس لاگین در سایت ، سعی کنید با تغییر کلاینت ساید آن از دیتا اسنیفرینگ ممانعت کنید.
۱۵٫جلوگری از دسترسی بدون مجوز کاربران به صفحات بخش ادمین بدون لاگین : برخی از صفحات سایت
- (مانند صفحات بخش مدیریت) تنها در اختیار کاربرانی با دسترسی خاص است و طبیعتاً با تایپ مجدد آدرس آنها در مرورگر ، حق دسترسی مجدد به آن ، بدون ورود مجدد نام کاربری و کلمه عبور وجود نداشته باشد .
- ۱۶٫عدم استفاده از متغیرهای از پیش تعریف نشده در کد : رعایت برخی موارد امنیتی ریز ، در کد نویسی امنیت سایت را بالا می برد. منجمله می توان به عدم استفاده از متغیرهای بدون تعریف در هیچ کجای نرم افزار اشاره نمود .
- ۱۷٫ثبت ردپای کاربران و نظارت بر آن : با ثبت ردپای کاربران و تحت نظر گرفتن IP ایشان و نحوه حرکت در سایت و پارامترهایی مانند میزان صفحات درخواست شده در هر ثانیه به وسیله یک آی پی مشخص ، سعی در جلوگیری از موتور گذاشتن روی سایت و تخریب آن نمایید.
سلام .
چک لیست خوبی برای بررسی اولیه میزان امنیت در اپلیکیشن های وب و هاست ارائه فرمودید .پروژه OWASP هم “مفصل” در این باره تحقیق کرده که خواندنش رو با تمام جزئیات به خوانندگان پیشنهاد میکنم . همچنین دوستانی که مسئولیتی در این حوزه ها دارند حتما سری به hardening های موجود بزنند و البته در مطالعه انها به تطبیق سناریوی امنیتی داکیومنت با شرایط مورد نظر خودشون دقت کنند .
در حال حاضر از دیدگاه امنیت چالش های امنیتی توسعه وب مقداری دچار تحول به دلییل ورود ابزار ها و کتابخانه های جدید به عرصه طراحی وب شده اند که در کنار ایجاد فرصت های جدید ,اضافه شدن پیچیدگی به طراحی وب و به دنبال آن چالش های امنیتی جدید را به همراه داشته و این پلت فرم های باز رو به هدف مناسبی برای هکر ها تبدیل کرده.مثلا در مطالعه اخیری که میخوندم ۹۶% اپلیکیشن های وب حداقل یک مشکل امنیتی اساسی داشتند .
اگر میخواهیم در بزینس طراحی وب موفق باشیم باید جواب های قابل قبولی برای این چالش ها داشته باشیم و شروع به بیان راه حل های این طبقه از موارد کنیم .در حوزه طراحی و توسعه انتظار اینه که در موضوعاتی به عنوان مثال ادغام تکنولوژی های مختلف مانند سیستم های CRM مبتنی بر SaaS با ابزار های BI در کنار استفاده از تکنولوژی های Cloud برای هاست که انعطاف بالاتری داشته اما چالش های امنیتی خود را نیز دارند , به تشریح تکنیک های امنیتی در چنین حوزه هایی بپردازیم .
صحبت در این زمینه شیرین بسیار و زمان اندک …
متشکرم