روش های جلوگیری از هک وب سایت ها
یادداشت ویراستار: اصل این مطلب در خرداد ۹۵ نوشته شده بود و در آذر ۹۹ دوباره بررسی و بهروز شده است.
هکرها همواره به دنبال قربانیانی میگردند که بیدغدغه و بدون تلاش زیاد بتوانند آنها را مورد حمله قرار دهند. از جمله موارد مورد توجه هکرها، وبسایتها هستند که آمار هک شدنشان قابل توجه است. در این مجال قصد داریم راهکارهای تامین امنیت وب سایت ها را بررسی کنیم و سپس به صورت خاص نکاتی در زمینه راهکارهای تامین امنیت وب سایت های وردپرسی بیان میکنیم. با فالنیک همراه باشید.
- چرا وب سایت ها هک میشوند؟
- چگونه در کار هکرها اختلال ایجاد کنیم؟
- نکات تامین امنیت وب سایت ها
- چرا سایت های وردپرسی بیشتر هک میشوند؟
- امنیت سایت های وردپرسی
چرا وب سایت ها هک میشوند؟
این فکر که سایت شما آنقدرها هم ارزش ندارد تا مورد هک قرار گیرد اشتباه است. اغلب رخنههای امنیتی وب سایت ها با هدف دزدیدن اطلاعات یا خرابکاری انجام نمیشود بلکه با هدف استفاده از سرور شما یا بهتر بگویم، سواستفاده از سرورتان انجام میشود مثلا به عنوان بخشی از botnet، برای اسپم در ایمیل، تنظیم وب سرور موقتی، استفاده از فایلها برای فعالیت غیرقانونی، برای استخراج بیت کوین و درآمد با باج افزار. خواندن مطلب “باج افزار چیست؛ شناخت انواع باج افزار و روش های مقابله با آن” در این زمینه مفید است.
هک معمولا با اسکریپ های خودکار انجام میشود که در اینترنت میچرخد تا قربانی خود را که در نرم افزارش مشکلات شناخته شده دارد را پیدا و آلوده کند. در ادامه نکات لازم برای امن نگه داشتن وب سایت ارایه میشود.
چگونه در کار هکرها اختلال ایجاد کنیم؟
انگیزه هکر ها، درآمد است و استراتژی شان به دست آوردن آن با کمترین ریسک و بیشترین سود. وقتی به عملکرد و رفتار آنها به عنوان رقیب توجه کنید، میتوانید با حفاظت از کسبوکار خود، کسبوکار آنها را مختل کنید. اختلال در کار هکرها باعث بالا رفتن هزینهها و کاهش درآمدشان میشود و آنها را مجبور میکند تا روش خود را تغییر دهند.
هکرها با ریسک و هزینه خود، در کسبوکارهای سازمانیافته نفوذ میکنند. وقتی عملکرد هک را بشناسید، یاد میگیرید که هکر ها چگونه سازمان مییابند و چگونه درآمد کسب میکنند و در نتیجه میتوانید استراتژی خود را برای شکست آنها برنامهریزی کنید.
برای ایجاد اختلال در کار هکرها، باید به موارد زیر توجه کنید:
امنیت اطلاعات: قبل از آنکه زیانی وارد شود، منافذ نفوذ را پیدا و متوقف کنید. حملات هکرها روز به روز پیچیدهتر میشود. بنابراین داشتن برنامه جامع امنیتی و تیم ماهر برای ایجاد اختلال در کار هکر ها الزامی است.
امنیت دادهها: البته هرگز نخواهید توانست جلوی تمامی حملات سایبری را بگیرید اما میتوانید داده های خود را همان لحظه که ایجاد میشوند، رمزنگاری کنید.
امنیت اپلیکیشن: آسیبپذیریهای خود در نرم افزار را پیدا و برطرف کنید. هکرها تمرکز خود را به سمت اپلیکیشنها تغیییر دادهاند. بنابراین سعی کنید با استفاده از فرآیند SDLC (چرخه زندگی توسعه نرم افزاری)، اپلیکیشنهای خود را امنتر کنید.
نکات تامین امنیت وب سایت ها
برای تامین امنیت وب سایت های خود، چه با کد نویسی اختصاصی باشند و چه وردپرسی، به 9 نکته زیر توجه کنید:
1- همواره سیستم عامل و نرم افزارهای تان را به روز نگه دارید و وصلههای امنیتی را در اسرع وقت نصب کنید. توجه به این نکته مهم و حیاتی باعث میشود هکر نتواند از سوراخ های امنیتی شناخته شده در نرم افزار برای هک و رخنه استفاده کند. بسیاری از CMS ها مانند وردپرس در صورت داشتن آپدیت پیغام میدهند. بسیاری از برنامه نویسان هم از ابزارهایی مانند Composer و npm و RubyGems برای مدیریت آپدیت ها استفاده میکنند که البته نوتیف آپدیت نمیدهند. ابزاری مثل Gemnasium نوتیف هم میدهد.
2- مراقب حمله SQL Injection باشید. در این حمله هکر از فیلد web form یا پارامتر URL برای دسترسی یا دستکاری دیتابیس استفاده میکند. وقتی از Transact SQL استاندارد استفاده کنید، هکر به راحتی میتواند جداول را تغییر دهد یا دیتایی را پاک کند یا دیتا بردارد. برای جلوگیری از این موضوع همیشه از parameterised queries استفاده کنید. اغلب زبان های وب از این ویژگی پشتیبانی میکنند و به سادگی قابل پیاده سازی هستند.
3- مراقب حمله Cross-site scripting یا XSS باشید. این حمله، جاوااسکریپ های مخرب را وارد صفحات شما میکند و در مرورگر کاربرتان اجرا میشوند و میتواند محتوای صفحات را تغییر دهد یا اطلاعات بدزدد. مثلا اگر کامنت های صفحه تان را بدون اعتبارسنجی نشان دهید، هکر کامنتی با محتوای جاوا اسکریپت و script tags وارد میکند که میتواند روی مرورگر تمام کاربران اجرا شود و کوکی های لاگین آنها را بدزدد یا کنترل اکانت هر کاربری که کامنت را میبیند به دست گیرد. باید مطمئن باشید که هیچ کاربری نمیتوانند محتوای جاوا اسکریپ وارد کند. یکی از ابزارهایی که برای مقابله با XSS وجود دارد Content Security Policy – CSP است.
4- به پیامهای هشدار توجه کنید. دقت کنید که در پیام های خطا چه میزان اطلاعات میدهید. بهتر است حداقل تعداد پیغام خطا را به کاربر بدهید و در آنها اطلاعات سری مانند پسورد دیتابیس یا API keys لو نرود. جزییات خطاها را در لاگ های سرور نگه دارید و به کاربر تنها آنچه که لازم است نمایش دهید.
5- اعتبارسنجی هم در مرورگر و هم سرور. مرورگر ممکن است هنگام اعتبارسنجی با خطایی مثل فیلدهای ضروری که خالی هستند و یا وقتی در فیلد فقط عدد وارد کنید مواجه شود. باید اعتبارسنجی را به شکل عمیقتر در سمت سرور هم انجام دهید چون در غیر این صورت ممکن است کدهای مخرب یا کدهای اسکریپت وارد دیتابیس شوند و یا روی وب سایت تاثیرات نامطلوب بگذارند.
6- پسوردهای مناسب برای سرور و کاربران. بسیار مهم است که برای ادمین سرور و وب سایت، پسورد قوی تنظیم شود اما همانقدر هم آموزش انتخاب پسورد خوب و قوی برای کاربران مهم است تا امنیت اکانت های آنها تامین شود. پسورد باید حداقل 8 کاراکتر و ترکیبی از حروف بزرگ و کوچک و اعداد و علامتها باشد. پسوردها معمولا به شکل رمزگذاری شده ذخیره میشوند مثلا با الگوریتم هشینگ مانند SHA. استفاده از این روش یعنی هنگام احراز هویت کاربران فقط مقادیر رمزگذاری شده را مقایسه میکنید. میتوانید برای امنیت بیشتر وب سایت، از salt the passwords استفاده کنید. Salt یعنی مقداری با طول ثابت و تصادفی با رمزنگاری بسیار قوی. Salt جدید برای هر پسورد، هزینه محاسباتی رمزگشایی salt + password بسیار زیاد است و هکرها وقت خود را اینگونه تلف نمیکنند.
7- جلوی آپلود کاربر روی سایتتان را بگیرید. اگر به کاربرتان اجازه دهید فایلی روی وب سایتان آپلود کند، ریسک بزرگ امنیتی برای وب سایت تان انجام دادهاید. فایل ها ممکن است حاوی اسکریپ هایی باشند که وقتی روی سرورتان اجرا شوند کاملا وب سایت تان را باز کنند. اگر مجبور هستید کاربر فایل آپلود کند توجه کنید که: تمام فایلهای مشکوک را حذف کنید، فقط به پسوند فایل اکتفا نکنید که فایل مثلا عکس است ممکن است پسوند Fake باشد، بسیاری از فرمت های عکس امکان ذخیره در قسمت کامنت را دارند که ممکن است با کد PHP که قابل اجرا روی سرور است پر شده باشد.
اگر از هاستینگ استفاده میکنید، پیکربندی های لازم را برایتان انجام میدهند اما اگر خودتان وب سایت تان را هاست میکنید باید به چند نکته توجه کنید: تنظیمات فایروال را حتما انجام دهید، پورت های غیرضرورری را بلاک کنید، اگر میتوانید DMZ – Demilitarised Zone را تنظیم کنید که دسترسی از دنیای بیرون فقط از پورت 80 و 443 باشد، اگر باید امکان آپلود فایل از اینترنت را بدهید فقط از روشهای انتقال امن به سرورتان مانند SFTP یا SSH استفاده کنید.
8- از HTTPS استفاده کنید. پروتکل HTTPS امنیت را روی اینترنت فراهم میکند و کاربران مطمئن هستند که هیچ کس دیگری بین آنها و سرور نیست تا محتوای انتقالی بین آنها را تغییر دهد یا بدزدد: مثلا نشست لاگین کاربر یا اطلاعات کارت اعتباری او را هنگام پرداخت بدزدد. از طرفی اگر از HTTPS استفاده کنید، گوگل رتبه شما را سریعتر ارتقا میدهد و روی سئوی سایت تان تاثیر دارد. برای آشنایی با پروتکل HTTPS مقاله “گواهینامه SSL چیست و چگونه کار می کند؟” را بخوانید.
9- از ابزارهای امنیت وب سایت استفاده کنید. با استفاده از ابزارهای امنیت سایت میتوانید امنیت وب سایت تان را تست کنید. موثرترین راه در این زمینه استفاده از ابزارهای امنیتی است. این ابزارها هم به صورت رایگان و هم خریدنی وجود دارند. برخی از ابزارهای رایگان در این زمینه عبارتند از Netsparker و OpenVAS و Nessus و SecurityHeadeer.io و Xenotix XSS Exploit Framework.
چرا سایت های وردپرسی بیشتر هک میشوند؟
نه تنها سایت های وردپرسی بلکه تمام سایتها در اینترنت ممکن است هک شوند اما دلیل اصلی اینکه سایت های وردپرسی، معمولا مورد هدف هکرها هستند چیست؟
وردپرس محبوب ترین سازنده وب سایت – Website Builder است و در بیش از 31 درصد تمام وب سایت ها استفاده میشود یعنی صدها میلیون وب سایت در سراسر دنیا. این محبوبیت وسیع باعث میشود هکرها خیلی راحتتر راهی به وب سایت هایی با امنیت کمتر پیدا کنند. انگیزه هکرها از هدف قرار دادن وب سایت های وردپرسی متفاوت است مثلا هکرهای مبتدی که تازه در حال یادگیری هستند و سایتهای ناامنتر را هک میکنند، یا هکرهایی که قصد توزیع بدافزار دارند و از یک سایت برای حمله به سایتهای دیگر استفاده میکنند یا قصد اسپم کردن (هرزنامه فرستادن) اینترنت را دارند.
حال که با دلایل اصلی هک شدن وب سایتهای وردپرسی آشنا شدید برویم سراغ نکاتی که با رعایت کردنشان میتوانیم جلوی هک شدن را بگیریم.
امنیت سایت های وردپرسی
در مورد وب سایت های وردپرسی علاوه بر نکاتی که برای تامین امنیت وب سایت ها گفتیم باید به نکات دیگری نیز توجه کنید:
1- مانند تمام وبسایتها، سایت های وردپرسی هم روی وب سرور، هاست میشوند. پلتفرم هاستینگ در برخی شرکتهای هاستینگ به اندازه کافی امن نیستند در نتیجه تمام وبسایتهایی که این شرکتها هاست میکنند در معرض حمله هکر قرار دارند. با انتخاب بهترین و امنترین هاستینگ وردپرس، این مشکل را حل کنید. وقتی سایت شما روی پلتفرم امنی هاست شود از بسیاری حملات رایج هکرها روی سایتهای وردپرسی در امان میماند. اگر میخواهید جانب احتیاط را بیشتر رعایت کنید میتوانید از Managed WordPress Hosting استفاده کنید.
2- از پسوردهای ضعیف استفاده نکنید. پسوردها کلید ورود به وب سایت وردپرسی هستند. باید از پسورد قوی و یکتا برای هر یک از اکانتهای زیر استفاده کنید:
- Your WordPress admin account
- Web hosting control panel account
- FTP accounts
- MySQL database used for your WordPress site
- Email accounts used for WordPress admin or hosting account
تمام این اکانتها با پسورد محافظت میشوند. استفاده از پسوردهای ضعیف کار را برای هکرها راحت میکند و با استفاده از ابزارهای معمولی هک میتوانند آن را کرک کنند.
3- دسترسی محافظت نشده به ادمین ورد پرس – wp-admin Directory. فضای ادمین وردپرس جایی است که فعالیتهای مختلفی روی سایت وردپرس انجام میشود و هکرها معمولا از این طریق هک میکنند. رها کردن این ادمین بدون حفاظت باعث هک شدن وب سایت میشود. روشی که کار را برای هکرها سخت میکند این است که برای دایرکتوری ادمین وردپرس لایههای احراز هویت تعیین کنید. اگر چندین کاربر و نویسنده قرار است به سایت وردپرس وارد شود، باید برای تمام کاربران روی سایت پسورد مشخص کنید. میتوانید احراز هویت دومرحلهای هم مشخص کنید.
4- مجوزهای فایل را به درستی مشخص کنید. File permission ها مجموعه قوانینی روی وب سرور هستند که به وب سرور کنترل دسترسی به فایلها را روی سایت میدهد. مجوزهای اشتباه فایلی میتواند به هکر اجازه نوشتن و تغییر این فایلها را بدهد. شماره ارزش – Numeric Value در مجوز فایل، برای فایلهای وردپرس 644 و برای فولدرهای وردپرس 755 است.
5- وردپرس را آپدیت کنید. برخی کاربران وردپرس از آپدیت سایتهای وردپرسی میترسند اما هر نسخه جدید، باگها و سوراخهای امنیتی وردپرس را رفع میکند. اگر از خرابی در وب سایت بعد از آپدیت میترسید، قبل از آپدیت از سایت خود بکاپ بگیرید. در این صورت اگر با مشکلی مواجه شدید میتوانید به حالت قبل برگردید.
6- تمها و پلاگینهای وردپرس را آپدیت کنید. درست مانند نرم افزار اصلی وردپرس، تم ها و پلاگینهای وردپرس هم باید آپدیت شوند.
7- تمها و پلاگینهای امن استفاده کنید. تمهای وردپرسی که متناسب با سازمان و شرکتتان است را انتخاب کنید که در عین حال باید امن و سریع باشد. همچنین از پلاگینهای امنیتی استفاده کنید که ویژگیهای شاخص آن عبارتند از: فایروالی برای بلاک ترافیک مشکوک، حفاظت در برابر هک brute-force و لاگینهای رندوم، اسکن کردن فایل ها و تم ها و پلاگین ها در برابر مشکلات امنیتی، نوتیف های منظم امنیتی. Wordfence یکی از بهترین پلاگین امنیتی رایگان است.
8- به جای FTP از SFTP یا SSH استفاده کنید. اکانتهای FTP برای آپلود فایلها روی وب سرور از کلاینت FTP استفاده میکنند. اغلب هاستینگها از اتصالات FTP با استفاده از پروتکلهای مختلف پشتیبانی میکنند و میتوانید از FTP و SFTP و SSH استفاده کنید. وقتی با FTP به سایت وصل میشوید، پسوردتان بدون رمزگذاری به سرور ارسال میشود پس به راحتی قابل هک است.
9- از تمها و پلاگینهای رایگان استفاده نکنید. بسیاری وبسایتها روی اینترنت به طور رایگان تمها و پلاگینهای رایگان عرضه میکنند. دانلود تمها و پلاگینهای وردپرس از منابع غیرقابل اعتماد، بسیار خطرناک است که نه تنها امنیت سایت را به خطر میاندازد بلکه منجربه دزدی اطلاعات میشود. پس دانلود را از منابع رسمی plugin/theme WordPress دانلود کنید. تم و پلاگین خریداری شده از نسخه رایگان آن عملکرد بهتری دارند.
10- از کلمه Admin برای نام کاربری وردپرس استفاده نکنید. اگر نام کاربری ادمینی شما Admin است سریع آن را عوض کنید.
11- امنیت فایل پیکربندی wp-config-php را تامین کنید. فایل پیکربندی wp-config-php حاوی اعتبارات لاگین دیتابیس وردپرس است و هک شدن آن دسترسی کامل به وب سایت شما را به هکر میدهد. با استفاده از htaccess. میتوانید عدم دسترسی به این فایل را مشخص کنید. کد های زیر را به فایل htaccess. اضافه کنید.
<files wp-config.php> order allow,deny deny from all </files>
12- table prefix پیش فرض وردپرس را تغییر دهید. این توصیه بسیاری متخصصین است. به صورت پیشفرض، وردپرس از _wp برای پیشوند جدولهایی که در دیتابیسش ایجاد میکند، استفاده میکند. شما میتوانید هنگام نصب آن را تغییر دهید. پیشنهاد میشود پیشوند جدید کمی پیچیدهتر باشد. با این کار هکر به راحتی نمیتواند نامهای جداول دیتابیس شما را حدس بزند.