Зачем использовать $_SERVER ['PHP_SELF'] вместо ""
В форме на странице PHP вы можете использовать:
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" ...>
или
<form action="#" ...>
или
<form action="" ...>
в атрибуте действия формы. Поскольку echo $_SERVER['PHP_SELF']
не передает переменные для использования GET
, и вы должны использовать ""
, зачем использовать это или "#"
?
Я спрашиваю, потому что мне потребовалось некоторое время, чтобы понять, что переменные не передаются с помощью $_SERVER['PHP_SELF']
. Спасибо.
Ответы
Ответ 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/"><script>cookie_stealing_code()</script><span class="">
Когда вы отправили форму, у вас был бы странный 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 секунд.