بیشتر سایتهای هکشدهای که برای پاکسازی به دستم رسیدهاند، قربانی حملهای پیچیده نبودهاند. یک افزونه که دو سال بهروز نشده بود، یک قالب نالشده از سایتی ناشناس، یا رمز عبوری مثل نام سایت بهعلاوه ۱۲۳. هکرها معمولاً سایت شما را انتخاب نمیکنند؛ رباتهایشان هزاران سایت را برای همین ضعفهای شناختهشده میگردند و هر کدام را که پیدا کنند، باز میکنند.
خبر خوب این است که بستن همین درها کار سختی نیست. این پانزده کار را روی هر سایتی که تحویل میدهم یا پشتیبانیاش را دارم انجام میدهم. ترتیبشان هم بر اساس اهمیت است؛ اگر وقت کمی دارید، از بالا شروع کنید.
این مقاله صفحه اصلی موضوع امنیت در این سایت است و هر جا لازم بوده، به نوشتههای مرتبط لینک دادهام.
پایه کار
۱. بهروزرسانی منظم
هسته، قالب و افزونهها. بیشتر آسیبپذیریها بعد از کشف، در نسخه جدید بسته میشوند و رباتها دقیقاً دنبال سایتهاییاند که این نسخه را نصب نکردهاند. من بهروزرسانیهای امنیتی جزئی هسته را خودکار میگذارم و بقیه را هفتهای یک بار، بعد از پشتیبانگیری، دستی انجام میدهم.
۲. خداحافظی با نسخههای نالشده
قالب و افزونه نالشده، یعنی نسخه پولی که قفلش شکسته شده، رایجترین راه آلوده شدن سایتهایی است که دیدهام. حتی اگر نسخهای که دانلود کردهاید آلوده نباشد، بهروزرسانی امنیتی دریافت نمیکند. اگر بودجه خرید نسخه اصلی را ندارید، جایگزین رایگان معتبر از مخزن وردپرس انتخاب کنید.
۳. پشتیبانگیری خودکار، خارج از هاست
پشتیبان آخرین خط دفاع است. روزانه یا هفتگی، بسته به اینکه سایت چقدر تغییر میکند. فروشگاهها روزانه. نسخهای از پشتیبان باید جایی غیر از همان هاست باشد و هر چند ماه یک بار بازگردانی آن را امتحان کنید. پشتیبانی که هرگز تست نشده، فقط یک امید است.
۴. حذف چیزهای بلااستفاده
افزونه غیرفعال هم کدش روی سرور است و اگر آسیبپذیر باشد، قابل سوءاستفاده است. قالبهای اضافه، افزونههایی که «شاید روزی لازم شود» و نسخههای قدیمی سایت در پوشهای مثل old یا backup را حذف کنید. یک قالب پیشفرض وردپرس را برای عیبیابی نگه دارید و بقیه را پاک کنید.
ورود و حسابهای کاربری
۵. رمز قوی و یکتا
برای همه حسابهایی که دسترسی مدیر یا ویرایشگر دارند. رمز را با مدیر رمز تولید و نگهداری کنید. رمز پیشخوان نباید همان رمز ایمیل یا هاست باشد.
۶. ورود دومرحلهای
اگر فقط یک کار از این فهرست انجام میدهید، این باشد. حتی اگر رمز نشت کند، بدون کد دوم کسی وارد نمیشود. افزونههای رایگان معتبر برای این کار هست و با اپهای احراز هویت معمولی کار میکنند.
۷. محدود کردن تلاش ورود
رباتها روزانه صدها رمز را روی صفحه ورود امتحان میکنند. یک افزونه که بعد از چند تلاش ناموفق IP را موقتاً مسدود کند، هم امنیت را بالا میبرد و هم بار سرور را کم میکند. اگر از XML-RPC استفاده نمیکنید، که بیشتر سایتها نمیکنند، آن را هم ببندید؛ مسیر محبوبی برای حدس رمز است.
۸. حداقل دسترسی لازم
هر کسی فقط نقشی را داشته باشد که برای کارش لازم است. نویسنده محتوا نقش «نویسنده» کافی است، کسی که سفارشها را پیگیری میکند «مدیر فروشگاه». حساب مدیر کل را به حداقل افراد بدهید و وقتی همکاری با فریلنسر یا شرکتی تمام شد، حسابش را همان روز حذف کنید. زیاد دیدهام حسابهای مدیر کل که سالها پیش برای یک طراح ساخته شده و هنوز فعال است.
۹. نام کاربری غیرقابلحدس
نام کاربری admin یا نام دامنه، نصف کار حدس زدن را برای مهاجم انجام میدهد. اگر حساب مدیرتان admin است، یک حساب مدیر جدید بسازید، با آن وارد شوید و قبلی را حذف کنید و محتوایش را به حساب جدید منتقل کنید.
سختسازی تنظیمات
۱۰. غیرفعال کردن ویرایشگر فایل
ویرایشگر قالب و افزونه در پیشخوان، اگر کسی به حساب مدیر برسد، یعنی اجرای هر کدی روی سرور. با یک خط در wp-config.php ببندیدش:
define( 'DISALLOW_FILE_EDIT', true );
۱۱. HTTPS همهجا
گواهی SSL را فعال کنید و همه آدرسها را به نسخه https ریدایرکت کنید. آدرس سایت در تنظیمات وردپرس هم باید با https و دقیقاً یک شکل باشد. ناهماهنگی در آدرس، مثلاً بزرگ و کوچک بودن حروف یا www، میتواند حلقه ریدایرکت بسازد؛ مشکلی که روی همین سایت هم یک بار پیش آمد.
۱۲. سطح دسترسی فایلها
پوشهها معمولاً 755 و فایلها 644. فایل wp-config.php را سختگیرانهتر کنید. هیچ پوشهای نباید 777 باشد؛ اگر افزونهای برای کار کردن 777 میخواهد، مشکل از افزونه یا تنظیمات هاست است.
۱۳. فایروال
فایروال در سطح DNS یا CDN، قبل از رسیدن درخواست به سرور، بیشترین اثر را دارد. افزونههای فایروال وردپرس هم کمک میکنند، اما خودشان روی همان سرور اجرا میشوند و بار اضافه دارند. یکی را انتخاب کنید، نه چند افزونه امنیتی همزمان؛ معمولاً با هم تداخل دارند و سایت را کند میکنند.
پایش و آمادگی
۱۴. پایش تغییرات و وضعیت سایت
یک سرویس پایش دسترسپذیری ساده، اگر سایت از دسترس خارج شود به شما خبر میدهد. بخش «امنیت» سرچ کنسول گوگل هم اگر گوگل بدافزاری در سایت تشخیص دهد هشدار میدهد. ثبت سایت در سرچ کنسول را جزو کارهای اول بعد از نصب قرار دهید؛ در راهنمای راهاندازی وردپرس فارسی به آن اشاره کردهام.
۱۵. برنامه بازیابی
قبل از اینکه اتفاقی بیفتد، بدانید چه کار میکنید. پشتیبان کجاست، دسترسی هاست با کیست، چه کسی پاکسازی را انجام میدهد. وقتی سایت هک شده است، وقت پیدا کردن رمز هاست نیست.
اشتباههایی که زیاد میبینم
نصب سه افزونه امنیتی با هم. فکر میکنند هرچه بیشتر، امنتر. نتیجه معمولاً سایت کند، قفل شدن خود مدیر پشت صفحه ورود و تداخلهایی است که پیدا کردنشان ساعتها طول میکشد.
پشتیبان روی همان هاست. وقتی هاست مشکل پیدا میکند یا حساب هاست هک میشود، پشتیبان هم با بقیه از دست میرود.
دادن رمز مدیر کل به هر کسی که کاری انجام میدهد. برای کار موقت، حساب موقت با نقش مناسب بسازید و بعد از اتمام کار حذفش کنید. رمز خودتان را به کسی ندهید.
نادیده گرفتن هشدارهای سرچ کنسول. گوگل گاهی زودتر از صاحب سایت متوجه آلودگی میشود؛ مثلاً وقتی صفحههای اسپم با کلمات قمار یا دارو به سایت تزریق شدهاند که در منوها دیده نمیشوند.
بهروزرسانی نکردن PHP. نسخه PHP هاست هم مثل وردپرس پشتیبانی امنیتی دارد و نسخههای قدیمی وصله دریافت نمیکنند. از پنل هاست نسخه را چک کنید و بعد از تست روی محیط آزمایشی، ارتقا دهید.
اگر سایت هک شد
اول آرام باشید و چیزی را عجولانه پاک نکنید. ترتیبی که من دنبال میکنم:
سایت را موقتاً در حالت تعمیر بگذارید تا بازدیدکنندگان آسیب نبینند. از وضعیت فعلی، حتی آلوده، یک نسخه بگیرید؛ برای پیدا کردن راه نفوذ لازم است. همه رمزها را عوض کنید: پیشخوان، هاست، پایگاهداده و FTP. کلیدهای امنیتی wp-config را هم عوض کنید تا همه نشستها بسته شوند.
بعد، اگر پشتیبان سالمی از قبل از نفوذ دارید، بازگردانی کنید. اگر نه، هسته وردپرس را با نسخه تمیز جایگزین کنید، افزونهها و قالب را از منبع رسمی دوباره نصب کنید و پوشه uploads را برای فایلهای PHP بگردید؛ در uploads هیچ فایل PHP نباید باشد. پایگاهداده را برای کاربران مدیر ناشناس و اسکریپتهای تزریقشده در محتوا بررسی کنید.
مهمتر از همه، راه نفوذ را پیدا کنید. اگر فقط پاک کنید و دری که از آن وارد شدهاند باز بماند، چند روز بعد دوباره همین وضع را دارید.
امنیت و سرعت
خیلی وقتها کسانی که سایتشان را امن کردهاند، شکایت میکنند که کند شده. معمولاً علتش چند افزونه امنیتی همزمان است که هر کدام در هر درخواست اسکن انجام میدهند. فایروال را به لایه CDN ببرید، یک افزونه امنیتی سبک نگه دارید و اسکنهای سنگین را به ساعات کمبازدید منتقل کنید. بیشتر درباره سرعت در افزایش سرعت وردپرس نوشتهام.
امنیت در افزونههای اختصاصی
اگر افزونه اختصاصی دارید یا برایتان نوشتهاند، کدش هم بخشی از سطح حمله است. پاکسازی ورودی، escape خروجی، بررسی دسترسی و nonce، چهار چیزی است که در هر بررسی کد دنبالش میگردم. جزئیاتش را در آموزش ساخت افزونه وردپرس آوردهام. برای فروشگاهها هم امنیت درگاه پرداخت نکات خاص خودش را دارد که در اتصال درگاه پرداخت به ووکامرس نوشتهام.
اگر نمیخواهید خودتان درگیرش شوید
نگهداری امنیتی کاری است که باید منظم انجام شود، نه یک بار. اگر وقتش را ندارید، پشتیبانی وردپرس شامل بهروزرسانی، پشتیبانگیری، پایش و رسیدگی به مشکلات امنیتی است. و اگر سایتتان همین حالا مشکل دارد، از صفحه تماس پیام بدهید.
امنیت هاست و ایمیل
امنیت سایت فقط به وردپرس محدود نیست. اگر کسی به پنل هاست یا ایمیلی که با آن وارد پیشخوان میشوید دسترسی پیدا کند، همه کارهای بالا دور زده میشود. ورود دومرحلهای را روی پنل هاست، پنل دامنه و ایمیل مدیر سایت هم فعال کنید. ایمیل مدیر را آدرسی بگذارید که واقعاً میخوانید؛ هشدارهای وردپرس و افزونههای امنیتی به همین آدرس ارسال میشوند.
سؤالهای رایج
وردپرس ذاتاً ناامن است؟
نه. هسته وردپرس توسط تعداد زیادی توسعهدهنده بررسی میشود و مشکلات امنیتیاش سریع وصله میشوند. بیشتر نفوذها از افزونهها و قالبهای قدیمی یا نالشده و رمزهای ضعیف است. مقایسه کاملتر با سایتهای کدنویسیشده را در وردپرس یا کدنویسی اختصاصی نوشتهام.
تغییر آدرس صفحه ورود لازم است؟
ضرری ندارد و حجم درخواستهای رباتها را کم میکند، اما جایگزین رمز قوی و ورود دومرحلهای نیست. اگر انجامش میدهید، آدرس جدید را جایی یادداشت کنید.
افزونه امنیتی پولی بخرم؟
برای بیشتر سایتها، نسخه رایگان یک افزونه معتبر بهعلاوه کارهای این فهرست کافی است. نسخه پولی وقتی ارزش دارد که قابلیت مشخصی مثل قوانین فایروال بهروز لحظهای را لازم داشته باشید.
این نوشته بخشی از راهنمای جامع راهاندازی وردپرس فارسی است. مقالههای مرتبط: کارهای ضروری بعد از نصب وردپرس، افزایش سرعت وردپرس.

2 دیدگاه