در قسمت اول از سلسله مطالب مرتبط با امنیت وردپرس، ابتدا به صورت مقدماتی با مفهوم امنیت سایت آشنا شدیم و مؤلفههای تأثیرگذار بر امنیت وبسایت را مرور کردیم. در قسمت دوم نیز به بررسی اجمالی انواع آسیبپذیریهای وردپرس پرداخته شد. در این قسمت، با سطوح دسترسی فایلها و پوشهها در وردپرس و تنظیمات امنیتی آنها آشنا خواهیم شد.
فهرست مطالب:
یکی از ویژگیهای جالب وردپرس، تعیین سطح دسترسی فایلها و پوشهها توسط وبسرور و کاربران مختلف یک سایت است. همانطور که قبلتر مطرح شد، اگر شما از هاست اشتراکی برای میزبانی سایت وردپرسی خود استفاده میکنید، ممکن است آلوده شدن سایر سایتهای همسایه منجر به آلوده شدن سایت شما نیز شود. بنابراین مدیریت دسترسی فایلها، علیالخصوص قابل نوشتن بودن یا نبودن فایلها بسیار مهم است.
به صورت کلی میتوان گفت: تا جایی که آسیبی به راهبری و یا اجرای سایتتان نمیزند، دسترسی فایلها و پوشهها را محدود کنید!
دسترسی فایلها در پوشه اصلی
تمامى فایلهاى داخل پوشه اصلی یا همان روت سایت میبایست فقط توسط اکانت شما قابل نوشتن باشند (دسترسى 400). در این پوشه یک استثنا وجود دارد و آن هم فایل htaccess است. هسته وردپرس برای بازنویسی ساختار پیوندهای یکتا و نیز برخی افزونهها (مانند افزونههای کش و … ) برای مدیریت مسیرها و فایلها نیاز دارند که تغییراتی را در این فایل ایجاد کنند. لذا لازم است توسط وبسرور نیز قابل نوشتن باشد (دسترسى 440).
دسترسی فایلها در پوشه wp-admin
تمامی فایلهای مرتبط با قابلیتهای پنل ادمین وردپرس درون این پوشه قرار دارند. همه این فایلها میبایست فقط توسط اکانت شما قابل نوشتن باشند (دسترسى 400).
اضافه کردن یک لایه امنیتى اضافى براى پوشه wp-admin مىتواند راهکار نسبتاً مناسبى باشد. به این ترتیب، فرد خرابکار یا باتهای مورد استفاده وی، بایست یک لایه رمز عبور دیگر را نیز مورد حمله قرار دهند که ذاتاً احتمال نفوذ به سایت را کاهش میدهد.
البته باید توجه داشته باشید که تنظیم ساده یک رمز عبور از طریق فایل منیجر هاست، اگرچه میتواند دست هکرها را یک لایه کوتاهتر کند اما به خودی خود میتواند باعث بروز مشکلات جدی در برخی قابلیتهای پنل ادمین شود. به عنوان مثال، برخی پردازشهاى مرتبط با wp-admin/admin-ajax.php ممکن است دچار مشکلاتی شود. بنابراین توصیه میشود به جای کل پوشه wp-admin فقط بر روی فایل ورود وردپرس یعنی wp-login.php رمز عبور جداگانه تنظیم شود.
تنظیم رمز عبور ثانویه برای پوشه wp-admin
با توجه به توضیحات بالا، به دو شیوه کلی میتوان این لایه امنیتی اضافی را ایجاد کرد:
الف) روش ساده
در این روش کافیست به فایل منیجر هاست خود مراجعه کرده و روی پوشه wp-admin کلیک راست کنید. سپس مشابه تصویر زیر از منوی باز شده، گزینه Password Protect را انتخاب کنید.
همچنین میتوانید در کنترل پنل هاست خود به قسمت Directory Privacy رفته و مستقیماً روی پوشه wp-admin رمز عبور تنظیم کنید.
ب) روش اصولی (پیشنهادی)
اصولیترین روش افزودن یک رمز عبور اضافی به wp-login.php استفاده از فایل htpasswd است. مراحل کار را قدم به قدم پیش میرویم:
۱) ابتدا با استفاده از یک ابزار سازنده فایل htpasswd مثل این سایت، رمز عبور مدنظر خود را ایجاد کنید. به عنوان مثال برای نام کاربری reza و رمز عبور qalekhani خروجی این رمزساز به صورت reza:{SHA}sZvKVgGxv2JavPhCtbZ3FZdIh6g=
است. در این مثال، رمز عبور مدنظر ما با استفاده از الگوریتم SHA رمزنگاری شده است.
۲) این کد را درون فایلی با نام htpasswd. در پوشه اصلی وردپرس ذخیره کنید.
۳) کدهای زیر را درون فایل htaccess. پوشه اصلی وردپرس ذخیره کنید.
# Stop Apache from serving .ht* files
<Files ~ "^\\.ht">
Order allow,deny
Deny from all
</Files>
# Protect wp-login.php
<Files wp-login.php>
AuthUserFile ~/mysite/.htpasswd
AuthName "Private access"
AuthType Basic
require user reza
</Files>
بلاک اول کد بالا، وبسرور آپاچی را از سرویسدهی به فایلهایی که ابتدای نام آنها با ht. باشد منع میکند. به این ترتیب خیالمان راحت خواهد بود که این فایلها از طریق URL فایل قابل فراخوانی نیستند. در بلاک دوم نیز، با استفاده فایل رمز عبوری که تولید کردیم، یک لایه امنیتی اضافه برای فایل wp-login.php تعریف کردهایم.
دو نکته در استفاده از این کد حائز اهمیت است: 1) در کدهای بالا، فایل رمز عبور من در پوشه mysite داخل پوشه روت هاست قرار دارد. 2) نام کاربری روبروی عبارت require user برابر با همان نام کاربری است که در مرحله ساخت رمز عبور استفاده شد.
دسترسی فایلها در پوشه wp-includes
با اندکى تغییرات، یک لایه امنیتى اضافى مشابه حالت فوق را مىتوانیم براى پوشه wp-includes نیز اعمال کنیم. منطق کلی این لایه امنیتی بر این اساس استوار است که لزومی ندارد اسکریپتهای درون این پوشه، در جایی غیر از محل فعلی خود قابل دسترسی و اجرا باشند. پس با استفاده از ماژول mod_rewrite وبسرور آپاچی، میتوانیم اجرای آنها را محدود کنیم.
کافیست قطعه کدهای زیر را درون فایل htaccess. محل نصب وردپرس قرار دهیم:
# Block the include-only files.
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>
# BEGIN WordPress
تذکر: برای این که مطمئن شوید این کدها در آینده توسط وردپرس دستخوش تغییر یا حذف نمیشوند، دقت کنید که حتماً خارج از بلاک BEGIN WordPress و END WordPress قرار گیرند.
دسترسی فایلها در پوشه wp-content
فایلهای درون پوشههای این قسمت عمدتاً توسط کاربر تأمین شده است. فایلهای آپلودی، پوستهها، افزونهها، فایلهای زبان و … از جمله محتویات این پوشه است و لازم است توسط اکانت شما و وبسرور، قابل نوشتن باشند (دسترسی 440).
فایلهای درون پوشه wp-content/themes عبارتند از تمامى فایلهای پوستههای وبسایت وردپرسی شما. در صورتی که تمایل دارید با استفاده از ادیتور داخلی وردپرس بتوانید این فایلها را ادیت کنید، لازم است دسترسی فایلهای درون این پوشه در سطح 440 باشد تا وبسرور بتواند آنها را تغییر دهد. اما چنانچه تمایل ندارید از ادیتور داخلی وردپرس استفاده کنید (که توصیه حرفهای هم به همین قضیه است)، کلیه فایلها میبایست فقط توسط اکانت شما قابل نوشتن باشند؛ یعنی دسترسی 400 برای این فایلها کفایت میکند.
نکته: جهت حفظ پیوستگی ساختار سایت، توصیه میشود از ویرایش فایلهاى افزونهها توسط ادیتور داخلی وردپرس خودداری کنید. زیرا بر خلاف پوستههای وردپرس که از مفهومی به عنوان پوسته فرزند استفاده میکنند، افزونههای وردپرسی چنین قابلیتی ندارند و اعمال تغییرات در هسته افزونهها موقتی است؛ لذا با اولین آپدیت افزونه، از بین خواهد رفت. پس کلیه فایلهای درون پوشه wp-content/plugins بهتر است دسترسى 400 داشته باشند.
افزایش امنیت فایل wp-config.php
راههای متعددی برای افزایش امنیت مهمترین فایل وردپرس ما وجود دارد که سادهترین آنها تنظیم سطح دسترسی فایل روی 400 یا نهایتاً 440 است. اما بعضی روشهای دیگر نیز وجود دارد که با استفاده از آنها را میتوانیم امنیت این فایل را تقویت کنیم.
۱) انتقال فایل wp-config.php: یکى از این راهها، انتقال فایل wp-config.php به خارج از فضاى پوشه public_html است. به این ترتیب، فایل تنظیمات وردپرس ما توسط وبسرور قابل دسترسى است اما چون خارج از فضای عمومی هاست قرار دارد، توسط سایرین قابل دسترسی نخواهد بود.
فایل wp-config.php را میتوانید فقط یک پوشه بالاتر از محل نصب وردپرس خود قرار دهید. به عنوان مثال اگر وردپرس شما در مسیر username/mysites/test نصب شده است، شما مىتوانید یا فایل تنظیمات را درون پوشه test نگه دارید (محل پیشفرض) و یا آن را به پوشه mysites انتقال دهید.
۲) انتقال محتواى حساس داخل wp-config.php: راه دیگرى که مىتوان براى افزایش امنیت فایل تنظیمات وردپرس انجام داد، انتقال اطلاعات حساس درون این فایل به محلى خارج از دسترس عموم (public_html) است. این اطلاعات حساس شامل اطلاعات دیتابیس ونیز salt هاى وردپرس هستند. کلیت فرآیند به این صورت است که اطلاعات مدنظر را درون یک فایل php جداگانه منتقل کرده و با استفاده از توابع include یا require این فایل را درون wp-config.php فراخوانى مىکنیم.
۳) استفاده از htaccess: اگر وبسرور مورد استفاده شما از htaccess. پشتیبانى مىکند، با استفاده از قطعه کد زیر مىتوانید امنیت wp-config.php را افزایش دهید. این کد را در اولین خط فایل htaccess. پوشه محل نصب وردپرس قرار دهید.
<Files "wp-config.php">
Require all denied
</Files>
آپدیت خودکار و دسترسی فایلها
در صورتی که قابلیت آپدیت خودکار را برای وردپرس خود فعال کرده باشید، کلیه فایلها دسترسی 644 و کلیه پوشهها دسترسی 755 پیدا میکنند.
جمعبندی
در سومین قسمت از مجموعه مقالات افزایش امنیت سایت وردپرسی با دسترسیهای لازم برای فایلها و پوشههای مختلف در این پلتفرم آشنا شدیم و راهکارهایی را مرور کردیم که امنیت برخی از فایلها و پوشههای مهم و حیاتی وردپرس را با تنظیمات سادهای افزایش دهیم. در قسمت بعدی، ادامه نکات مرتبط با افزایش امنیت وردپرس را خواهیم آموخت.