بر خلاف تصور عموم، هدف اکثر رخنه های امنیتی انجام شده نه سرقت اطلاعات شما و یا از دسترس خارج نمودن وب سایت بلکه سوء استفاده از وب سرور در جهت منافع هکر ها می باشد. در برخی از موارد هکر ها سعی دارند با استفاده از وب سرور شما یک سیستم Email Relay راه اندازی کرده و اقدام به ارسال ایمیل های انبوه تبلیغاتی نمایند و در برخی دیگر از مواقع نیز از سرور شما به عنوان یک منبع فایل سرور برای بارگذاری فایل های آلوده و غیر قانونی خود استفاده می کنند. چنین هک هایی معمولا به صورت اتوماتیک و توسط اسکریپت های از قبل آماده شده ای انجام می شوند. اسکریپت های مذکور تمامی اینترنت را برای یافتن سایت هایی با حفره های امنیتی تعریف شده، جستجو کرده تا هدف نهایی خود را پیدا کنند. در این مقاله به شرح ۱۰ نکته مفید برای حفظ امنیت وب سایت خواهیم پرداخت.
۱ – نرم افزارهای خود را همواره بروز نگه دارید !
این موضوع ممکن است به وضوح برای همگان آشکار باشد، اما تاکید آن نیز خالی از لطف نیست چرا که به روز نگهداری تمامی نرم افزارهای مورد استفاده برای حفظ امنیت وب سایت کاملا حیاتی می باشد. این موضوع هم برای سیستم عامل سرور میزبان و هم برای نرم افزارهای مورد استفاده در وب سایت مانند CMS ها یا Forum ها صادق است. زمانی که حفره های امنیتی هرچند کوچک در یک نرم افزار پدید آیند، هکر ها به سرعت با سوء استفاده از آن ها به سرور یا سایت شما رخنه می کنند. لذا تمامی سازنده های نرم افزار در دنیا سعی می کنند تا حفره های امنیتی موجود در محصولات خود را با ارایه بسته های بروز رسانی به کاربران برطرف سازند و به مرور زمان نرم افزار خود را در مقابل نفوذهای امنیتی مقاوم تر کنند.
البته در صورتیکه از راهکارهای میزبانی مدیریت شده استفاده می کنید، نیازی به نگرانی برای بروز رسانی مداوم نرم افزارهای خود ندارید، زیرا شرکت ارایه دهنده میزبانی شما تمامی موارد امنیتی لازم را برای نگهداری از سرویس شما به کار می برد.
اگر از نرم افزارهای ثالث (Third Party) مانند CMS ها و Forum ها برای مدیریت وب سایت خود استفاده می کنید، حتما از نصب آخرین بسته های بروز رسانی و Patch های امنیتی برای نرم افزارهای خود اطمینان حاصل نمایید. اکثر تولید کنندگان نرم افزار دنیا دارای لیست ایمیل یا خبرنامه های RSS هستند که آخرین اخبار خود مبنی بر ارایه Patch های امنیتی را به این طریق منتشر کنند. اکثر CMS ها نیز مانند WordPress شما را از وجود نسخه های جدید در پیشخوان مدیریتی خود آگاه می سازد.
۲ – SQL Injection
حملات SQL Injection زمانی رخ می دهند که افراد هکر از پارامترهای URL با فرم تحت وب برای دسترسی به دیتابیس شما استفاده کنند. زمانی که شما از قالب استاندارد Transact SQL استفاده می کنید، افزودن کدهای مخرب و سارق در بین کدهای شما به سادگی توسط هکرها امکان پذیر خواهد بود. این افراد با افزودن چنین کدهایی می توانند جداول شما را تغییر دهند، اطلاعات دیتابیس شما را دریافت کنند و یا برخی اطلاعات حیاتی شما را حذف نمایند. اما شما به راحتی می توانید از بروز چنین اتفاقاتی با استفاده از کوئری های پارامتردار جلوگیری نمایید. اکثر زبان های برنامه نویسی وب از این قابلیت پشتیبانی نموده و انجام آن نیز به راحتی امکان پذیر می باشد.
کوئری زیر را در نظر بگیرید :
کد:
۱٫”SELECT *FROM table WHERE column = ‘” + parameter + “;”
اگر هکر بخواهد پارامتر URL شما را به نحوی تغییر دهد که عبارت ‘or’ ۱′=’۱ بازگدانی شود، آنگاه کوئری مذکور به شکل زیر تغییر شکل خواهد داد :
کد:
۱٫ “SELECT” *FROM table WHERE column = ” OR ’۱′=’۱; “
از آنجا که ’۱′ با مقدار ’۱′ برابر می باشد، آنگاه این تعریف به هکر اجازه می دهد تا کوئری اضافه ای را در انتهای عبارت SQL شما بیافزاید و آن را اجرا نماید.
۳ – XSS
عملیات Cross site scripting به زمانی گفته می شود که فرد حمله کننده سعی کند تا با اضافه نمودن کدهای اسکریپت JavaScript به فرم وب، کدهای مخرب خود را برای بازدیدکنندهای وب سایت شما اجرا نماید. بنابراین در هنگام طراحی و ساخت فرمهای خود همیشه مطمئن شوید تا اطلاعات خود را به درستی کدگذاری کرده و ارسال نمایید و تا جای ممکن از ارسال کدهای ساده HTML جلوگیری نمایید.
۴- پیغام های خطا
همواره دقت کنید که پیغام های خطای وب سایت شما چه اطلاعاتی را به کاربران ارایه می دهند. برای مثال اگر در وب سایت خود از یک فرم لاگین برای ورود به قسمت مدیریت استفاده می کنید، توجه نمایید که در صورت اشتباه وارد کردن اطلاعات کاربری، پیغام های خطای ساده ای مانند “نام کاربری یا رمز عبور اشتباه است” به کاربر نمایش داده شود. هرگز در پیغام های خطای خود دقیقا مشخص نکنید که چه بخشی از اطلاعات نادرست است زیرا از آن طریق، کار را برای هکرهایی که سعی در پیدا کردن این اطلاعات دارند، بسیار آسان تر خواهید نمود. برای مثال فرض کنید هکر سعی می کند تا انجام عملیات Bruteforce نام کاربری و پسورد مدیریت سایت شما را به دست آورد. پس از چندین بار تلاش، او می تواند از پیغام خطای نمایش داده شده، متوجه شود که نام کاربری را به درستی حدس زده و تنها رمز عبور را اشتباه وارد می کند، لذا از این پس می تواند تمام تمرکز خود را برای یافتن پسورد گذاشته و در مدت زمان کوتاه تری اطلاعات محرمانه شما را به سرقت ببرد.
پیغام های خطای خود را به صورت مبهم نمایش دهید
۵ – اعتبار سنجی سمت سرور و اعتبار سنجی فرم ها (Server side/Form Validation)
عملیات اعتبار سنجی در وب سایت ها همیشه باید در هردو سمت مرورگر و سرور انجام شود. مرورگر قادر است تا برخی از اشتباهات ساده و رایج مانند عدم وارد کردن اطلاعات در فیلدهای ضروری یا وارد کردن متن در فیلد شماره تلفن را شناسایی و به کاربر اعلام نماید. البته چنین اعتبارسنجی هایی ممکن است کنار گذاشته شوند، اما توصیه می شود تا شما نیز تمام مواردی از این دست را توسط مرورگر اعتبار سنجی کرده و تایید اعتبار موارد پیچیده تر مانند توقف عملیات به دلیل وجود کدهای مخرب وارد شدن اسکریپت های اضافی به دیتابیس یا وجود احتمال بروز نتایج نامناسب در برنامه را بر عهده سرور قرار دهید.
۶ – رمز های عبور
تقریبا همه می دانند که باید از پسوردهای پیچیده استفاده کنند اما متاسفانه اطلاع آن ها از این مورد به این معنا نیست که در عمل نیز همیشه آن را رعایت می کنند. انتخاب رمز های عبور پیچیده و طولانی برای قسمت های مدیریتی سرور و وب سایت، امری کاملا حیاتی است. اما همچنین باید با تمرین کاربران معمولی برای انتخاب پسوردهای مناسب نیز به حفظ امنیت حساب های کاربری آن ها کمک نمود.
ممکن است کاربران عادی شما از اعمال چنین قوانین سخت گیرانه ای چندان خشنود نشوند اما اعمال قوانینی مانند الزام به انتخاب پسوردهایی با حداقل هشت کاراکتر و تشکیل شده از حروف بزرگ و کوچک انگلیسی، اعداد و نشانه ها می تواند کمک بسزایی در افزایش ضریب امنیتی حساب های کاربران نماید.
پسوردهای انتخاب شده برای تمامی حساب ها باید با مقادیر کدگذاری شده در پایگاه های داده نگهداری شوند. برای مثال می توانید پسوردهای خود را الگوریتم hashing مانند SHA ذخیره نمایید. با استفاده از این الگوریتم، در هر بار که کاربر پسورد خود را برای ورود به سیستم وارد می کند، در واقع تنها مقادیر کدشده بین کاربر و سرور جابجا می شوند و ردیابی آن ها به سادگی امکان پذیر نخواهد بود. همچنین می توان برای امنیت بیشتر سیستم احراز هویت از روش Salt نمودن پسوردها نیز استفاده کرد. روش Salt در هنگام ذخیره پسورد در پایگاه داده، مقدار رشته ای تصادفی را به آن اضافه خواهد کرد و در واقع رمز عبور کاربر را با کاراکترهای دیگر ترکیب کرده و سپس آن را ذخیره می کند. با استفاده از الگوریتم کدگذاری SHA و همچنین روش Salt به صورت ترکیبی می توان، از امنیت در ذخیره پسوردها اطمینان حاصل نمود. با این روش، حتی در صورتیکه هکرها به دیتابیس شما SQL Injection نیز نمایند، بازهم قادر به دستیابی به رمزهای عبور نیستند. همچنین برای حدس زدن و یافتن چنین پسوردهای حفاظت شده ای از طریق حملات Bruteforce نیز هکر ها به زمان بسیار زیاد و تجهیزات بسیار گران قیمتی نیازمندند.
خوشبختانه بسیاری از نرم افزارهای مدیریت محتوا با ارایه چنین راهکارهای امنیتی در هسته خود، امنیت لازم در بخش ورود کاربران به بخش مدیریت را فراهم نموده اند گرچه در برخی از آن ها نیز لازم است با استفاده از افزونه های موجود یا ماژول های امنیتی (مانند نرم افزار Drupal 7) مواردی مانند حداقل کاراکترهای لازم برای پسورد و عملیات Salt کردن پسوردها را به صورت دستی تنظیم نمود. همچنین در صورتی که از .Net برای طراحی وب سایت خود استفاده می کنید نیز می توانید با بهره گیری از Membership Provider ها موارد امنیتی بسیاری را تنظیم و امنیت برنامه خود را افزایش دهید.
۷ – آپلود فایل ها
ارایه دسترسی به کاربران برای آپلود فایل در سرور می تواند کاری بسیار ریسک پذیر باشد. گرچه در برخی از موارد ممکن است این امکان ساده برای تغییر تصویر پروفایل کاربر نیاز باشد. خطر موجود در این امکان از آنجاست که هر فایل آپلود شده، گرچه به نظر ساده باشد، اما ممکن است اسکریپت های مخربی را شامل شود که با اجرای آن ها در سرور، درهای وب سایت شما بر روی هکر ها بازگردد و اطلاعات محرمانه شما در معرض سرقت قرار گیرند.
بنابراین در صورتیکه ناچارید تا در وب سایت خود از فرم آپلود فایل استفاده نمایید، آنگاه باید تمامی فایل های آپلود شده را به دقت زیرنظر گرفته و بازرسی کنید. در صورتیکه قصد دارید تا به کاربران تنها امکان آپلود تصویر برای پروفایل های خود را اعطا کنید، نمی توانید برای کنترل فایل ها تنها به محدودسازی فرمت فایل ها یا استفاده از MIME Type ها اکتفا کنید زیرا چنین مواردی به سادگی قابل جعل می باشند. حتی روش هایی مانند باز نمودن و خواند هدر فایل ها، یا استفاده از توابعی که سایز تصویر را بررسی می کنند نیز نمی توانند به صورت کامل قابل اعتماد باشند. اکثر فرمت های تصویری دارای قسمتی برای ذخیره نظریه (Comment) هستند که هکر ها می توانند با اضافه کردن کدهای PHP خود در این قسمت و آپلود تصویر مذکور، اسکریپت های مخرب خود را بر روی سرور شما به اجرا درآورند.
بنابراین شما باید به هر نحو ممکن کاربران را از اجرای هر فایلی بر روی سرور منع نمایید. البته وب سرورها معمولا فایل های دارای فرمت تصویری را اجرا نمی کنند اما در برخی از موارد دیده شده فایلی با نام Image.jpg.php به عنوان تصویر شناخته شده و اجازه آپلود آن نیز صادر گشته است اما پس از آپلود شدن در سرور به اجرا درآمده و کدهای مخرب محتوای فایل نیز عملیات خود را آغاز نموده اند.
یکی از راه های بررسی موارد این چنینی، تغییر نام تمامی فایل ها برای اطمینان از فرمت آن هاست. همچنین در سیستم عامل لینوکس می توان با تغییر سطح دسترسی محل ذخیره سازی فایل های آپلود شده به ۰۶۶۶ از اجرای آن ها جلوگیری کرد. همچنین می توان با ساخت فایل .htaccess با محتوای زیر در سیستم عامل های لینوکس از اجرای فایل هایی که دو پسوند دارند (مانند مثال image.jpg.php) ممانعت به عمل آورد.
کد:
Deny from all
<files ~ “^w+.(gif|jpe?gpng)$”>
Order deny,allow
Allow from all
</files>
اما راه حل نهایی و قطعی که برای اطمینان از سلامت فایل های آپلود شده توصیه می شود، جلوگیری از دسترسی مستقیم به تمام فایل های آپلود شده توسط کاربر می باشد. با این روش تمامی فایل های آپلود شده در پوشه ای خارج Webroot وب سایت یا در دیتابیس و به عنوان Blob ذخیره می گردند. در صورتیکه فایل های شما به صورت مستقیم قابل دسترس نباشند، آنگاه ناچارید تا با ایجاد اسکریپت هایی، آن ها را از پوشه ای خصوصی جمع آوری کرده (یا با استفاده از HTTP Handler در .Net) و سپس به مرورگر ، برای نمایش ارایه دهید. تگ های موجود در تصاویر از قابلیتی به نام Src پشتیبانی می کند که نیازی به اشاره مستقیم به یک URL برای یک تصویر ندارد. بنابراین می توانید در تگ Src، به جایURL مستقیم فایل عکس، آدرس اسکریپت خود که وظیفه پیدا نمودن تصاویر از پوشه خصوصی را دارد را وارد نمایید و سپس تنظیمات لازم را نیز در هدر HTTP انجام داده تا تصاویر به درستی نمایش داده شوند.
برای مثال :
کد:
<img src=”/imageDelivery.php?id=1234″/>
بدون دیدگاه