آشنایی با ثابت ABSPATH در وردپرس

تاریخ: 02 شهریور 1399

ثابت های php در وردپرس نقش عمده ای دارند.

یکی از ثابت های مهم در هسته وردپرس، ثابت ABSPATH می باشد. (مخفف absolute path)

این ثابت در ابتدای فایل لودر وردپرس یا wp-load.php تعریف شده و برای اینکلود کردن فایل های مختلف درونی استفاده می شود.

/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', __DIR__ . '/' );
}

همچنین در انتهای فایل کانفیگ یا پیکربندی وردپرس یا همان فایل wp-config.php نیز باز تعریف می شود.

چون فایل wp-load قبل از wp-config می آید و به خاطر همین ثابت ABSPATH از قبل تعریف شده است. لذا اصولا حذف یا ویرایش ثابت در wp-config مشکلی ایجاد نمی کند.

ولی بعضی از پلاگین ها ممکن است فایل کانفیگ را مستقیما و بدون wp-load اینکلود کنند. در اینصورت حضور این ثابت در فایل کانفیگ ضروری است و چنانچه خودش نیز به صورت کامنت در بالای دستور ذکر کرده است، به هیچ وجه نباید تعریف این کد در wp-config را حذف یا ویرایش کنیم. رفرنس


/* That's all, stop editing! Happy publishing. */

/** Absolute path to the WordPress directory. */
if ( ! defined( 'ABSPATH' ) ) {
define( 'ABSPATH', __DIR__ . '/' );
}

 

اگر در یکی از فایل های پلاگین یا تم، این قطعه کد را پرینت کنیم، خواهیم دید که آدرس مطلق روت وردپرس را چاپ می کند. مثلا وردپرس من روی لوکال و در پوشه app نصب شده است.


echo ABSPATH; //output: C:\wamp64\www\app/

 

در مورد نحوه استارت وردپرس می توانیم بگوییم که فایل wp-load می آید فایل wp-config را اجرا می کند و آن نیز فایل wp-settings را لود می کند تا محیط اجرای وردپرس آماده شود.

استفاده از ثابت APSPATH برای امنیت دسترسی به فایل های php

زمانی که وردپرس در مسیر اصلی خودش (WordPress context) لود شود، ثابت ABSPATH تعریف می شود و قابل دسترسی خواهد بود.

ولی اگر یک نفر یک فایل php موجود در تم یا پلاگین خاص را به صورت مستقیم درخواست کند، وردپرس اجرا نمی شود و لذا این ثابت نیز تعریف شده نخواهد بود.

لذا می توانیم در تمام فایل های php مخصوصا فایل های تم ها و پلاگین ها، یک لایه ی امنیتی ایجاد کنیم و وجود این ثابت را بررسی کنیم.

اگر این ثابت تعریف شده بود، وردپرس در مسیر خودش اجرا شده است ولی اگر این ثابت تعریف نشده بود، کاربر در حال دسترسی مستقیم به فایل php جاری است و اجرای برنامه متوقف می شود:

defined( 'ABSPATH' ) || exit;

 

بهتر است این کد را در ابتدای تمام فایل های php تعریف کنیم تا از دسترسی مستفیم کاربران کنجکاو به فایلها جلوگیری کنیم.

دیدگاهتان را بنویسید

طراحی افزونه وردپرس