Подтвердить что ты не робот

Зачем использовать $_SERVER ['PHP_SELF'] вместо ""

В форме на странице PHP вы можете использовать:

<form action="<?php echo $_SERVER['PHP_SELF']; ?>" ...>

или

<form action="#" ...>

или

<form action="" ...>

в атрибуте действия формы. Поскольку echo $_SERVER['PHP_SELF'] не передает переменные для использования GET, и вы должны использовать "", зачем использовать это или "#"?

Я спрашиваю, потому что мне потребовалось некоторое время, чтобы понять, что переменные не передаются с помощью $_SERVER['PHP_SELF']. Спасибо.

4b9b3361

Ответ 1

Атрибут action по умолчанию будет иметь текущий URL. Это самый надежный и простой способ сказать: "Отправить форму в том же месте, откуда она появилась".

Нет причин использовать $_SERVER['PHP_SELF'], а # не отправляет форму вообще (если не имеется обработчик событий submit, который обрабатывает представление).

Ответ 2

Использование пустой строки прекрасно и на самом деле намного безопаснее, чем просто с помощью $_SERVER['PHP_SELF'].

При использовании $_SERVER['PHP_SELF'] очень просто вводить вредоносные данные, просто добавляя /<script>... после whatever.php части URL-адреса, поэтому вы не должны использовать этот метод и прекратить использование любого учебника PHP, который его предлагает.

Ответ 3

При вставке переменной ЛЮБОЙ в HTML, если вы не хотите, чтобы браузер интерпретировал эту переменную как HTML, лучше всего использовать htmlspecialchars(). Помимо всего прочего, он не позволяет хакерам вставлять произвольный HTML на вашу страницу.

Значение $_SERVER['PHP_SELF'] берется непосредственно из URL-адреса, введенного в браузере. Поэтому, если вы используете его без htmlspecialchars(), вы позволяете хакерам напрямую манипулировать выводами вашего кода.

Например, если я пришлю вам ссылку на http://example.com/"><script>malicious_code_here()</script><span class=" и у вас есть <form action="<?php echo $_SERVER['PHP_SELF'] ?>">, вывод будет:

<form action="http://example.com/"><script>malicious_code_here()</script><span class="">

My script будет запущен, и вы не будете мудрее. Если вы вошли в систему, я, возможно, украл ваши файлы cookie или распечатал конфиденциальную информацию со своей страницы.

Однако, если вы использовали <form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']) ?>">, выход был бы следующим:

<form action="http://example.com/&quot;&gt;&lt;script&gt;cookie_stealing_code()&lt;/script&gt;&lt;span class=&quot;">

Когда вы отправили форму, у вас был бы странный URL-адрес, но по крайней мере мое зло script не выполнялось.

С другой стороны, если вы использовали <form action="">, то результат был бы таким же, независимо от того, что я добавил в свою ссылку. Это вариант, который я бы рекомендовал.

Ответ 4

Я знаю, что вопрос - два года, но это был первый результат того, что я ищу. Я нашел хорошие ответы и надеюсь, что смогу помочь другим пользователям.

Посмотрите на это

Я делаю это коротко:

  • используйте переменную $_SERVER [ "PHP_SELF" ] с htmlspecialchars(): htmlspecialchars ($ _ SERVER [ "PHP_SELF" ]);
  • PHP_SELF возвращает имя исполняемого файла script
  • Функция htmlspecialchars() преобразует специальные символы в объекты HTML. - > NO XSS

Ответ 5

В дополнение к вышеприведенным ответам другой способ сделать это $_SERVER['PHP_SELF'] или просто использовать пустую строку - использовать __DIR__.
ИЛИ
Если вы используете более низкую версию PHP (< 5.3), более распространенной альтернативой является использование dirname(__FILE__)
Оба возвращают имя папки файла в контексте.

ИЗМЕНИТЬ
Как отметил Боанн, это возвращает местоположение файла на диске. Который вы не могли бы выставить в качестве URL-адреса. В этом случае dirname($_SERVER['PHP_SELF']) может возвращать имя папки файла в контексте.

Ответ 6

Нет никакой разницы. $_SERVER ['PHP_SELF'] просто делает время выполнения медленнее, например, 0,000001 секунд.