امنیت وردپرس
سایت وردپرسیتان بالاست و کار میکند، و سوال واقعی این است که چه کار کنید تا فردا صبح هم همینطور باشد. جواب کوتاه این است که تقریبا هیچکدام از کارهای مهم امنیت وردپرس پیچیده و فنی نیستند، ولی باید انجام شوند و تکرار شوند. این نوشته همان فهرست را به ترتیب اهمیت میآورد، با یک بخش جدا برای چیزی که در بازار ایران بیشترین قربانی را میگیرد.
وردپرس ناامن نیست، وردپرس رهاشده ناامن است
چیزی که در عمل سایتهای وردپرسی را زمین میزند، معمولا نفوذ به خود هسته نیست. هسته وردپرس تیم بزرگ و بهروزرسانی منظم دارد و وصله امنیتیاش زود میرسد. مسیر همیشگی جای دیگری است: افزونهای که سالهاست بهروز نشده، قالبی که فروشندهاش دیگر پشتیبانی نمیکند، رمزی که در چند سرویس دیگر هم استفاده شده، و دسترسی مدیر کلی که یک بار به کسی داده شده و هیچوقت پس گرفته نشده. هیچکدام از اینها هم حمله شخصی به شما نیست. رباتها فهرست آسیبپذیریهای عمومی را روی هر دامنهای که پیدا کنند امتحان میکنند و برایشان فرقی ندارد سایت شما فروشگاه بزرگ است یا یک سایت معرفی خدمات با روزی چند بازدید. یعنی امنیت وردپرس بیشتر از آنکه یک محصول نصبشدنی باشد، یک عادت نگهداری است. اینکه وردپرس اصلا برای کار شما انتخاب درستی است یا نه بحث جداگانهای دارد و در سایت اختصاصی یا وردپرس به آن پرداختهایم؛ اینجا فرض این است که سایت وردپرسی دارید و میخواهید امن نگهش دارید.
قالب و افزونه نالشده، گرانترین چیز رایگان بازار ایران
نالشده یعنی نسخه کرکشده یک قالب یا افزونه پولی که رایگان پخش میشود. کسی که وقت گذاشته و قفل لایسنس را برداشته، این کار را بیدلیل نکرده است. رایجترین اتفاق این است که در همان فایلها چند خط کد اضافه شده باشد: کدی که یک کاربر مدیر پنهان میسازد، یا لینکهای نامربوط را داخل صفحههای شما تزریق میکند، یا فقط یک در باز میگذارد برای وقتی که به کارش بیاید. اینها هم لزوما همان روز اول خودشان را نشان نمیدهند.
مشکل دوم حتی از اولی مطمئنتر است: نسخه نالشده بهروزرسانی نمیگیرد. روزی که آسیبپذیری آن افزونه عمومی میشود، همه دنیا وصله را نصب میکنند و نسخه شما همانجا میماند، با یک آسیبپذیری که حالا آدرسش را همه میدانند. اگر سایتی را تحویل گرفتهاید و نمیدانید قالب و افزونههای پولیاش لایسنس دارند یا نه، این اولین چیزی است که باید بپرسید. راههای جایگزین هم همیشه هست: خرید نسخه اصلی همان افزونه، یا افزونه رایگانی که همان کار را با قابلیت کمتر انجام میدهد، یا برداشتن کل قابلیتی که ارزش این ریسک را ندارد.
افزونهها، هم تاریخشان مهم است هم تعدادشان
هسته و قالب و افزونهها باید مرتب بهروز شوند و بهانه همیشگی هم روشن است: ترس از اینکه سایت بعد از بهروزرسانی خراب شود. این ترس بیجا نیست، ولی راهش تعویق نیست. ترتیب امنی که جواب میدهد این است: اول یک بکاپ تازه بگیرید، بعد بهروزرسانی را انجام دهید، بعد صفحه اصلی و یکی دو صفحه داخلی و فرم تماس و مسیر خرید را خودتان باز کنید و ببینید کار میکنند. وصلههای امنیتی کوچک را میشود روی حالت خودکار گذاشت؛ نسخههای بزرگ افزونههای پیچیده مثل فروشگاه و فرمساز بهتر است دستی و با حواسجمعی انجام شوند.
تعداد هم به همان اندازه مهم است، چون هر افزونه یک در اضافه به سایت شماست. فهرست افزونهها را باز کنید و برای هر کدام یک سوال بپرسید: کدام کار سایت بدون این نمیچرخد. معمولا چند مورد پیدا میشود که برای یک کمپین قدیمی نصب شدهاند، یا دو افزونه که یک کار مشترک انجام میدهند. افزونه غیرفعال هم روی سرور شما نشسته است، پس چیزی که لازم نیست باید حذف شود نه غیرفعال. برای آنچه میماند، پیش از نصب سه چیز را نگاه کنید: آخرین بهروزرسانیاش چه زمانی بوده، چند سایت فعال از آن استفاده میکنند، و سازندهاش به گزارشهای مشکل جواب میدهد یا نه.
پیشخوان و آدمهایی که کلید دارند
سادهترین کارهای این بخش بیشترین اثر را دارند. هر حساب رمز یکتا و بلند خودش را داشته باشد و رمزها در یک مدیر رمز نگهداری شوند نه در یادداشت گوشی. برای حسابهای مدیر ورود دو مرحلهای فعال باشد، چون با آن، لو رفتن رمز بهتنهایی کافی نیست. تعداد تلاش ناموفق ورود محدود شود تا آزمایش پشت سر هم هزاران رمز روی صفحه ورود شما بیفایده شود. نام کاربری admin هم بهتر است اصلا وجود نداشته باشد، چون نصف کار حملهکننده را از قبل انجام داده است.
بعد نوبت آدمهاست. وردپرس نقشهای آماده دارد و کسی که فقط مطلب منتشر میکند به دسترسی مدیر احتیاج ندارد. حسابهای قدیمی را هم مرور کنید: همکاری که رفته، طراح قبلی سایت، فریلنسری که یک بار برای یک تغییر دسترسی گرفت. این حسابها یا باید حذف شوند یا به نقش پایینتر بروند. یک نکته که معمولا از قلم میافتد: ایمیل مدیر سایت هم بخشی از همین زنجیره است، چون هر کسی که به آن ایمیل دسترسی داشته باشد میتواند رمز پیشخوان را بازیابی کند.
هاست، نسخه PHP و چیزهایی که در ایران فرق میکند
سایت باید روی SSL باشد و همه آدرسها به نسخه امن هدایت شوند؛ این دیگر حداقل است نه امتیاز. مورد بعدی که در هاستهای اشتراکی داخلی زیاد دیده میشود، نسخه قدیمی PHP است. نسخههای قدیمی PHP بعد از مدتی دیگر وصله امنیتی نمیگیرند و بعضی سرویسدهندهها فقط به خاطر سازگاری با قالبهای قدیمی مشتریها روی همان نسخه ماندهاند. از پنل هاست ببینید روی چه نسخهای هستید و اگر عقب بود، از پشتیبانی بپرسید نسخه بهروز در دسترس هست یا نه. در کنارش دو کار کوچک اثر واقعی دارد: بستن ویرایشگر فایل داخل پیشخوان، و محدود کردن دسترسی نوشتن روی پوشهها و فایلهای حساس مثل فایل پیکربندی.
یک تفاوت دیگر هم هست که در متنهای ترجمهشده پیدا نمیکنید: بخشی از سرویسهای امنیتی و فایروالهای ابری معروف از داخل ایران در دسترس نیستند یا حساب ایرانی نمیپذیرند. یعنی نقشه امنیتی که از یک مقاله انگلیسی برداشتهاید ممکن است اصلا قابل اجرا نباشد و وقت شما را بگیرد. جای آن سراغ چیزی بروید که واقعا در اختیارتان است: امکانات خود پنل هاست، محدودسازی دسترسیها، و افزونههای دسته امنیتی که بهروز نگه داشته میشوند. کلید سومی هم هست که معمولا از یاد میرود: حساب ثبت دامنه. همان قاعدههای این بخش، یعنی رمز یکتا و ورود دو مرحلهای و ایمیل بازیابی سالم، برای پنل دامنه هم لازم است؛ کسی که به آن حساب برسد اصلا لازم نیست وارد سایت شما شود. اینکه دامنه از اول به نام چه کسی ثبت میشود بحث جداگانهای است و در انتخاب نام دامنه آمده است.
بکاپی که تست نشده، بکاپ نیست
بکاپ آخرین لایه دفاع شماست و بیشتر سایتها فقط خیال میکنند دارند. چهار شرط دارد. اول اینکه خودکار و منظم باشد، نه کاری که هر وقت یادتان افتاد انجام میدهید. دوم اینکه فایلها و دیتابیس هر دو را بگیرد، چون سایت وردپرسی بدون یکی از این دو برنمیگردد. سوم اینکه یک نسخه بیرون از همان سرور نگهداری شود؛ بکاپی که کنار خود سایت است، در حادثهای که به سرور بخورد با آن از بین میرود. چهارم اینکه چند نسخه تاریخدار نگه دارید نه یک نسخه که هر بار روی قبلی نوشته شود، چون سایت آلوده هم بکاپ میگیرد و اگر آلودگی چند هفته دیده نشود، تنها نسخه سالمتان پاک شده است.
و شرط آخر که همه از آن رد میشوند: یک بار بکاپ را واقعا برگردانید. روی یک سابدامنه آزمایشی یا روی سیستم خودتان. تنها چیزی که ثابت میکند بکاپ سالم است، همین است که یک بار آن را برگردانده باشید. تا آن روز، آنچه دارید فقط چند فایل فشرده است با یک اسم امیدوارکننده.
اگر سایت آلوده شد، به این ترتیب پیش بروید
عجله و شروع از وسط کار، معمولترین دلیل آلوده شدن دوباره سایت است. ترتیبی که جواب میدهد این است. اول جلوی آسیب بیشتر را بگیرید: سایت را موقتا در حالت تعمیر یا خارج از دسترس بگذارید و به پشتیبانی هاست خبر بدهید، هم برای اینکه بازدیدکنندهها به صفحه آلوده نخورند و هم برای اینکه گوگل سایت را علامتدار نکند. دوم دنبال بکاپ سالم بگردید، یعنی نسخهای با تاریخ پیش از شروع آلودگی، نه لزوما آخرین بکاپ.
سوم پاکسازی است: یا نسخه سالم را برمیگردانید و بلافاصله بعد از آن هسته و قالب و همه افزونهها را بهروز میکنید، یا فایلهای هسته را با نسخه سالم جایگزین و فایلهای آلوده را پاک میکنید. چهارم همه رمزها عوض میشوند و اینجا کوتاه نیایید: پیشخوان، دیتابیس، پنل هاست، دسترسی FTP و SSH، و ایمیل مرتبط. کاربران مدیری که نمیشناسید حذف شوند و کلیدهای امنیتی داخل فایل پیکربندی هم عوض شود تا نشستهای باز بسته شوند. پنجم و مهمتر از همه، ریشه را پیدا کنید: کدام افزونه، کدام نسخه قدیمی، کدام حساب. تا وقتی این معلوم نشود، همان در دوباره باز است. اگر گوگل هم سایت را علامتدار کرده بود، بعد از پاکسازی از سرچ کنسول درخواست بازبینی بدهید.
چکلیست کوتاهی که میشود همین امروز شروع کرد
اگر همه آنچه گفته شد را در یک فهرست کوتاه جمع کنیم، این میشود. قالب و افزونه نالشده را از سایت بیرون بگذارید. هسته و قالب و افزونهها را با نظم ماهانه بهروز کنید و قبلش بکاپ بگیرید. افزونههای لازم نداشته را حذف کنید نه غیرفعال. برای هر حساب رمز یکتا بگذارید و برای مدیرها ورود دو مرحلهای فعال کنید. تلاش ورود را محدود کنید و نقش هر کاربر را به کمترین دسترسی لازم برسانید. حسابهای قدیمی را ببندید. نسخه PHP و SSL را چک کنید. بکاپ خودکار و بیرون از سرور داشته باشید و یک بار آن را برگردانید.
این فهرست کوتاه است ولی سایت را از دسترس بیشتر حملههای خودکاری که هر روز اتفاق میافتند بیرون میبرد. وردپرسی که مرتب بهروز میشود، افزونه کم و سالم دارد و بکاپ تستشده دارد، سایت امنی است و لازم نیست جایش را عوض کنید. سراغ طراحی سایت اختصاصی وقتی میروید که کار اصلی کسبوکارتان دیگر در قالب آماده جا نمیشود و هر قابلیت تازه یعنی یک افزونه تازه روی همان سایت. آن وقت تصمیمی که میگیرید تصمیم معماری است، نه تصمیم امنیتی.
