كيف يمكنني منع برنامج نصي PHP المضمن من تغيير عنوان URL الموقع؟

StackOverflow https://stackoverflow.com/questions/1091275

  •  11-09-2019
  •  | 
  •  

سؤال

أنا بما في ذلك برنامج نصي PHP يغير عنوان URL.

// index.php
ob_start();
include "script.php";
   // This script redirects using  header("Location:");
$out = ob_get_clean();
// I use the $out data for calculations
echo $out;

هل هناك طريقة بسيطة لمكافحة أو التراجع عن هذا إعادة التوجيه غير المرغوب فيه؟ ماذا عن:

header("Location: index.php");   // redirect back to self

ولكن هذا يسبب حلقة إعادة توجيه لا نهاية لها ... أي أفكار؟

أو هل هناك طريقة لتجريد مكالمات الرأس () من المخزن المؤقت بقيمة $، مما يمنعه من أي وقت مضى الوصول إلى العميل؟

هل كانت مفيدة؟

المحلول

فقط للمراجع المستقبلية. اعتبارا من PHP 5.3 هناك وظيفة جديدة تسمى header_remove () مما يساعد في التعامل مع مثل هذه الحالات.

نصائح أخرى

يمكنك محاولة الكتابة فوق حقل رأس هذا بقيمة غير صالحة، مثل:

header('Location: ', true);

لكنني لا أعرف كيف يتفاعل العملاء على ذلك.

ليس هناك حقا طريقة جيدة للقيام بذلك. شيئين تتبادر إلى الذهن:

  1. افتح Script.php كملف نصي، قم بتعليم أوامر أي رأس () ثم Eval () النتيجة.
  2. صدى المساحة قبل أن تتضمن Script.php ثم اعتراض التحذير الذي ينشئه PHP حول إصدار رأس () بعد بدء تشغيل الإخراج بالفعل. كنت بحاجة إلى صدى المساحة قبل التخزين المؤقت الإخراج الخاص بك.

ماذا عن تضمين الملف أولا كمتغير مع file_get_contents(), ، تجريد الرؤوس غير المرغوب فيها ثم تشغيله مع رمز PHP (لن أذكر كلمة الشر المستخدمة لتحليل سلسلة PHP كصفوف PHP)؟

إذا لم يكن لديك PHP5.3 تحت تصرفكم (ربما لا)، إجابة gumbo لا يعمل ولا تريد استخدام Eval، ثم الخيار الآخر الوحيد الذي يمكنني رؤيته، هو استخدام تيارات. وبعد هذا ولكن بعد آخر، أكثر مرونة ولكن معقدة، شكل من أشكال التقييم. تيارات، جنبا إلى جنب مع المميز, ، وستتمكن من التخلص من دعوة الوظيفة هذه بسيطة:

require 'no-header://script.php';

نظرا لأن لديك نص كامل في سلسلة قبل إخراجه، فيمكنك بسيطة إزالة الرؤوس التي تريدها مع البحث واستبداله (باستخدام Regex على سبيل المثال).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top