Почему использование JavaScript в PHP для изменения местоположения — плохая практика?

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

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

Поэтому я регулярно выкладываю свое личное решение, которое выглядит следующим образом:

«Завершите тег PHP, если вы хотите выполнить перенаправление, и напишите следующее:

 <script>
location.replace("Whatever.php");
</script>

А затем, наконец, возьмите свой тег PHP еще раз, чтобы завершить ваш код. «

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

Итак, мой вопрос: почему это так сильно отвергается? Что это за использование этого решения, которое так неодобрительно?

Пример полного использования (исключая escape-функции):

if(isset($_GET['role'])){ //If value set in GET
$role = $_GET['role']

if($role == "Admin"){ ?> // Drop PHP tag

<script>location.replace("AdminPage.php");</script> //Solution

<?php else{ ?>

<script>location.replace("StandardPage.php");</script> //Solution

<?php } } ?> //Pick up Tag final time and Close isset.

-1

Решение

Просто потому, что это работает, не означает, что вы не должны предпочитать более подходящий способ сделать это. Так почему же вы предпочитаете перенаправлять заголовок?

  1. JavaScript можно отключить, и если вы перенаправляете из-за необходимой авторизации (похоже, вы перенаправляете на основе этого в вашем примере), кто-то может просто отключить JavaScript и увидеть «секретные вещи» на этой странице, возможно, даже вызвать действие через ссылку (удаление данных), если в бэкэнде отсутствует проверка авторизации.
  2. Если используется перенаправление заголовка, это произойдет, как только клиент извлечет заголовки. Передача контента не требуется (в некоторых случаях это возможно, но с использованием exit; сразу после заголовка Location это помешает). Это означает меньше накладных расходов и более быстрое время реакции для конечного пользователя.
1

Другие решения

Во-первых, клиент может просто отключить Javascript. Итак, ваш код сразу же нарушается.

Не давайте клиенту никаких шансов изменить или нарушить ваш рабочий процесс.

Во-вторых, плохая практика, потому что неуправляемый. Держите его в отдельном стиле, скрипты и PHP-коды.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector