Как мне запретить включенному 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

Но это вызывает бесконечный цикл перенаправления...есть какие-нибудь идеи?

Или есть способ удалить вызовы header() из буфера $out, не позволяя ему когда-либо достичь клиента?

Это было полезно?

Решение

Просто для будущих ссылок.Начиная с PHP 5.3, появилась новая функция, вызываемая header_remove() заголовок удален() что помогает справляться с подобными ситуациями.

Другие советы

Вы могли бы попытаться перезаписать это поле заголовка недопустимым значением, например:

header('Location: ', true);

Но я не знаю, как клиенты реагируют на это.

На самом деле хорошего способа сделать это не существует.На ум приходят две вещи:

  1. Открыть script.php в виде текстового файла удалите все команды header(), а затем выполните eval() результат.
  2. Повторите пробел перед включением script.php а затем перехватите предупреждение, которое PHP генерирует о выдаче header() после того, как вывод уже начался.Вам нужно было бы повторить пробел перед буферизацией вывода.

Как насчет того, чтобы сначала включить файл в качестве переменной с file_get_contents(), удаляя ненужные заголовки и затем запуская их с помощью PHP-кода (я не буду упоминать злое слово, используемое для разбора PHP-строки как PHP-кода)?

Если в вашем распоряжении нет PHP5.3 (скорее всего, у вас его нет), Ответ Гамбо не работает, и вы не хотите использовать eval, тогда единственный другой вариант, который я вижу, - это использование Стримы.Однако это еще одна, более гибкая, но сложная форма eval.Потоки, объединенные с токенизатор, и вы сможете избавиться от вызова этой функции с помощью простого:

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

Поскольку у вас есть полный текст в строке перед ее выводом, вы можете просто удалить нужные заголовки с помощью поиска и замены (например, используя регулярное выражение).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top