دموی رایگان

راهنمای کامل امنیت وردپرس؛ از پایه تا اجرا

دلوین خیری مقدم خواندن ~۹ دقیقه امنیت و پشتیبان‌گیری
راهنمای کامل امنیت وردپرس؛ از پایه تا اجرا
امنیت وردپرس یک افزونهٔ تکی نیست؛ ستونی از پنج لایهٔ دفاعی است که کنار هم کار می‌کنند: زیرساخت سالم، به‌روزرسانی منظم، دسترسی کنترل‌شده با ورود دومرحله‌ای، پشتیبانِ آزموده‌شده و پایش پیوسته. به تجربهٔ ما سایتی که این پنج لایه را بچیند و ماهانه حدود یک تا دو ساعت برای نگه‌داشتنشان وقت بگذارد، سطح دفاعش از اکثر سایت‌های بی‌روتین به‌طور محسوس بالاتر می‌رود؛ چون طبق آمار W3Techs حدود ۴۳ درصد وب‌سایت‌های جهان وردپرسی‌اند (تاریخ گردآوری: آبان ۱۴۰۵) و همین محبوبیت، آن را هدف پرتکرار اسکنرها کرده است. در این راهنما هر لایه را گام‌به‌گام می‌بندیم و در پایان، نقشهٔ اجرای ۳۰ روزه را می‌بینید.

پیش از ورود، مرز این راهنما با خواهران قبلی‌اش روشن باشد: چک‌لیست ۱۴ موردی امنیت وردپرس از پایه گیتِ روزِ قبل از انتشار است، بازیابی سایت هک‌شده از جایی شروع می‌شود که حادثه رخ داده باشد و برای پشتیبان هم راهنمای گام‌به‌گام بکاپ منظم، چک‌لیست پانزده‌موردی و بررسی چرایی ناکامی ریستور، هرکدام جدا نوشته شده‌اند. کار این مقاله چیز دیگری است: نقشهٔ پیوستهٔ پنج‌لایه‌ای که بعد از روز انتشار بالا نگه داشته می‌شود — همان چیزی که اکثر سایت‌ها بعد از استقرار فراموشش می‌کنند.

چرا لایه‌بندی؟ چون حمله معمولاً از ضعیف‌ترین حلقه وارد می‌شود، نه از درِ اصلی. در ممیزی‌های خودمان دیده‌ایم سایتی که دو افزونهٔ امنیتی نصب داشت، اما هسته‌اش شش ماه به‌روز نشده بود و دوازده حساب کاربری با نقش مدیر داشت؛ دفاع، ظرفیتِ ضعیف‌ترین لایه است. تا پایان این راهنما می‌دانید هر لایه دقیقاً چه می‌خواهد، هر چند وقت یک‌بار بازبینی می‌شود و مجموعاً چقدر از وقت ماهانهٔ شما را می‌گیرد.

امنیت وردپرس یعنی لایه‌بندی دفاع، نه یک افزونه

پنج لایهٔ دفاع، به‌ترتیب چیدمان
هر لایه آنچه از لایهٔ قبل رد شده را می‌گیرد؛ حذف یک لایه، همان حلقهٔ ضعیف است.

ایدهٔ ساده است: هیچ لایه‌ای قرار نیست همهٔ حمله‌ها را بند بزند؛ هر لایه چیزی را می‌گیرد که از لایهٔ قبل رد شده و به لایهٔ بعد فرصت واکنش می‌دهد. زیرساخت سالم، پایهٔ ایزوله و سالم می‌سازد؛ به‌روزرسانی، حفره‌های شناخته‌شده را می‌بندد؛ دسترسی کنترل‌شده جلوی دزدیده‌شدن کلیدها را می‌گیرد؛ پشتیبان، بدترین سناریو را برگشت‌پذیر می‌کند؛ و پایش، تفاوت «سه هفته بعد فهمیدم» با «همان روز فهمیدم» را می‌سازد. پنج لایهٔ بعدی این راهنما همین‌ها هستند.

افسانهٔ رایج بازار این است که نصب یک افزونهٔ امنیتیِ قوی، پروندهٔ امنیت را می‌بندد. افزونه‌ها بخشی از دو لایهٔ وسط — دسترسی و پایش — را می‌پوشانند؛ هیچ افزونه‌ای جای به‌روزرسانی منظم و پشتیبانِ آزموده را نمی‌گیرد. مقایسهٔ گزینه‌های افزونه مطلب جداگانه‌ای در وبلاگ دارد؛ چیزی که نتیجهٔ آن مقایسه هم یکی است: افزونه روی لایه‌های پایینِ سالم معنا دارد، نه روی زیرساختی که خودش نشتی دارد.

چرا وردپرس این‌قدر هدف می‌شود؟ چون سهم بزرگش یعنی تعداد بزرگ مهاجم خودکار؛ اسکنرها حفره‌های شناخته‌شدهٔ افزونه‌های متروکه را انبوه دنبال می‌کنند. خبر خوب این است که همین حمله‌های انبوه، با لایه‌های پایه هم خنثی می‌شوند؛ مهاجم خودکار سراغ سایت مقاوم نمی‌ماند.

لایهٔ زیرساخت؛ هاست، PHP و نصب تمیز

زیرساخت، زمینی است که بقیهٔ لایه‌ها روی آن می‌ایستند. هاستی انتخاب کنید که منابع ایزوله بدهد، نسخهٔ تازهٔ PHP را پشتیبانی کند، محیط آزمایشی (استیجینگ) داشته باشد و پشتیبانِ سمت سرور بگیرد. به تجربهٔ ما روی هاست اشتراکیِ شلوغ، همهٔ لایه‌های بعدی با تأخیر کار می‌کنند؛ چون رفتار همسایه‌های سرور هم بخشی از ریسک شماست و حادثهٔ آن‌ها می‌تواند وقفهٔ شما بسازد.

HTTPS از روز اول قاعده است، نه انتخاب؛ گواهی معتبر و ریدایرکت کامل از نسخهٔ ناامن. بعد از نصب، خانه‌تکانی کنید: قالب‌ها و افزونه‌های بلااستفاده را حذف کنید نه اینکه فقط غیرفعال بگذارید؛ فایل‌های تستی و نسخه‌های قدیمی را از سرور بردارید. هر فایل اضافه، سطح تماس اضافه است.

دو نشانهٔ روشنِ زیرساخت ضعیف را جدی بگیرید: هاستی که وصله‌های امنیتی خودش را دیر می‌بندد و محیطی که تغییر بزرگ را فقط روی سایت زنده می‌توان آزمود. این دو نشانه را می‌بینید، اول زیرساخت را درست کنید؛ بقیهٔ لایه‌ها روی زمین سرو بدتر از بدون لایه است.

لایهٔ به‌روزرسانی؛ هسته، افزونه‌ها و قالب

به‌روزرسانی یک رویداد نیست، یک ریتم است: یک پنجرهٔ هفتگی ثابت که در آن هسته، افزونه‌ها و قالب به‌ترتیب تازه می‌شوند. ترتیب پیشنهادی ما برای تغییرهای بزرگ: اول بکاپ تازه، بعد محیط آزمایشی، بعد هسته، بعد افزونه‌ها و در آخر قالب. برای وصله‌های امنیتیِ فوری، انتظار پنجرهٔ هفتگی را نداشته باشید؛ همان روز اجرا شود.

سخت‌ترین قاعدهٔ این لایه، حذف است: افزونه‌ای که مدت‌ها به‌روز نشده و دیگر پشتیبانی نمی‌شود، هرچقدر هم کاربردی باشد، یک حفرهٔ زندهٔ شناخته‌شده روی سایت شماست. در پروژه‌های خودمان بیشترین نفوذهای افزونه‌محور را از افزونهٔ متروکه‌ای دیده‌ایم که حذف نشده بود، فقط غیرفعال شده بود. منبع دانلود رسمی هم بی‌استثنا؛ قالب و افزونهٔ نال‌شده میان‌بُر ورود مهاجم است و چرایی ناکامی افزونهٔ کرک‌شده را در مطلب جداگانه همان خوشه باز کرده‌ایم.

فهرست کامل اشتباه‌های رایج در آپدیت وردپرس — از بدون‌بکاپ به‌روزکردن تا شلوغ‌کردن پنجرهٔ آپدیت — مطلب مستقل دارد؛ در این لایه فقط سه چیز می‌ماند: ریتم ثابت، ترتیب درست و حذفِ متروکه‌ها. همین سه، بخش بزرگی از حفره‌های شناخته‌شده را می‌بندد.

لایهٔ دسترسی؛ ورود دومرحله‌ای و حداقل اختیار

بیشتر نفوذهای جدی از حساب کاربری وارد می‌شوند، نه از حفرهٔ فنی. قاعدهٔ اول: ورود دومرحله‌ای برای همهٔ مدیران اجباری و برای نویسندگان و ویراستاران به‌شدت توصیه‌شده؛ با اپلیکیشن رمز یک‌بارمصرف و کدهای بازیابی که در جای امن نگه‌داری می‌شوند، نه در فایل اکسل مشترک. قاعدهٔ دوم: مدیر یکتا؛ هر سایت یک مدیر واقعی داشته باشد و بقیه با نقش‌های سبک‌تر کار کنند.

حداقل اختیار یعنی هر حساب فقط به اندازهٔ کاری که می‌کند دسترسی داشته باشد: نویسندهٔ محتوا نیازی به نصب افزونه ندارد، ویراستار نیازی به تغییر قالب. هر فصل یک‌بار فهرست حساب‌ها را مرور کنید و حساب‌های بلااستفاده — مخصوصاً حساب همکارانی که رفته‌اند — را حذف کنید. رمزها در مدیر رمز تیمی بماند و تلاش‌های ورود ناموفق محدود شود.

جزئیات فنی‌تر این لایه — از تغییر مسیر ورود تا محدودسازی جلسه‌ها و ایمن‌سازی صفحهٔ ورود — در چک‌لیست بیست‌موردی مخصوص همان موضوع آمده است؛ سیاست این مقاله ساده‌تر است: حساب کمتر، نقش کوچک‌تر، ورود دومرحله‌ای روشن. همین سه، بخش بزرگ دزدیدن کلیدها را می‌بندد.

لایهٔ پشتیبان؛ بکاپ سه‌لایه و آزمون بازگردانی

پشتیبان، بیمهٔ چهار لایهٔ قبل است: وقتی همهٔ درها به هر دلیلی باز شده باشند، برگشت‌پذیری تنها امید شماست. چه چیزی؟ هر سه چیز: فایل‌ها، پایگاه داده و پیکربندی. کجا؟ دست‌کم دو مقصد جدا از سرور اصلی. با چه ریتمی؟ متناسب با سرعت تغییر سایت: فروشگاه با سفارشِ روزانه باید مکررتر از بلاگ هفتگی پشتیبان بگیرد.

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

روند کامل پشتیبان‌گیری — انتخاب مقصد، تنظیم نگهداری و ریتم — و هم‌چنین علت‌های پنهانی که باعث می‌شود ریستور نتیجه ندهد، در دو راهنمای جداگانهٔ همین خوشه آمده است؛ در نقشهٔ لایه‌ای این مقاله، سهم بکاپ فقط سه خط است: سه‌لایه بگیر، بیرون از سرور نگه دار، بازگردانی را آزمایش کن.

لایهٔ پایش؛ نشانه‌های زودهنگام و بودجهٔ زمان ماهانه

پایش یعنی بدانید چه اتفاقی دارد می‌افتد، نه بعد از هفته‌ها. نشانه‌های زودهنگامی که هر ماه باید مرور شود: حساب کاربری تازه‌ای که شما نساخته‌اید، فایل‌های تازه در پوشه‌های اصلی، جهش یا افت عجیب ترافیک روی صفحاتی که تا دیروز عادی بودند، هشدار سرچ‌کنسول دربارهٔ بدافزار و هر تغییر ناخواسته در محتوای صفحات کلیدی. اسکن بدافزار دوره‌ای هم جزء ثابت این مرور است؛ روش کامل اسکن، مطلب مستقل خودش را دارد.

حالا بودجهٔ زمان. جدول زیر ریتم بازبینی هر لایه و زمان تقریبی‌اش را کنار هم می‌گذارد:

لایهآهنگ بازبینیکار اصلیزمان تقریبی
زیرساختفصلینسخهٔ PHP، وضعیت هاست، سلامت HTTPS۱۵ تا ۳۰ دقیقه
به‌روزرسانیهفتگیهسته، افزونه، قالب؛ حذف متروکه‌ها۲۰ تا ۴۰ دقیقه
دسترسیفصلیمرور نقش‌ها، حذف حساب‌های بلااستفاده، ورود دومرحله‌ایحدود ۳۰ دقیقه
پشتیبانهفتگی + آزمون فصلیسلامت نسخه‌ها؛ یک بازگردانی آزمایشی۲۰ دقیقه؛ آزمون حدود ۱ ساعت
پایشماهانهاسکن بدافزار، مرور نشانه‌ها و هشدارهاحدود ۳۰ دقیقه

زمان‌ها برآورد تجربی ما برای یک سایت معمولی است؛ برای فروشگاه یا سایت چندنفره بیشتر می‌شود.

جمع این ستون، همان وعدهٔ ابتدای مقاله است: حدود یک تا دو ساعت در ماه برای یک سایت معمولی. ساعت‌های کم‌تری هم می‌شود شروع کرد، ولی نصف‌کردنِ این وقت معمولاً یعنی نصف‌کردنِ لایه‌ها؛ و لایهٔ حذف‌شده، همان حلقهٔ ضعیفی است که حمله از آن وارد می‌شود.

نقشهٔ اجرای ۳۰ روزه و جمع‌بندی

سه سطح دفاع و سهم هرکدام
برای شروع، سطح حداقلی را همین ماه ببندید و هر فصل یک پله بالا بروید.

سی روز، ترتیب پیشنهادی ما: هفتهٔ اول زیرساخت و به‌روزرسانی — خانه‌تکانی افزونه‌های بلااستفاده، پنجرهٔ هفتگی آپدیت، بررسی PHP و HTTPS. هفتهٔ دوم دسترسی — ورود دومرحله‌ای برای مدیران، مدیر یکتا، پاکسازی نقش‌ها. هفتهٔ سوم پشتیبان — بکاپ کامل، مقصد دوم بیرون از سرور و اولین آزمون بازگردانی. هفتهٔ چهارم پایش — اسکن بدافزار، روشن‌کردن هشدارها و نوشتن سند یک‌صفحه‌ایِ «اگر هک شدیم چه می‌کنیم». از ماه دوم، فقط ریتم جدول بخش قبل را نگه دارید.

اگر می‌خواهید بخش اجرایی سنگین‌تر را از دوش تیم بردارید، سوئیت همین کار را با زیرساخت امنیت سازمانی — امضای HMAC-SHA256، رمزنگاری AES-256 و بیش از ۹۰۰ تست خودکار — انجام می‌دهد و پلن پیشرو، انتشار خودکار محتوا را با اپراتور اختصاصی می‌چیند؛ دموی رایگان، سنجش این ادعا روی دادهٔ خودتان است، نه وعده.

جمع‌بندی در سه خط: امنیت وردپرس نه یک خرید است نه یک نصب؛ پنج لایه است که با هم کار می‌کنند و بدون ریتم، ماه‌به‌ماه فرسوده می‌شوند. اگر نمی‌دانید کدام لایهٔ شما ضعیف است، ممیزی رایگان دامنه نقطهٔ شروع کم‌ریسکی است؛ نقشهٔ کامل خوشه در هاب امنیت و پشتیبان‌گیری گرد آمده و شواهد اثر اجرای منظم در کیس‌های ثبت‌شدهٔ سوئیت آمده است. امنیت، همان ریتم خسته‌کنندهٔ ماهانه است؛ هیچ میان‌بُری برایش وجود ندارد و خوشبختانه لازم هم ندارد.

دموی رایگان پلتفرم

پلن پیشرو — ۷٫۹ میلیون تومان/ماه (انتشار خودکار + اپراتور)

دموی رایگان پلتفرم

رصد ما، رشد شما.

سؤالات پرتکرار

سایت من همین حالا بدون هیچ‌کدام از این لایه‌هاست؛ از کجا شروع کنم؟

ترتیب پیشنهادی ما: اول به‌روزرسانی هسته و افزونه‌ها، بعد ورود دومرحله‌ای برای همهٔ مدیران و در همان هفتهٔ اول یک بکاپ کامل بیرون از سرور؛ همین سه کار، خطر فوری را تا حد زیادی می‌بندد.

بکاپ روی همان هاست کافی است؟

نه؛ اگر سرور آسیب ببیند نسخهٔ روی سرور هم می‌رود. دست‌کم یک مقصد بیرونی جدا و آزمون بازگردانی دوره‌ای لازم است؛ ریتم کامل در راهنمای بکاپ منظم آمده.

ورود دومرحله‌ای برای نویسنده‌ها هم لازم است؟

برای مدیران اجباری و برای نویسندگان به‌شدت توصیه‌شده؛ حساب نویسنده هم اگر بشکند، راهی برای انتشار محتوای آلوده با نام شما باز می‌کند.

نگهداری امنیتی ماهانه چقدر وقت می‌برد؟

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

افزونهٔ امنیتی جای کدام لایه را می‌گیرد؟

بیشتر افزونه‌ها سهم لایهٔ دسترسی و پایش را می‌پوشانند؛ هیچ افزونه‌ای جای به‌روزرسانی منظم و پشتیبانِ آزموده را نمی‌گیرد. مقایسهٔ گزینه‌ها در مطلب افزونه‌های امنیتی آمده است.