وردپرس (WordPress) یکی از محبوبترین CMS های دنیاست که به دلیل سبکی و سادگی، گوی سبقت را از رقبای قدر خود (همچون جوملا و دروپل) ربوده است.
با توجه به اینکه بعضی از دوستان و مشتریان گرامی از این CMS استفاده میکنند، در این آموزش، به چند روش برای ارتقاء امنیت آن اشاره شده است:
آپدیت هسته و افزونهها:
بیشک این مهمترین گام است.
در اغلب آپدیتهای ارائه شده برای همه CMS ها، برخی باگهای امنیتی رفع میشود و خطرش برای کسانی باقی میماند که CMS شان را آپدیت نکردهاند.
خوشبختانه وردپرس در نسخه 3.7 به بعد، امکان Auto update را قرار داده و شما با درج کد define('WP_AUTO_UPDATE_CORE',true); در فایل wp-config.php میتوانید مطمئن باشید که همواره وردپرس نصب شده در هاست شما به آخرین نسخه آپدیت میشود.
استفاده از افزونه (پلاگین) کمتر و مطمئن:
برخی هکها، به دلیل ضعف امنیتی یک پلاگین رخ میدهد زیرا هسته وردپرس توسط متخصصین بارها بازبینی شده و ضعف امنیتی بزرگی ندارد اما پلاگینها توسط هر کسی میتواند نوشته شود و به راحتی موجبات نفوذ را فراهم کند.
مثلا خاطرم هست که چندی پیش یک پلاگین پر استفاده مخصوص ساخت «فرم ارتباط با ما» دارای یک ایراد امنیتی بود که کشف شده بود اما بسیاری از افراد از آن اطلاع نداشتند و هکرها هم با جستجوی امضای آن پلاگین، به راحتی سایتهای دارای آن پلاگین سوراخدار را پیدا میکردند و آنها را به راحتی هک میکردند. لذا هم پلاگینها باید آپدیت شود و هم از پلاگینها معتبر و مطمئن استفاده کنید نه پلاگینی که دوست تازهکارتان نوشته و به شما داده!
حفاظت محیط مدیریت:
هر هکری میداند که آدرس صفحه مدیریت یک CMS معروف چیست. از سویی نام کاربری مدیر نیز به صورت پیشفرض admin است پس فقط کافی است هکر زحمت حدس رمز (با روش مهندسی اجتماعی و ...) را بکشد!
اما شما به راحتی میتوانید کار را برای او سخت کنید. نام پوشه مدیریت (wp-admin) و نام پیشفرض مدیریت (admin) را به نامهای غیرقابل حدس (نه مثلا اسم کوچک خودتان!) تغییر دهید. قوی بودن کلمه عبور نیز فراموش نشود. استفاده از افزونههایی مانند Login Lockdown یا Limit Login Attempts نیز به شما کمک میکند که تعداد تلاش برای تست پسوردهای مختلف از یک IP را محدود کنید.
همچنین دقت کنید که ترافیک http شما به سادگی قابل شنود است لذا رمز شما به راحتی برای کسی که در مسیر شبکه باشد، قابل رویت است. پس اگر سایت شما یک سایت شخصی ساده نیست و اهمیت و ارزش بالایی دارد، لازم است برای محیط مدیریت آن SSL استفاده کنید. گواهی SSL برای دامنه شما با پرداخت هزینه سالیانه (مثلا 50 دلار) قابل خریداری است و از آن پس شما بجای http ، با https وارد محیط مدیریت خود میشوید و میتوانید مطمئن باشید که اگر کسی بخواهد خط شما را شنود کند (حملات MITM)، براوزر به شما هشدار خواهد داد.
پسورد یکبارمصرف و پلاگینهای وردپرسی آن نیز یکی از بهترین روشهای امنیت Login کاربر/کاربران به سایتهای وردپرسی است.
انتقال wp-config.phpانتقال wp-config.phpانتقال wp-config.php به بیرون از پوشه public_html:
برخی اوقات در هاست خود بنده و حتی سرور سایتهای معروف، این اتفاق رخ میدهد که سرو کننده صفحات PHP متوقف میشود. حتی این اشکال ممکن است مقطعی (مثلا فقط 5 دقیقه) رخ دهد اما به سادگی با درج آدرس YourDomain.com/wp-config.php نفوذگر میتواند به مشخصات لازم برای دسترسی به دیتابیس شما، دست پیدا کند و تمام!
بکآپ مداوم و غیردستی (اتوماتیک) از دیتابیس:
فایلهای سایت شما تغییری نمیکنند و زحمات شما شامل درج/ویرایش مطالب، نظرات و تنظیمات میشود که همگی در دیتابیس ذخیره میشوند. لذا لازم است از دیتابیس همیشه بکآپ داشته باشید. چرا که حتی اگر سرور شما ضدگلوله و غیرقابلنفوذ باشد، باز هم ممکن است به خاطر خطای نرمافزار یا اشکال سختافزاری، اطلاعات شما از بین برود و بکآپ مناسبی هم از آن وجود نداشته باشد لذا بهتر است با نصب افزونههایی که وجود دارد، به صورت اتوماتیک بکآپ دیتابیس شما ایجاد و در سروری دیگر (یا حتی سرویسهای رایگانی چون دراپ باکس) ذخیره گردد.
روشها و پلاگینهای متعددی برای این کار در اینجا معرفی شده است.
از سرور اشتراکی استفاده نکنید:
سرور اشتراکی قیمت ارزانتری دارد و مثلا با هزینه 50 هزار تومان در سال میتوانید یک هاست برای سایت وردپرسی خود تهیه کنید. در سرور اشتراکی، صدها (و گاهی هزاران!) سایت، بر روی یک سرور قرار دارد و در صورت ضعف امنیتی در سرور یا یکی از سایتهای آن، یا خریداری یکی از آن هاستهای اشتراکی توسط یک نفوذگر، سایت شما که در آن سرور اشتراکی است نیز در معرض خطر قرار میگیرد. لذا اگر سایت شما یک سایت با اهمیت است و ارزش هزینه کردن دارد لازم است سرور غیر اشتراکی (مثلا سرور مجازی) تهیه کنید که هزینه بالاتری دارد. (مثلا سالی 100 دلار)
نمایش خطا را غیرفعال کنید:
نکته مهمی که بسیاری از آن غافل هستند، غیرفعال کردن نمایش خطاهای برنامه (خطاهای php) است چون در صورت بروز خطا، نام فایل و مسیر و اطلاعات دیگری (مانند نام دیتابیس و جدول اطلاعاتی و ...) ممکن است نشت کند. لذا میتوانید از طریق فایل .htaccess (یا httpd.conf) و همچنین false کردن مقدار WP_DEBUG در فایل wp-config.php از نمایش خطا جلوگیری کرد.
از CDN و IDS ها و فایروالها استفاده کنید:
این روش کمی حرفهای است و به افراد ناآشنا با برنامهنویسی توصیه نمیشود. استفاده از یک CDN مانند کلودفلیر، علاوه بر سایر محاسنی که دارد، در تشخیص حمله و جلوگیری از آن نقش مؤثری دارد. درست مانند IDS ها و فایروالها.
از یک FTP امن برای آپلود اطلاعات سایتتان استفاده کنید:
استفاده از یک ftp عادی (و نه sftp یا ssh) یا محیط کنترل پنل عادی (غیر https) برای آپلود فایلهای سایت شما، موجب میشود که هم پسورد شما قابل شنود باشد و هم محتویات فایلهای شما از جمله فایل wp-config.php که حاوی پسورد دیتابیس است.
ساخت یوزر دیتابیس با حداقل دسترسی:
برخی از افراد مبتدی، از همان یوزر پسورد اصلی سرور (که برای ورود به کنترل پنل هاست و همچنین ftp استفاده میشود) برای دیتابیس هم استفاده میکنند که اشتباه بزرگی است چون در صورت لو رفتن آن، همه چیز شما در اختیار نفوذگر قرار خواهد گرفت.
روش صحیح است که در کنترل پنل هاستتان، به قسمت مدیریت کاربران پایگاه داده رفته و یک یوزر برای ارتباط با دیتابیس بسازید و پس از نصب cms تان، به قسمت تنظیم privilege آن کاربر رفته و آن را روی حداقل تنظیم کنید...
مانیتور کردن آمار و وضعیت و نظرات و مسدود کردن ip های مشکوک
از پیشوند پیشفرض wp_از پیشوند پیشفرض wp_از پیشوند پیشفرض wp_ برای جداول استفاده نکنید:
به صورت پیشفرض، wp_ پیشوند جداول پایگاه داده شماست که در فایل wp-config.php تعریف شده است. بهتر است آن را به یک نام غیرقابل حدس (مثلا a8p2n7_) تغییر دهید.
با .htaccess یا httpd.conf مانع نمایش محتویات پوشههای فاقد index شوید.
دسترسی پوشهها را روی 750یا755 و فایلها را روی 640یا644 تنظیم کنید و از دسترسی 777 بپرهیزید
غیر فعال کردن Custom HTML:
به صورت پیشفرض، وردپرس به برخی توابع (functions) خود اجازه استفاده از html (بجای متن عادی) را میدهد که در اغلب سایتها نیاز نیست. با درج عبارت define('DISALLOW_UNFILTERED_HTML',true); در فایل wp-config.php میتوانید آن را غیرفعال کنید.
کوکیهای سایت وردپرسی خود را نمکی کنید! نمک (salt) در اصطلاح برنامهنویسی به اضافه غیرقابلحدسی گفته میشود که به رشته شما قبل از هش افزوده میشود تا مقدار کوکی/سشن کاملا غیرقابل بازگشت باشد. برای این منظور کافی است کدی که در این آدرس میبینید را با کد مشابهی که به صورت پیشفرض در wp-config.php قرار دارد، جایگزین کنید.
ویرایش تم و پلاگین را از محیط مدیریت، ناممکن کنید:
به صورت پیشفرض، از محیط مدیریت میتوان کد php, html, css, js تم و برخی پلاگینها را ویرایش کرد. برای غیرفعال کردن این قابلیت، کافی است در فایل wp-config.php کد define('DISALLOW_FILE_EDIT',true); را اضافه کنید.
نمایش نسخه (ورژن) وردپرس را غیرفعال کنید:
زمانی که نسخ جدید وردپرس منتشر میشود، معمولا باگها و اشکالات ورژنهای قبلی نیز مشخص میشود. لذا یک هکر با جستجو در گوگل، میتواند سایتهای استفادهکننده از نسخ قدیمی (یا یک نسخه خاص) وردپرس را یافته و از طریق ضعفی که در آن نسخه از وردپرس هست، برای نفوذ اقدام کنند. لذا بهتر است به وردپرس بگوییم که نسخه (ورژن) خود را نمایش ندهد. برای این کار 2 روش غلط معمول است و یک روش صحیح که هر سه روش در اینجا توضیح داده شده است.
از سایتها و پلاگینهای افزایش امنیت یا چک کننده نقاط ضعف استفاده کنید:
مانند Akismet یا BulletProof Security یا scanWP و iThemes Security و ...
نصب پلاگین Sucuri Securityنصب پلاگین Sucuri Securityنصب پلاگین Sucuri Security جهت اطلاع از روش هک شدن سایت وردپرسی شما
زمانی که یک سایت وردپرسی هک میشود، صاحبانش اغلب متوجه نمیشوند که از کجا خورده است! و صرفا به نصب یک وردپرس جدید و برگرداندن آخرین بکآپ دیتابیس بسنده میکنند چون راه دیگری ندارند!
این پلاگین امکاناتی دارد که جالبترین آن، فراهم آوردن امکان بازبینی کلیه تغییرات (روی فایلها و دیتابیس) است که به ما کمک میکند در صورت هک شدن، بتوانیم علت آن را سریعتر کشف کنیم و با نگرانی و زحمت کمتری اقدام به پاکسازی و بازگردانی سایت به حالت طبیعی را انجام دهیم.