نکات امنیتی مهم جهت جلوگیری از هک شدن سایت

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

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

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

همچنین ممکن است سایت شما طعمه باج افزار ها (ransomware)  شود به این صورت که در ازای رمزگشایی اطلاعات سیستم می بایست مبلغ درخواستی آنها را بصورت آنلاین پرداخت کنید و در غیر اینصورت کلیه اطلاعات شما را حذف خواهند نمود.

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

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

در ادامه به ۱۰ مورد از متداول ترین روش های جلوگیری از هک شدن می پردازیم.

 

  • آپدیت بودن وب سایت

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

در صورتی که از نرم افزار های third-party و آماده استفاده میکنید، نظیر سیستمهای مدیریت محتوی(CMS ها) و یا انجمن ها و…، حتما پلاگین ها یا بسته های امنیتی معتبر ارائه شده را روی آنها نصب نمایید. همچنین اکثر سیستم های مدیریت محتوا نظیر وردپرس و یا جوملا در صورت ارائه ورژن های جدیدتر، در پنل ادمین، هشدار بروز رسانی سایت را نمایش میدهند.

همچنین بسیار از طراحان و توسعه دهندگان وب سایت، از ابزارهایی نظیر Composer، npm و یا RubyGems جهت مدیریت وابستگی های نرم افزاری استفاده می کنند و ممکن است آسیب پذیری ها/حفره های امنیتی که در بسته های وابسته وجود داشته باشند.

لذا به روز رسانی بسته های فوق (software dependencies) را به هیچ وجه فراموش نکنید. جهت اینکار می توانید از ابزاری نظیر Gemnasium نیز استفاده کنید که به طور اتوماتیک هشدار های به روز رسانی بسته های مربوطه را ارسال می کنند.

 

  • تزریق به دیتابیس SQL (SQL injection)

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

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

بعنوان مثالی دیگر قطعه کد زیر را در نظر بگیرید که ظاهرا بدون نقص می باشد،

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

 ظاهرا همه چیز صحیح به نظر می آید و یک کد استاندارد می باشد. حال حالتی را در نظر بگیرید که هکر از عبارات هوشمندانه ای نظیر ‘ OR ‘1’=’1′ در URL استفاده نماید که بدین معناست که تازمانیکه نتیجه محاسبه عبارت ۱=۱ صحیح باشد.

با توجه به اینکه نتیجه عبارت فوق همواره صحیح می باشد، لذا دستور SQL به شکل صحیح پردازش می گردد، در نتیجه هکر به راحتی وارد بخش مورد نظر شده و اطلاعات مورد نیاز را تزریق می نماید:

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

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

$stmt = $pdo->prepare(‘SELECT * FROM table WHERE column = :value’);$stmt->execute(array(‘value’ => $parameter));

 

  • تزریق کد XSS

در حملات (Cross Site Scripting (XSS ، کدهای مخرب JavaScript به صفحات شما تزریق می شوند، این کدها پس از بارگزاری صفحات در مرورگر کاربران اجرا شده و محتوای صفحات شما را تغییر داده و یا باعث میشوند اطلاعات مورد نیاز برای هکر ها ارسال شوند.

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

در نرم افزار های تحت وب مدرن امروزی، اکثر محتوای صفحات سایت، نظیر انجمن ها و فروم ها توسط کاربران نوشته و یا ایجاد می شود ویا کدهای HTML مربوطه، توسط فریمورک های سمت کاربر (Front-end framework) نظیر Angular و یا Ember ترجمه و تفسیر می شوند، نگران کننده می باشد.

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

نکته ای که اینجا مطرح می شود، این است که محتوای ایجاد شده توسط کاربران از محدوده انتظار فراتر رفته و می تواند محدودیت های اعمال شده در سایت را دور زده و دستوراتی غیر از دستورات اصلی سایت را در مرورگر کاربران اجرا کند.

روش های جلوگیری از حملات XSS نیز مشابه روش های جلوگیری از تزریق پایگاه داده می باشد. به عنوان مثال هنگامی که صفحات HTML به طور اتوماتیک ایجاد می شوند، از توابعی استفاده شود که به طور اتوماتیک توسط مرورگرها نادیده گرفته می شوند. بطور مثال استفاده از element.setAttribute  ویا element.textContent  بجای element.innerHTML ، و یا استفاده از توابعی که به طور اتوماتیک عمل الحاق رشته ها و یا ایجاد محتوای HTML را انجام می دهند.

یکی دیگر از ابزار قدرتمند جهت مقابله با حملات XSS و هک شدن،  سیاست امنیت محتوا Content Security Policy یا به اختصار CSP می باشد. CSP هدر(Header)ی است که از سمت سرور ارسال شده و به مرورگر کاربر اطلاع میدهد که کدام کدهای جاوااسکریپت می بایست در صفحه اجرا شوند. به طور مثال، جلوگیری از اجرای اسکریپت هایی که روی دامنه شما تعریف نشده اند، و یا جلوگیری از اجرای توابع جاوااسکریپت خطی(Inline)، ویا غیرفعال نمودن eval() و….

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

 

  • پیغام های خطا

بعنوان یکی دیگر از اقدامات امنیتی پیشنهاد می شود به پیغام ها و خطاهایی که سایت شما هنگام بروز مشکل نمایش میدهند، توجه کافی مبذول دارید. حتما می بایست خطاهای نمایش داده شده را طوری مدیریت نمایید که کمترین اطلاعات را در صفحه نمایش دهند و مطمئن شوید اطلاعات حیاتی و اسرار سایت (نظیر API Keys و یا پسورد های دیتابیس و…) را برملا نکنند.

همچنین توجه داشته باشید که این خطاها هیچ گاه جزئیات استثناهای موجود(exception details) را در صفحات نمایش ندهند، چرا که این اطلاعات، امکان حملاتی نظیر SQL Injection را بالاتر می برد.

 

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

 

  • اعتبار سنجی سمت سرور (Server side validation)

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

 

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

 

  • پسورد ها

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

جهت نگهداری پسوردها در سایت حتما از الگوریتم های Hash نظیر SHA ویا MD5 استفاده نمایید، چرا که هکر ها در صورت نفوذ به سایت شما و یافتن پسورد، امکان رمزگشایی آنها را نداشته و در نتیجه نمی توانند به پسورد های شما دست یایند.

 

همچنین جهت امنیت بیشتر پسوردها، میتوانید از روش های Salt نیز استفاده نمایید. Salt تئوری است که باعث امنیت بیشتر انواع رمزها در دیتابیس می شود. به عنوان مثال، یک رشته/عبارت خاص را نیز به ابتدا یا انتهای پسورد Hash شده، اضافه می کنند و یا رمز Hash شده، را مجددا Hash می کنند.

 

یکی از روش های حدس زدن پسورد، حملات دیکشنری (dictionary attack) و یا حملات brute force می باشد. به این صورت که تمامی کلمات و عبارات ترکیبی ممکنه، حدس زده می شود تا یکی از آنها صحیح باشد. اما هنگامی که از تکنولوژی Salt استفاده شود، فرایند رمزگشایی بسیار کندتر می شود زیرا هر عبات Salt مورد بررسی، باید مجدد Hash شده در نتیجه محاسبات بسیار هزینه بر و زمان بر خواهد شد.

 

خوشبختانه اکثر سیستم های مدیریت محتوی(CMSها)، بسته های مدیریتی کاربران که شامل این ابزارهای امنیتی هستند را ارئه می دهند. در صورتی که از .NET استفاده میکنید، بسیار حیاتی است که از سیستمهای احراز هویت (membership providers) استفاده نمایید.

 

  • آپلود فایل

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

 

در صورتی که شما به کاربران امکان آپلود فایلهای تصویری را میدهید، شما بهیچ عنوان نباید به پسوند فایل ها و یا  Mime Type هایی که تشخیص میدهند فایل مربوطه، عکس می باشد، اعتماد کنید؛ حتی مشاهده هدر (Header) فایل ویا استفاده از توابعی که سایز عکس را محاسبه می کنند، نیز راه حل بهینه جهت تشخیص کد مخرب نیست.

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

 

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

 

یکی از راه حل های ارائه شده، تغییر نام فایل های آپلود شده می باشد تا مطمین شویم پسوند فایل مشکلی نداشته باشد. همچنین می توانید مجوزهای (permissions) فایل ها را به طور مثال به ۰۶۶۶ تغییر دهیم تا قابل اجرا نباشند.

 

همچنین در صورتی که از توزیع های لینوکسی (*nix)، استفاده میکنید، می توانید دسترسی های لازم را توسط فایل .htaccess مشابه کد زیر، ایجاد نمایید. در کد زیر مجوز دسترسی فایل هایی که دو پسوند دارند(نظیر image.jpg.php) را سلب می کند.

 

deny from all    <Files ~ “^\w+\.(gif|jpe?g|png)$”>    order deny,allow    allow from all    </Files>

 

 

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

 

جهت اینکار Attribute ی با نام src در تگ image وجود داردکه به مسیر قرار گیری فایل ها اشاره دارد. شما میتوانید از صفت src جهت مسیر دهی اسکریپت مورد نظر استفاده نموده و اطمینان حاصل نمایید که فرمت صحیح در header مربوط به HTML قرار خواهد گرفت.

<img src=”/imageDelivery.php?id=1234″ />

<?php      // imageDelivery.php           // Fetch image filename from database based on $_GET[“id”]      …           // Deliver image to browser       Header(‘Content-Type: image/gif’);       readfile(‘images/’.$fileName);       ?>

همچنین اقدامات امنیتی مربوطه می بایست در سمت سرور در نظر گرفته شود، به طور مثال مطمئن شوید که تمامی پورت های غیر ضروری در فایروال (Firewall) بسته هستند و در صورت امکان DMZ (Demilitarized Zone) را طوری تنظیم نمایید که از دنیای بیرون تنها امکان دسترسی به پورت ۸۰ و ۴۴۳ فراهم باشد.

در صورتی که امکان آپلود از طریق اینترنت را فراهم نموده اید، مطمئن شوید از متدهای انتقال ایمن نظیر SFTP و یا SSH استفاده می نمایید.

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

 

  • استفاده از HTTPS

همانطور که پیشتر در مقاله گواهی SSL  و تاثیر گواهی ssl در امنیت بیشتر وبسایت ها  توضیح داده شده، پروتکل HTTPS جهت تامین امنیت سایت در بستر اینترنت استفاده می شود. در واقع پروتکل HTTPS باعث می شود تا مرورگر کاربران مستقیما با سرور تعامل داشته به طوری امکان رهگیری و تغییر محتویات ردوبدل شده بهیچ عنوان برای سایرین نباشد.

در صورتی که در سایت خود نیاز به ارسال ودریافت اطلاعات حیاتی و با ارزشی نظیر کارت های اعتباری، تراکنش های آنلاین، فرم های لاگین و… دارید، حتما می بایست از پروتکل HTTPS استفاده نمایید.

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

جهت بالا بردن امنیت و رتبه (Ranking) سایت خود، با چند کلیک ساده می توانید گواهی ssl مورد نظر را تهیه و فعال نموده و بدین ترتیب از کلیه اطلاعات خود را در مقابل سرقت و ربوده شدن، محافظت نمایید.

 

 

  • ابزارهای تست امنیت سایت

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

 

  • Netsparker : این ابزار جهت بررسی حملات تزریق به پایگاه داده و XSS مناسب می باشد.
  • OpenVAS : یکی از بهترین ابزارهای Open Source بوده و جهت بررسی آسیب پذیری ها و حرفه های امنیتی استفاده می شود، البته در نظر داشته باشید که تنظیمات آن به راحتی امکان پذیر نیست و میبایست سرور Openvas روی توزیع های لینوکسی نصب شود.
  • io : یکی دیگر از ابزارهای رایگان می باشد که Headerهای امنیتی نظیر CSP و HSTS را روی دامنه بررسی می نماید.
  • Xenotix XSS Exploit Framework : یکی از ابزارهای OWASP (Open Web Application Security Project) می باشد، که شامل نمونه های متنوعی از حملات XSS می باشد که میتوانید روی سایت خود بررسی و تست نمایید.

 

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

 

 

مطالب مرتبط
شبکه های ما

باعث افتخار ماست اگر ما را در شبکه های اجتماعی دنبال کنید.

دسته بندی ها
بایگانی

لطفا جهت مکاتبات آینده ایمیل خود را وارد نمایید.

با موفقیت انجام شد.

متاسفانه خطا رخ داد

وبلاگ مرواهاست will use the information you provide on this form to be in touch with you and to provide updates and marketing.