به طور خلاصه، wp_redirect و wp_safe_redirect توابعی هستند که برای هدایت کاربران به یک URL متفاوت استفاده میشوند. با این حال، تفاوت اساسی بین این دو مربوط به امنیت است.
wp_redirect: یک تابع تغییر مسیر ساده که یک هدر HTTP خام را به مرورگر ارسال میکند و به آن دستور میدهد تا URL دیگری را بارگیری کند. هیچ بررسی روی URL ارسال شده به آن انجام نمیدهد. منطق این است: اگر به یک URL در یک منبع نامعتبر هدایت میشوید، یک خطر امنیتی بالقوه وجود دارد. مثلا:
$url = $_GET['redirect_url'];
wp_redirect($url);
exit;
در این مثال، اگر $_GET['redirect_url'] به درستی تایید یا پاکسازی نشده باشد، میتواند برای هدایت کاربران به یک سایت مخرب دستکاری شود.
wp_safe_redirect: از طرف دیگر این تابع به گونهای طراحی شده است که امنیت بیشتری داشته باشد. قبل از انجام تغییر مسیر، یک سری بررسیها را روی URL انجام میدهد تا از ایمن بودن آن اطمینان حاصل کند. بررسی میکند که آیا URL محلی است، آیا از همان پروتکل صفحه فعلی استفاده کرده، و تحت همان میزبان است؟ اگر هر یک از این بررسیها ناموفق باشد، تغییر مسیر انجام نمیشود. این ساختار به شکل زیر است:
$url = $_GET['redirect_url'];
wp_safe_redirect($url);
exit;
در حالی که این عملکرد یک لایه امنیتی اضافه میکند، پیش از هر اقدامی مهم است که ورودی کاربر را قبل از استفاده از آن در ریدایرکت برای جلوگیری از هرگونه مشکل امنیتی احتمالی، مورد اعتبارسنجی قرار دهیم.
به طور خلاصه، اگر ریدایرکت به آدرسی است که کنترل کامل روی آن داشته و به آن اعتماد دارید، wp_redirect احتمالا کفایت میکند. با این حال، اگر URL از ورودی کاربر یا هر منبع غیرقابل اعتمادی میآید، استفاده از wp_safe_redirect برای کمک به کاهش خطرات امنیتی ایمنتر است.