صدرا سمیعی
صدرا سمیعی
خواندن ۱۹ دقیقه·۵ سال پیش

حفظ امنیت وب سایت و جلوگیری از حمله هکرها

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

بر خلاف تصور عموم، هدف اکثر رخنه های امنیتی انجام شده نه سرقت اطلاعات شما و یا از دسترس خارج نمودن وب سایت بلکه سوء استفاده از وب سرور در جهت منافع هکر ها می باشد. در برخی از موارد هکر ها سعی دارند با استفاده از وب سرور شما یک سیستم Email Relay راه اندازی کرده و اقدام به ارسال ایمیل های انبوه تبلیغاتی نمایند و در برخی دیگر از مواقع نیز از سرور شما به عنوان یک منبع فایل سرور برای بارگذاری فایل های آلوده و غیر قانونی خود استفاده می کنند. چنین هک هایی معمولا به صورت اتوماتیک و توسط اسکریپت های از قبل آماده شده ای انجام می شوند. اسکریپت های مذکور تمامی اینترنت را برای یافتن سایت هایی با حفره های امنیتی تعریف شده، جستجو کرده تا هدف نهایی خود را پیدا کنند. در این مقاله به شرح ۱۰ نکته مفید برای حفظ امنیت وب سایت خواهیم پرداخت.

۱ – برای افزایش امنیت وب سایت نرم افزارهای خود را همواره بروز نگه دارید !

این موضوع ممکن است به وضوح برای همگان آشکار باشد، اما تاکید آن نیز خالی از لطف نیست چرا که به روز نگهداری تمامی نرم افزارهای مورد استفاده برای حفظ امنیت در وب سایت کاملا حیاتی می باشد. این موضوع هم برای سیستم عامل سرور میزبان و هم برای نرم افزارهای مورد استفاده در وب سایت مانند CMS ها یا Forum ها صادق است. زمانی که حفره های امنیتی هرچند کوچک در یک نرم افزار پدید آیند، هکر ها به سرعت با سوء استفاده از آن ها به سرور یا سایت شما رخنه می کنند. لذا تمامی سازنده های نرم افزار در دنیا سعی می کنند تا حفره های امنیتی موجود در محصولات خود را با ارایه بسته های بروز رسانی به کاربران برطرف سازند و به مرور زمان نرم افزار خود را در مقابل نفوذهای امنیتی مقاوم تر کنند.


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

اگر از نرم افزارهای ثالث (Third Party) مانند CMS ها و Forum ها برای مدیریت وب سایت خود استفاده می کنید، حتما از نصب آخرین بسته های بروز رسانی و Patch های امنیتی برای نرم افزارهای خود اطمینان حاصل نمایید. اکثر تولید کنندگان نرم افزار دنیا دارای لیست ایمیل یا خبرنامه های RSS هستند که آخرین اخبار خود مبنی بر ارایه Patch های امنیتی را به این طریق منتشر کنند. اکثر CMS ها نیز مانند WordPress شما را از وجود نسخه های جدید در پیشخوان مدیریتی خود آگاه می سازد.

۲ – SQL Injection

زمانی که افراد هکر از پارامترهای URL با فرم تحت وب برای دسترسی به دیتابیس شما استفاده کنند حملات SQL Injection رخ می دهد. هنگامی که شما از قالب استاندارد Transact SQL استفاده می کنید، افزودن کدهای مخرب و سارق در بین کدهای شما به سادگی توسط هکرها امکان پذیر خواهد بود. این افراد با افزودن چنین کدهایی می توانند جداول شما را تغییر دهند، اطلاعات دیتابیس شما را دریافت کنند و یا برخی اطلاعات حیاتی شما را حذف نمایند. اما شما به راحتی می توانید از بروز چنین اتفاقاتی با استفاده از کوئری های پارامتردار جلوگیری نمایید. اکثر زبان های برنامه نویسی وب از این قابلیت پشتیبانی نموده و انجام آن نیز به راحتی امکان پذیر می باشد.

کوئری زیر را در نظر بگیرید :

  1. ۱.”SELECT *FROM table WHERE column = ‘” + parameter + “;”

اگر هکر بخواهد پارامتر URL شما را به نحوی تغییر دهد که عبارت ‘or’ 1’=’1 بازگدانی شود، آنگاه کوئری مذکور به شکل زیر تغییر شکل خواهد داد :

  1. ۱. “SELECT” *FROM table WHERE column = ” OR ‘1’=’1; “

از آنجا که ‘۱’ با مقدار ‘۱’ برابر می باشد، آنگاه این تعریف به هکر اجازه می دهد تا کوئری اضافه ای را در انتهای عبارت 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) ممانعت به عمل آورد.

  1. Deny from all
  2. <files ~ “^w+.(gif|jpe?gpng)$”>
  3. Order deny,allow
  4. Allow from all
  5. </files>

اما راه حل نهایی و قطعی که برای اطمینان از سلامت فایل های آپلود شده توصیه می شود، جلوگیری از دسترسی مستقیم به تمام فایل های آپلود شده توسط کاربر می باشد. با این روش تمامی فایل های آپلود شده در پوشه ای خارج Webroot وب سایت یا در دیتابیس و به عنوان Blob ذخیره می گردند. در صورتیکه فایل های شما به صورت مستقیم قابل دسترس نباشند، آنگاه ناچارید تا با ایجاد اسکریپت هایی، آن ها را از پوشه ای خصوصی جمع آوری کرده (یا با استفاده از HTTP Handler در .Net) و سپس به مرورگر ، برای نمایش ارایه دهید. تگ های موجود در تصاویر از قابلیتی به نام Src پشتیبانی می کند که نیازی به اشاره مستقیم به یک URL برای یک تصویر ندارد. بنابراین می توانید در تگ Src، به جایURL مستقیم فایل عکس، آدرس اسکریپت خود که وظیفه پیدا نمودن تصاویر از پوشه خصوصی را دارد را وارد نمایید و سپس تنظیمات لازم را نیز در هدر HTTP انجام داده تا تصاویر به درستی نمایش داده شوند.

برای مثال :

  1. <img src=”/imageDelivery.php?id=1234″/>
  2. <?php
  3. //imageDelivery.php
  4. // Fetch image filename from database based on $_Get[“id”]
  5. ….
  6. // Deliver image to browser
  7. Header(‘Content-type: image/gif’);
  8. Readfile(‘images/’ .$filename);
  9. ?>


۸ – امنیت سرور

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

حتما از فایروالی قدرتمند استفاده کنید و توسط آن تمامی پورت های غیر ضروری سرور را مسدود نمایید. در صورت امکان با استفاده از تنظیمات DMZ (Demilitarized Zone ( تنها اجازه دسترسی به پورت های ۸۰ و ۴۴۳ را از دنیای خارج به سرور اعطا کنید. گرچه چنین تنظیمی تنها در صورتی امکان پذیر است که شما به سرور خود دسترسی لازم فیزیکی و یا از طریق شبکه LAN را داشته باشید، در غیر این صورت برای فراهم شدن امکان آپلود فایل و همچنین ریموت به سرور باید پورت های FTP، RDP یا SSH را نیز باز نگاه دارید.


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

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

۹ – استفاده از SSL برای امنیت وبسایت

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

۱۰ – استفاده از ابزارهای امنیتی

زمانی که تصور کردید تمامی راهکار های لازم و امکان پذیر را برای افزایش امنیت وبسایت خود به کار بسته اید، آنگاه زمان آن فرا می رسد تا امنیت وبسایت یا سرور خود را امتحان کنید. موثرترین روش انجام اینکار معمولا استفاده از ابزارهای امنیتی است که معمولا با نام آزمون نفود (Penetration Test) شناخته می شوند.

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

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

– Netsparker (که نسخه رایگان عمومی یا ۳۰ روزه آن در دسترسی می باشد) : مناسب برای امتحان کردن روش های حمله SQL Injection و XSS

– OpenVAS : این نرم افزار به عنوان یکی از پیشرفته ترین ابزارهای اسکنر امنیتی متن باز شناخته می شود. مناسب برای اسکن بیش از ۲۵۰۰۰ نوع از آسیب پذیری های ممکن بوده اما راه اندازی آن می تواند برای افراد مبتدی تر کاری دشوار باشد و حتما به سرور OpenVAS نیازمند است که تنها در سیستم عامل لینوکس قابل نصب می باشد.

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

در صورتیکه مایلید تا یک قدم جلوتر بروید، آنگاه می توانید به صورت دستی نسبت به نفود به دیوار امنیتی خود با استفاده از تغییر مقادیر Post و Get اقدام نمایید. یک ابزار Debugging proxy می تواند با فراهم کردن امکان جداسازی این مقادیر در یک درخواست HTTP که بین مرورگر و سرور شما در حال انتقال است، به شما کمک کند. یکی از انواع رایگان چنین ابزارهای محبوبی Fiddler نام دارد.

ممکن است سوال کنید که چه مقادیری را در هر درخواست باید تغییر دهید ؟ برای مثال در صورتیکه سایت شما دارای صفحاتی است که تنها به کاربران احراز هویت شده نمایش داده می شود، آنگاه می توانید پارامترهای URL را با پارامتر دیگری مانند user id جابجا کنید و یا همچنین می توانید با تغییر مقادیر Cookie ها سعی در مشاهده جزئیات سایر کاربران نمایید. از دیگر محدوده هایی که ارزش امتحان کردن را دارند، فرم های وب سایت می باشند. با تغییر مقادیر POST می توان به ارسال کدهای لازم برای انجام عملیات XSS اقدام نمود و یا اسکریپت های مخرب Server Side را بر روی سرور آپلود کرد.

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

همچنین ابزارها و ماژول های بسیاری برای اکثر CMS ها وجود دارند تا با استفاده از آن ها بتوانید تمام حفره های امنیتی موجود در وب سایت خود را بررسی و رفع نمایید، برخی از این ماژول ها عبارتند از : Security Review برای نرم افزار مدیریت محتوای Drupal و WP Security Scan برای WordPress می باشد.



امنیت وب سایتامنیت وبامنیت سایتشبکهطراح وب
طراح وب | برنامه نویس | امنیت شبکه
شاید از این پست‌ها خوشتان بیاید