Навигация в веб-прокси на PHP: относительные URL, cookie и источники
Планируйте URL ресурсов, навигацию, cookie и границы источника, превращая загрузку на PHP в веб-прокси для браузера.
Прежде чем добавлять ещё больше переписывания в загрузчик на PHP, выберите, куда должен идти следующий ресурс. Документ, загруженный с https://destination.example/catalog/ и возвращённый на https://viewer.example/browse?url=..., может содержать:
<img src="photo.jpg">
<a href="details/42">Details</a>Браузер разрешает эти ссылки с помощью документа, полученного в просмотрщике. То, что PHP загрузил исходные байты, не устанавливает удалённую базу.
Элемент base может направлять относительные URL к назначению, но эти запросы могут затем идти напрямую из браузера к назначению. Чтобы вместо этого провести каждый запрос через PHP, нужны прокси-URL и более широкая модель маршрутизации:
| Ресурс или действие | Требуемая обработка |
|---|---|
| Ссылки и изображения | Разрешите их относительно удалённого документа и создайте нужный маршрут |
| Импорт CSS и ресурсы | Используйте удалённую базу таблицы стилей |
| Формы | Сохраните метод и отправленные данные |
| Перенаправления | Держите навигацию в разрешённой модели |
| Запросы, созданные скриптами | Обрабатывайте URL, отсутствующие в исходном HTML |
Несколько замен регулярными выражениями не могут обещать общую совместимость с сайтами, насыщенными скриптами. Для известного публичного документа может быть достаточно отключить навигацию, разрешить прямые ссылки или направить поддерживаемое подмножество через просмотрщик. Сохраняйте фактические типы медиа, а не считайте каждый ответ HTML.
Возврат недоверенной разметки с вашего домена также даёт ей браузерную природу просмотрщика, а не идентичность загруженного сайта. Изолируйте эти документы от страниц учётной записи и администрирования. Определите удалённые cookie для каждого посетителя, разрешённые пересылаемые заголовки и цели перенаправления; общая банка cookie может смешивать удалённые входы.
Закрепите эту границу поддержки, прежде чем предлагать сеанс просмотра. Для обычного просмотра через другой выход собственный прокси-интерфейс браузера, например настройки HTTP/SOCKS в Firefox, сохраняет целевой URL и модель источника браузера без необходимости этого слоя загрузки и повторной публикации. Для отдельной проверки публичного сайта список бесплатных прокси даёт кандидатов в конечные точки; согласуйте протокол в настройках браузера.