Как (безопасно) сделать перенаправление PHP

перенаправление PHP Программирование и разработка

перенаправление PHP

Перенаправления PHP — невероятно полезный инструмент, но они также могут быть опасными, если не реализованы правильно.

Если вы ознакомились с нашим введением в PHP 7.4 и с нашим руководством по созданию веб-сайта за 5 минут, вы знаете, что функцию header () можно использовать для простого перенаправления пользователя на другую страницу. Однако на самом деле использовать эту функцию не так просто, как кажется. В этом руководстве мы покажем вам, как сделать перенаправление PHP, которое не вызовет больших проблем в дальнейшем.

Основной метод перенаправления PHP

Большинство руководств скажут вам, что для перенаправления PHP вы можете просто использовать функцию header () в верхней части ваших страниц. Для этого вы используете функцию для отправки нового URL-адреса, например:

header('Location: '.$newURL.php);

Эта функция заголовка должна быть помещена перед передачей любого HTML или текста в браузеры ваших пользователей, поэтому она должна быть прямо вверху страницы. Это означает, что он должен стоять перед объявлением <! DOCTYPE>, перед любым кодом Java и перед любым кодом PHP. Затем он отправит пользователей на новый URL-адрес.

Хотя это может показаться простым, когда дело доходит до функции header (), простота кода может привести разработчиков к ложному чувству безопасности. Итак, давайте посмотрим, как правильно использовать эту функцию.

Die() and Exit ()

Во-первых, вы должны использовать модификатор die () или exit () каждый раз, когда используете перенаправление. Таким образом, проблема в том, что сканеры и боты могут игнорировать заголовки, и поэтому страница, с которой, как вы думали, вы перенаправлялись, полностью доступна для них. Иными словами, если вы используете перенаправление заголовка для защиты определённой страницы, оно не предлагает никакой защиты.

Вот почему вы должны прекратить обработку остальной части страницы, если перенаправление игнорируется. Для этого нужно добавить die () или exit () после перенаправления:

header("Location: .$newURL.php");
die();

Относительные и абсолютные URL

Далее поговорим об относительных и абсолютных URL-адресах в редиректах. RFC 7231 позволяет использовать оба, но при использовании относительных перенаправлений следует соблюдать особую осторожность. Это потому, что некоторые разработчики веб-сайтов сопоставляют и переименовывают страницы PHP. Это означает, что если вы работаете над своим PHP через конструктор веб-сайтов, вы можете нарушить все свои перенаправления.

К сожалению, на данный момент нет реального способа обойти эту проблему, кроме как внимательно следить за тем, куда указывают ваши перенаправления.

Коды состояния

Третья проблема стандартных перенаправлений PHP заключается в том, что оператор «местоположения» PHP по-прежнему возвращает код HTTP 302. Вы не должны позволять ему этого делать, потому что многие веб-браузеры реализуют этот код таким образом, который полностью расходится с тем, как он должен работать: они по существу используют команду GET вместо выполнения «настоящего» перенаправления.

Поэтому лучший способ создания перенаправлений PHP — указать возвращаемый код. К сожалению, правильный код для использования вызывает разногласия. HTTP 301 указывает на постоянное перенаправление, которое может вызвать проблемы с восстановлением исходной страницы. HTTP 303, к сожалению, воспринимается многими браузерами как «другой» и может вызвать проблемы с индексированием вашей страницы в поисковых системах.

На практике, пока эта ситуация не будет разрешена, используйте HTTP 303.

Проверить документацию

Помимо основных мер предосторожности, описанных выше, вам следует потратить некоторое время на то, чтобы прочитать документацию по использованию перенаправлений PHP, прежде чем публиковать их. Вам следует проверить руководство по PHP, чтобы убедиться, что вы понимаете, что вы делаете, а также проверить документацию W3C, чтобы убедиться, что вы следуете передовой практике.

И пока вы догоняете своё чтение, не забудьте также защитить веб-сайт от распространённых уязвимостей : если вы уже находитесь в положении, когда вам нужно использовать перенаправления PHP, вероятно, безопасность вашего сайта потребует аудита.

Другие методы

Учитывая все эти проблемы, вы, вероятно, задаётесь вопросом, зачем вообще использовать перенаправление PHP. Это законный вопрос. Хотя перенаправления PHP обычно выполняются быстрее, чем другие типы перенаправления, и, следовательно, могут быть важным инструментом для повышения скорости веб-сайта, существуют и другие варианты.

Есть два основных подхода к этому. Вы можете использовать элемент HTMLдля перенаправления из HTML-части вашей страницы или использовать JavaScript. Первый подход — использованиебудет выглядеть так:

<meta http-Equiv = «refresh» content = «0; url = newpage.php»>

Второй подход — использование JavaScript — немного более элегантен и, безусловно, выглядит более профессионально:

window.location.replace («http: //newpage.php/»);

Оба этих подхода будут выполняться немного медленнее, чем немедленное перенаправление header (), но, возможно, они более гибкие.

Заключение

Хотя выполнение описанных выше шагов должно означать, что ваши перенаправления PHP выполняются безопасно, если вы используете несколько перенаправлений PHP, вероятно, пора переосмыслить структуру вашего сайта.

Для этого есть несколько веских причин. Во-первых, не все веб-хосты созданы равными, и если вы отправляете всех посетителей обходным путём вокруг вашего сайта, это повлияет на его производительность. Это можно улучшить до некоторой степени, используя доступного поставщика веб-хостинга, но только до определённой степени.

Вторая причина заключается в том, что страница, с которой вы перенаправляетесь, может собирать данные о ваших посетителях без вашего ведома, особенно если вы используете программное обеспечение веб-аналитики для отслеживания производительности вашего сайта. В нашем мире пост-GDPR это может иметь серьёзные последствия.

Итак, будьте осторожны с перенаправлениями PHP, используйте их правильно и используйте их только там и тогда, когда вам это абсолютно необходимо.

Читайте также:  Static_cast С++
Оцените статью
bestprogrammer.ru
Добавить комментарий